0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

BigQuery Omni を使って Azure Blob ストレージのデータにアクセスする

Last updated at Posted at 2022-11-28

BigQuery Omni を使って Azure Blob ストレージのデータにアクセスする

BigQuery Omni とは、Amazon S3 や Azure Blob ストレージにあるデータに対して BigQuery のクエリを実行できる、クロスクラウドの分析ソリューションです。
BigQuery を使いたいけど分析データは他クラウドから動かしたくない、といった場合に使うことができます。

この記事では、BigQuery Omni を使って Azure Blob ストレージのデータに BigQuery のクエリを実行してみました。

事前調査

制限事項

ドキュメントに BigQuery Omni の制限事項が記載されています。

BigQuery Omni に対応しているリージョンは、AWS/Azure に一つずつ用意されています。

また、接続先(Amazon S3/Azure Blob ストレージ)固有の制限事項は見つけられませんでした。

料金

※料金は 2022/11 時点の情報です。
BigQuery Omni を使うには、BigQuery Reservations で定額料金プランに加入する必要があります。
通常オンデマンド料金ではクエリ実行ができませんが、期間限定で Azure 環境へのアクセスは無料になっています。

*Azure-US-East では BigQuery Omni をご利用のお客様に対して期間限定で料金が請求されません。ご請求に関する変更については、Google からご連絡いたします。

月額料金はこのようになっており、円安も相まって高額です。

ドル 円(146円/ドルとして計算)
AWS $2,500 365,000円
Azure $2,920 426,320円

Flex Slots という短期間のコミットメントを用意されており、コミットメント購入後60秒経過すればいつでもキャンセルできます。
こちらは一時間ごとの料金が掲載されています。

ドル 円(146円/ドルとして計算)
AWS $5.00 730円
Azure $5.80 846.8円

準備

Azure Blob ストレージを用意する

Azure Blob ストレージアカウントを作成します。
作成時に気を付けることは2点あります。

-「基本」の地域に East US 2 を指定する
-「詳細設定」の 階層型名前空間を有効にする

ストレージアカウントの作成が完了したら、左メニューの「コンテナー」から新規コンテナーを作成します。
azurestorageコンテナー.PNG

作ったコンテナーに BigQuery で読み取りたいデータをアップロードします。
azurestorageファイルアップロード.PNG

設定

接続先情報の作成

今回は非連携IDを使用しました。

BigQuery の画面上部にある、「データを追加」から作成します。
データ追加ボタン.PNG

「外部データソースへの接続」を選びます。
データ追加パネル.PNG

必要項目を入力します。注意する項目を記載します。

外部データソースパネル.PNG

外部データソース作成が完了すると BigQuery の外部接続一覧に表示されます。
表示名をクリックすると詳細が確認できます。
azure接続先詳細.PNG

接続情報一番下の「Azureアカウントへログイン」のリンクからサービスプリンシパルを作成します。
Azure のアクセス許可画面が表示されるので、「承諾」ボタンを押すを画面が遷移し、サービスプリンシパルが作成されます。
サービスプリンシパルが正常に作成されました.PNG

作成した BigQuery の Azure AD アプリケーションにロールを割り当てる

※この操作をするにはAzure の Application.ReadWrite.AllAppRoleAssignment.ReadWrite.All 権限が必要になります。

Azure Portal に移動し、ストレージアカウントにロールの割り当てを行います。
ストレージアカウントの「アクセス制御(IAM)」に移動し、「追加」から 「ロールの割り当ての追加」をクリックします。

ロール一覧が表示されるので、「ストレージ BLOB データ所有者」か「ストレージ BLOB データ閲覧者」を選択し、ページ下部の「次へ」をクリックします。
Azure_ロール選択.PNG

「アクセスの割当先」を「ユーザー、グループ、またはサービスプリンシパル」に設定し、「+メンバーを選択する」で、BigQuery に登録した接続情報の[Azure アプリID]に表示されている文字列を指定します。
Azuer_ロール割り当て.PNG

内容に問題がなければ「レビューと割り当て」をクリックして完了です。

外部テーブルを作成する

リージョンを azure-eastus2 にした、専用のデータセットを作成し、そのデータセットにテーブルを作成します。
注意する項目を記載します。

  • テーブルの作成元:Azure Blob Storage
  • Azure Blob Storage のパスを選択:azure://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/CONTAINER_NAME/FILE_PATH 形式で入力
  • 接続 ID:「外部データソースへの接続」で入力した接続 ID を指定する
  • スキーマ:自動検出にチェックを入れる

外部テーブル作成.PNG

作成したテーブルをクリックすると、スキーマと詳細は表示されますがプレビュータブはありませんでした。
外部テーブル概要.PNG

検証

クエリの実行

FROM 句に先ほど作った外部テーブルを指定します。他、特別な設定は必要ありません。
BigQuery ストレージに対してクエリを実行する場合といくつか相違点がありました。
(Omni特有、というより外部テーブルとローカルストレージの違いだと思われます)

データスキャン量が表示されない

Console にクエリを入力すると、右上にクエリ実行時のデータスキャン量が表示されます。
外部テーブルを指定したときはスキャンできるデータがあっても0バイトと表示されます。
0byte表示.PNG

クエリ結果のレコード数が不明

クエリ実行後、結果タブの右下にレコード数が表示されます。
外部テーブルを指定したときは、「多数」と表示され具体的なレコード数がわからない状態です。
レコード数多数表示.PNG

パフォーマンス

Azure Blob ストレージに置いたデータと同じものを BigQuery のローカルテーブルに配置し、同じクエリを実行したときの速度を計測しました。
行数は 120,699 行、合計バイト数は 101.87MB のデータを FROM 句に指定しました。
クエリ実行時に読み取ったデータ量は 1.92 MB です。

結果は以下のようになりました。
Azure Blob ストレージ:42秒
BigQuery のローカルテーブル:1秒
やはり速度は BigQuery ローカルテーブルのほうが速かったです。

参考文献

以上です。参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?