Blob Storage データに対してクエリを実行する

このドキュメントでは、Azure Blob Storage BigLake テーブルに保存されているデータに対してクエリを実行する方法について説明します。

始める前に

Blob Storage BigLake テーブルがあることを確認します。

必要なロール

Blob Storage BigLake テーブルに対してクエリを実行するには、BigQuery API の呼び出し元に次のロールがあることを確認してください。

  • BigQuery Connection ユーザー(roles/bigquery.connectionUser
  • BigQuery データ閲覧者(roles/bigquery.dataViewer
  • BigQuery ユーザー(roles/bigquery.user

呼び出し元は、自分のアカウントまたは Blob Storage 接続サービス アカウントです。権限に応じて、これらのロールを自身に付与するか、これらのロールを付与するよう管理者に依頼します。ロールの付与の詳細については、リソースに対して付与可能なロールの表示をご覧ください。

Blob Storage BigLake テーブルのクエリに必要な権限を正確に確認するには、[必要な権限] セクションを開きます。

必要な権限

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

Blob Storage BigLake テーブルに対してクエリを実行する

Blob Storage BigLake テーブルを作成すると、標準の BigQuery テーブルの場合と同じように GoogleSQL 構文を使用してクエリを行うことができます。

キャッシュに保存されたクエリ結果は、BigQuery の一時テーブルに保存されます。一時 BigLake テーブルに対してクエリを実行するには、一時テーブルに対して BigLake クエリを実行するをご覧ください。BigQuery Omni の制限事項と割り当ての詳細については、制限事項割り当てをご覧ください。

BigQuery Omni リージョンで予約を作成する場合は、Enterprise エディションを使用します。このエディションを使用して予約を作成する方法については、予約を作成するをご覧ください。

Blob Storage BigLake テーブルに対してクエリを実行します。

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. クエリエディタで次のステートメントを入力します。

    SELECT * FROM DATASET_NAME.TABLE_NAME;
    

    次のように置き換えます。

    • DATASET_NAME: 作成したデータセットの名前
    • TABLE_NAME: 作成した BigLake テーブルの名前。

    • [実行] をクリックします。

クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。

一時テーブルに対してクエリを実行する

BigQuery は、クエリ結果を格納する一時テーブルを作成します。一時テーブルからクエリ結果を取得するには、Google Cloud コンソールまたは BigQuery API を使用します。

次のオプションのいずれかを選択します。

コンソール

外部のクラウドデータを参照する BigLake テーブルに対してクエリを実行すると、Google Cloud コンソールでクエリ結果を確認できます。

API

API を使用して BigLake テーブルに対してクエリを実行するには:

  1. Job オブジェクトを作成します。
  2. クエリを非同期で実行するには jobs.insert メソッドを呼び出し、同期的にクエリを実行するには jobs.query メソッドを呼び出して、Job オブジェクトを渡します。
  3. 指定されたジョブ参照を渡して jobs.getQueryResults の行を読み取り、クエリ結果の指定されたテーブル参照を渡して tabledata.list メソッドを読み取ります。

_FILE_NAME 疑似列をクエリする

外部データソースに基づくテーブルは、_FILE_NAME という名前の疑似列を提供します。この列には、行が属するファイルへの完全修飾パスが含まれます。この列は、Cloud StorageGoogle ドライブAmazon S3Azure Blob Storage に保存されている外部データを参照するテーブルでのみ使用できます。

_FILE_NAME という列名は予約されています。つまり、この名前を持つ列はどのテーブルにも作成できません。_FILE_NAME の値を選択するには、エイリアスを使用する必要があります。次の例のクエリでは、エイリアス fn を疑似列に割り当て、_FILE_NAME を選択しています。

  bq query \
  --project_id=PROJECT_ID \
  --use_legacy_sql=false \
  'SELECT
     name,
     _FILE_NAME AS fn
   FROM
     `DATASET.TABLE_NAME`
   WHERE
     name contains "Alex"' 

次のように置き換えます。

  • PROJECT_ID は、有効なプロジェクト ID です。Cloud Shell を使用する場合や Google Cloud CLI でデフォルトのプロジェクトを設定する場合、このフラグは不要です。
  • DATASET は、外部の永続テーブルが保存されているデータセットの名前です。
  • TABLE_NAME は、外部の永続テーブルの名前です。

クエリに _FILE_NAME 疑似列に対するフィルタ述語がある場合、BigQuery は、フィルタに一致しないファイルの読み取りをスキップしようとします。_FILE_NAME 疑似列を使用してクエリ述語を作成する場合、疑似列を使用して取り込み時間パーティション分割テーブルに対するクエリを実行する場合と同様の推奨事項が適用されます。

次のステップ