Amazon S3 データにクエリを実行する
このドキュメントでは、Amazon Simple Storage Service(Amazon S3)BigLake テーブルに保存されているデータに対してクエリを行う方法について説明します。
始める前に
Amazon S3 BigLake テーブルがあることを確認します。
必要なロール
Amazon S3 BigLake テーブルにクエリを実行するには、BigQuery API の呼び出し元に次のロールがあることを確認してください。
- BigQuery Connection ユーザー (
roles/bigquery.connectionUser
) - BigQuery データ閲覧者(
roles/bigquery.dataViewer
) - BigQuery ユーザー(
roles/bigquery.user
)
呼び出し元は、自身のアカウントまたは Amazon S3 接続サービス アカウントのいずれかにできます。権限に応じて、これらのロールを自身に付与するか、これらのロールを付与するよう管理者に依頼できます。ロールの付与の詳細については、リソースに対して付与可能なロールの表示をご覧ください。
Amazon S3 BigLake テーブルに対してクエリを行うのに必要である正確な権限を確認するには、[必要な権限] セクションを展開します。
必要な権限
bigquery.connections.use
bigquery.jobs.create
bigquery.readsessions.create
(BigQuery Storage Read API を使用してデータを読み取る場合にのみ必要)bigquery.tables.get
bigquery.tables.getData
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
Amazon S3 BigLake テーブルに対してクエリを行う
Amazon S3 BigLake テーブルを作成すると、それが標準の BigQuery テーブルの場合と同じように、Google SQL 構文を使用してそれに対してクエリすることができます。
キャッシュに保存されたクエリ結果は、BigQuery の一時テーブルに保存されます。一時 BigLake テーブルに対してクエリを実行するには、一時テーブルに対して BigLake クエリを実行するをご覧ください。BigQuery Omni の制限事項と割り当ての詳細については、制限事項と割り当てをご覧ください。
BigQuery Omni リージョンで予約を作成する場合は、Enterprise エディションを使用します。このエディションを使用して予約を作成する方法については、予約を作成するをご覧ください。
BigLake Amazon S3 テーブルに対してクエリを行います。
SQL
テーブルを検索するには、次のコマンドを実行します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
SELECT * FROM DATASET_NAME.TABLE_NAME;
次のように置き換えます。
DATASET_NAME
: 作成したデータセット名。TABLE_NAME
: 作成したテーブルの名前[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
一時テーブルに対してクエリを実行する
BigQuery は、クエリ結果を格納する一時テーブルを作成します。一時テーブルからクエリ結果を取得するには、Google Cloud コンソールまたは BigQuery API を使用します。
次のオプションのいずれかを選択します。
コンソール
外部のクラウドデータを参照する BigLake テーブルに対してクエリを実行すると、Google Cloud コンソールでクエリ結果を確認できます。
API
API を使用して BigLake テーブルに対してクエリを実行するには:
- Job オブジェクトを作成します。
- クエリを非同期で実行するには
jobs.insert
メソッドを呼び出し、同期的にクエリを実行するにはjobs.query
メソッドを呼び出して、Job
オブジェクトで渡します。 - 指定されたジョブ参照を渡して
jobs.getQueryResults
の行を読み取り、クエリ結果の指定されたテーブル参照を渡してtabledata.list
メソッドを読み取ります。
_FILE_NAME
疑似列をクエリする
外部データソースに基づくテーブルは、_FILE_NAME
という名前の疑似列を提供します。この列には、行が属するファイルへの完全修飾パスが含まれます。この列は、Cloud Storage、Google ドライブ、Amazon S3、Azure 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
疑似列を使用してクエリ述語を作成する場合、疑似列を使用して取り込み時間パーティション分割テーブルに対するクエリを実行する場合と同様の推奨事項が適用されます。
次のステップ
- BigQuery での SQL の使用について確認する。
- BigQuery Omni について確認する。
- BigQuery の割り当てについて確認する。