Cloud Storage データのクエリ

BigQuery では、次の形式の Cloud Storage データのクエリがサポートされています。

  • カンマ区切り値(CSV)
  • JSON(改行区切り)
  • Avro ファイル
  • Cloud Datastore のエクスポート
  • Cloud Firestore のエクスポート

BigQuery では、次のストレージ クラスの Cloud Storage データにクエリを実行できます。

  • Multi-Regional
  • Regional
  • Nearline
  • Coldline

Cloud Storage 外部データソースに対してクエリを実行するには、データの Cloud Storage URI パスを指定し、データソースを参照するテーブルを作成します。Cloud Storage のデータソースの参照に使用するテーブルは、永続テーブルまたは一時テーブルです。

Cloud Storage に保存されているデータに対してクエリを実行する場合は、必ずデータセットと Cloud Storage バケットの場所に関する考慮事項を参照してください。

Cloud Storage URI の取得

Cloud Storage データソースを使用して外部テーブルを作成するには、Cloud Storage URI を指定する必要があります。

Cloud Storage URI は、バケット名とオブジェクト(ファイル名)で構成されます。たとえば、Cloud Storage バケットの名前が mybucket でデータファイルの名前が myfile.csv の場合、バケットの URI は gs://mybucket/myfile.csv になります。データが複数のファイルに分かれている場合は、URI にワイルドカードを使用できます。詳しくは、Cloud Storage のリクエスト URI をご覧ください。

BigQuery は、最初のダブル スラッシュ以降に複数の連続スラッシュが含まれるソース URI をサポートしていません。Cloud Storage では、オブジェクト名に複数の連続スラッシュ("/")文字を含めることができます。一方、BigQuery では、複数の連続スラッシュは単一のスラッシュに変換されます。たとえば、gs://bucket/my//object//name というソース URI は Cloud Storage では有効ですが、BigQuery では機能しません。

Cloud Storage URI を取得するには:

  1. Cloud Storage Console を開きます。

    Cloud Storage Console

  2. ソースデータを含むオブジェクト(ファイル)の場所に移動します。

  3. Cloud Storage Console の上部に、オブジェクトのパスが表示されます。URI を作成するには、gs://bucket/file を適切なパス(例: gs://mybucket/myfile.json)に置き換えます。 bucket は Cloud Storage バケットの名前、file はデータを含むオブジェクト(ファイル)の名前です。

外部の永続テーブルと一時テーブル

永続テーブルまたは一時テーブルを使用すると、BigQuery で外部のデータソースに対してクエリを行うことができます。永続テーブルは、データセットで作成され、外部データソースにリンクされるテーブルです。テーブルが永続的であるため、データセット レベルでアクセス制御を行い、基礎となる外部データソースにアクセスできる他のユーザーとテーブルを共有できます。テーブルに対するクエリはいつでも実行できます。

一時テーブルを使用して外部データソースに対してクエリを実行する場合には、クエリを含むコマンドを送信し、外部データソースにリンクする一時テーブルを作成します。一時テーブルを使用する場合、BigQuery データセット内にテーブルを作成しません。テーブルはデータセットに永続的に保存されないため、このテーブルを他のユーザーと共有することはできません。一時テーブルを使用して外部データソースにクエリを実行する方法は、外部データに 1 回限りのアドホック クエリを実行する場合、あるいは抽出、変換、読み込み(ETL)プロセスを行う場合に便利です。

外部の永続テーブルを使用して Cloud Storage データに対してクエリを実行する

必要な権限とスコープ

永続テーブルを使用して Cloud Storage の外部データに対してクエリを実行する場合、プロジェクト レベル以上でクエリジョブを実行する権限、外部データを指すテーブルを作成できる権限、テーブルにアクセスできる権限が必要です。外部データが Cloud Storage に保存されている場合、Cloud Storage バケット内のデータに対するアクセス権も必要です。

BigQuery の権限

BigQuery で外部テーブルを作成およびクエリするには、少なくとも以下の権限が必要です。

  • bigquery.tables.create
  • bigquery.tables.getData
  • bigquery.jobs.create

bigquery.tables.create 権限と bigquery.tables.getData 権限は、どちらも以下の事前定義された Cloud IAM 役割に含まれています。

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

bigquery.jobs.create 権限は、以下の事前定義された Cloud IAM 役割に含まれています。

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

また、bigquery.datasets.create 権限を持つユーザーがデータセットを作成すると、そのデータセットに対する bigquery.dataOwner アクセス権がユーザーに付与されます。 bigquery.dataOwner アクセス権により、ユーザーはデータセットに外部テーブルを作成できますが、データに対してクエリを実行するには bigquery.jobs.create 権限が引き続き必要です。

BigQuery での Cloud IAM 役割と権限については、アクセス制御をご覧ください。

Cloud Storage の権限

Cloud Storage バケット内の外部データに対してクエリを実行するには、storage.objects.get 権限が付与されている必要があります。URI のワイルドカードを使用する場合は storage.objects.list 権限も必要です。

事前定義された Cloud IAM 役割 storage.objectViewer が付与されると、storage.objects.get 権限と storage.objects.list 権限が両方とも与えられます。

Compute Engine インスタンスのスコープ

Compute Engine インスタンスを作成するときに、インスタンスに対するスコープのリストを指定できます。スコープにより、Cloud Storage を含む GCP プロダクトに対するインスタンスのアクセスを制御します。VM で実行されるアプリケーションは、インスタンスにアタッチされたサービス アカウントを使用して Google Cloud Platform API を呼び出します。

Compute Engine インスタンスを Compute Engine のデフォルトのサービス アカウントとして実行するように設定するときに、そのサービス アカウントが Cloud Storage データソースにリンクされた外部テーブルにアクセスする場合、インスタンスに Cloud Storage への読み取り専用アクセス権が必要です。Compute Engine のデフォルトのサービス アカウントには、https://www.googleapis.com/auth/devstorage.read_only スコープが自動的に付与されます。固有のサービス アカウントを作成する場合は、インスタンスに Cloud Storage 読み取り専用スコープを適用してください。

Compute Engine インスタンスへのスコープの適用方法については、インスタンスのサービス アカウントとアクセス スコープを変更するをご覧ください。Compute Engine のサービス アカウントの詳細については、サービス アカウントをご覧ください。

外部の永続テーブルを作成してクエリを実行する

外部のデータソースにリンクされた永続テーブルは、次の方法で作成します。

  • GCP Console または従来の BigQuery ウェブ UI を使用する
  • コマンドライン ツールの mk コマンドを使用する
  • tables.insert API メソッドを使用するときに ExternalDataConfiguration を作成する
  • クライアント ライブラリを使用する

永続テーブルを使用して外部データソースに対してクエリを実行するには、BigQuery データセットに外部データソースにリンクするテーブルを作成します。データは BigQuery テーブルに保存されません。テーブルが永続的であるため、データセット レベルでアクセス制御を行い、基礎となる外部データソースにアクセスできる他のユーザーとテーブルを共有できます。

BigQuery で外部の永続テーブルを作成するときに、次の 3 つの方法でスキーマ情報を指定できます。

  • tables.insert API メソッドを使用して永続的な外部テーブルを作成する場合、スキーマ定義と ExternalDataConfiguration を含むテーブル リソースを作成します。autodetect パラメータを true に設定して、サポートされているデータソースのスキーマ自動検出を有効にします。
  • CLI で外部の永続テーブルを作成する場合は、テーブル定義ファイルを使用できます。固有のスキーマ ファイルを作成して使用することも、コマンドラインからインラインでスキーマを入力することもできます。データソースがスキーマの自動検出に対応している場合、テーブル定義ファイルの作成時にこの機能を有効にできます。
  • コンソールまたは従来の BigQuery ウェブ UI を使用して外部の永続テーブルを作成する場合は、テーブル スキーマを手動で入力するか、サポートされているデータソースに対するスキーマの自動検出を利用できます。

外部テーブルを作成するには:

Console

  1. GCP Console で BigQuery ウェブ UI を開きます。
    GCP Console に移動
  2. ナビゲーション パネルの [リソース] セクションでプロジェクトを展開し、データセットを選択します。
  3. ウィンドウの右側にある [テーブルを作成] をクリックします。 テーブルを作成
  4. [テーブルの作成] ページの [ソース] セクションで、次の操作を行います。

    • [テーブルの作成元] で [Cloud Storage] を選択します。

    • [GCS バケットからファイルを選択] で、ファイルまたは Cloud Storage バケットを参照するか、「Cloud Storage URI」を入力します。GCP Console で複数の URI を指定することはできませんが、ワイルドカードは使用できます。Cloud Storage バケットは、作成するテーブルを含むデータセットと同じロケーションに存在する必要があります。

      ファイルを選択

    • [ファイル形式] でデータの形式を選択します。Cloud Storage の外部データに有効なフォーマットは次のとおりです。

      • カンマ区切り値(CSV)
      • JSON(改行区切り)
      • Avro
      • Cloud Datastore のバックアップ(Cloud Firestore でも使用)
  5. [テーブルの作成] ページの [送信先] セクションで、次の操作を行います。

    • [データセット名] で、該当するデータセットを選択します。

      データセットを選択

    • [テーブルタイプ] が [外部テーブル] に設定されていることを確認します。

    • [テーブル名] に、BigQuery で作成するテーブルの名前を入力します。

  6. [スキーマ] セクションでスキーマ定義を入力します。

    • JSON または CSV ファイルの場合、[自動検出] オプションをオンにするとスキーマの自動検出を有効にできます。 Cloud Datastore エクスポート、Cloud Firestore エクスポート、Avro ファイルの場合は、[自動検出] を使用できません。これらのファイル形式のスキーマ情報は、自己記述型のソースデータから自動的に取得されます。
    • CSV ファイルと JSON ファイルの場合、次の方法でスキーマ情報を手動で入力できます。
      • [テキストとして編集] を有効にし、テーブル スキーマを JSON 配列として入力します。注: 既存のテーブルのスキーマを JSON 形式で表示するには、CLI コマンド「bq show --format=prettyjson dataset.table」を入力します。
      • [フィールドを追加] を使用して、スキーマを手動で入力します。
  7. [テーブルを作成] をクリックします。

永続テーブルが作成されると、ネイティブの BigQuery テーブルの場合と同じようにクエリを実行できます。クエリの完了後は、結果を CSV または JSON としてエクスポート、テーブルとして保存、または Google スプレッドシートに保存できます。

従来の UI

  1. BigQuery ウェブ UI に移動します。
    BigQuery ウェブ UI に移動

  2. ナビゲーション パネルで、データセットにカーソルを合わせて下矢印アイコン 下矢印アイコン画像 をクリックし、[Create new table] をクリックします。

  3. [Create Table] ページの [Source Data] セクションで、次の操作を行います。

    • [Location] で [Cloud Storage] を選択し、ソース フィールドに Cloud Storage URI を入力します。Cloud Storage URI にはワイルドカードを使用できます。
    • [File format] でデータの形式を選択します。Cloud Storage に有効なフォーマットは次のとおりです。
      • カンマ区切り値(CSV)
      • JSON(改行区切り)
      • Avro
      • Cloud Datastore のバックアップ(Cloud Firestore でも使用)
  4. [Create Table] ページの [Destination Table] セクションで、次の操作を行います。

    • [Table name] で、該当するデータセットを選択します。テーブル名のフィールドで、BigQuery で作成する永続テーブルの名前を入力します。
    • [Table type] が [External table] に設定されていることを確認します。
  5. [Schema] セクションで、スキーマ情報を入力します。

    • JSON または CSV ファイルの場合、[Auto-detect] オプションをオンにしてスキーマの自動検出を有効にできます。 Cloud Datastore エクスポート、Cloud Firestore エクスポート、Avro ファイルの場合は、[Auto-detect] を使用できません。これらのファイル形式のスキーマ情報は、自己記述型のソースデータから自動的に取得されます。

    • CSV または JSON スキーマ情報を手動で入力するには、次の操作を行います。

      • [Edit as text] をクリックして、テーブル スキーマを JSON 形式で入力する。
      • [Add Field] を使用して、スキーマを手動で入力する。
  6. [Options] セクションで該当する項目を選択し、[Create Table] をクリックします。

永続テーブルが作成されると、ネイティブの BigQuery テーブルの場合と同じようにクエリを実行できます。クエリの完了後は、結果を CSV または JSON としてエクスポート、テーブルとして保存、または Google スプレッドシートに保存できます。

CLI

BigQuery コマンドライン ツールでテーブルを作成するには、bq mk コマンドを使用します。CLI を使用して、外部データソースにリンクするテーブルを作成する場合、以下を使用してテーブルのスキーマを確認できます。

  • テーブル定義ファイル(ローカルマシンに保存)
  • インライン スキーマの定義
  • JSON スキーマ ファイル(ローカルマシンに保存)

テーブル定義ファイルを使用して Cloud Storage データソースにリンクされた永続テーブルを作成するには、次のコマンドを入力します。

bq mk \
--external_table_definition=definition_file \
dataset.table

ここで

  • definition_file は、ローカルマシン上のテーブル定義ファイルのパスです。
  • dataset は、テーブルを含むデータセットの名前です。
  • table は、作成するテーブルの名前です。

たとえば、次のコマンドを実行すると、mytable_def というテーブル定義ファイルを使用して mytable という永続テーブルが作成されます。

bq mk --external_table_definition=/tmp/mytable_def mydataset.mytable

インライン スキーマ定義を使用して、外部データソースにリンクする永続テーブルを作成するには、次のコマンドを入力します。

bq mk \
--external_table_definition=schema@source_format=Cloud Storage URI \
dataset.table

ここで

  • schema は、スキーマ定義(field:data_type,field:data_type の形式)です。
  • source_format は、CSVNEWLINE_DELIMITED_JSONAVRO または DATASTORE_BACKUP です(DATASTORE_BACKUP は Cloud Filestore でも使用されます)。
  • Cloud Storage URI は、使用する Cloud Storage URI です。
  • dataset は、テーブルを含むデータセットの名前です。
  • table は、作成するテーブルの名前です。

たとえば、次のコマンドを実行すると、スキーマ定義 Region:STRING,Quarter:STRING,Total_sales:INTEGER を使用して、Cloud Storage に保存された CSV ファイルにリンクする sales という永続テーブルが作成されます。

bq mk \
--external_table_definition=Region:STRING,Quarter:STRING,Total_sales:INTEGER@CSV=gs://mybucket/sales.csv \
mydataset.sales

JSON スキーマ ファイルを使用して、外部データソースにリンクする永続テーブルを作成するには、次のコマンドを入力します。

bq mk \
--external_table_definition=schema@source_format=Cloud Storage URI \
dataset.table

ここで

  • schema は、ローカルマシン上の JSON スキーマ ファイルのパスです。
  • source_format は、CSVNEWLINE_DELIMITED_JSONAVRO または DATASTORE_BACKUP です(DATASTORE_BACKUP は Cloud Firestore でも使用されます)。
  • Cloud Storage URI は、使用する Cloud Storage URI です。
  • dataset は、テーブルを含むデータセットの名前です。
  • table は、作成するテーブルの名前です。

たとえば、次のコマンドを実行すると、/tmp/sales_schema.json というスキーマ ファイルを使用して、Cloud Storage に保存された CSV ファイルにリンクするテーブルが sales という名前で作成されます。

bq mk \
--external_table_definition=/tmp/sales_schema.json@CSV=gs://mybucket/sales.csv \
mydataset.sales

永続テーブルが作成されると、ネイティブの BigQuery テーブルの場合と同じようにクエリを実行できます。クエリの完了後は、結果を CSV または JSON としてエクスポート、テーブルとして保存、または Google スプレッドシートに保存できます。

API

tables.insert API メソッドを使用するときに、ExternalDataConfiguration を作成します。schema プロパティを指定するか、autodetect プロパティを true に設定して、サポートされているデータソースのスキーマ自動検出を有効にします。

Python

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用にある Python の設定手順に沿って設定を行ってください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'my_dataset'

# Configure the external data source
dataset_ref = client.dataset(dataset_id)
table_id = 'us_states'
schema = [
    bigquery.SchemaField('name', 'STRING'),
    bigquery.SchemaField('post_abbr', 'STRING')
]
table = bigquery.Table(dataset_ref.table(table_id), schema=schema)
external_config = bigquery.ExternalConfig('CSV')
external_config.source_uris = [
    'gs://cloud-samples-data/bigquery/us-states/us-states.csv',
]
external_config.options.skip_leading_rows = 1  # optionally skip header row
table.external_data_configuration = external_config

# Create a permanent table linked to the GCS file
table = client.create_table(table)  # API request

# Example query to find states starting with 'W'
sql = 'SELECT * FROM `{}.{}` WHERE name LIKE "W%"'.format(
    dataset_id, table_id)

query_job = client.query(sql)  # API request

w_states = list(query_job)  # Waits for query to finish
print('There are {} states with names starting with W.'.format(
    len(w_states)))

一時テーブルを使用して Cloud Storage データにクエリを実行する

永続テーブルを作成せずに外部データソースに対してクエリを実行するには、次のものを結合するコマンドを実行します。

テーブル定義ファイルまたは指定したスキーマを使用して外部の一時テーブルが作成され、そのテーブルに対してクエリが実行されます。一時テーブルを使用して外部データソースにクエリを実行するには、BigQuery CLI または API を使用します。

外部の一時テーブルを使用する場合は、BigQuery データセット内にテーブルが作成されません。テーブルはデータセットに永続的に保存されないため、このテーブルを他のユーザーと共有することはできません。外部データに対する 1 回限りのアドホック クエリを行う場合、または抽出、変換、読み込み(ETL)プロセスを行う場合は、一時テーブルを使用して外部データソースに対してクエリを実行すると便利です。

必要な権限

一時テーブルを使用して Cloud Storage の外部データに対してクエリを実行する場合、プロジェクト レベル以上でクエリジョブを実行する権限が必要であり、外部データを指すテーブルを含むデータセットにアクセスする必要があります。Cloud Storage のデータに対してクエリを実行する場合は、データを含むバケットに対するアクセス権も必要です。

BigQuery の権限

一時テーブルを使用して BigQuery の外部テーブルに対してクエリを実行するには、少なくとも以下の権限が必要です。

  • bigquery.tables.getData
  • bigquery.jobs.create

事前定義された以下の Cloud IAM 役割には、bigquery.tables.getData 権限が含まれています。

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

bigquery.jobs.create 権限は、以下の事前定義された Cloud IAM 役割に含まれています。

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

また、bigquery.datasets.create 権限を持つユーザーがデータセットを作成すると、そのデータセットに対する bigquery.dataOwner アクセス権がユーザーに付与されます。 bigquery.dataOwner アクセス権により、ユーザーはデータセット内の外部テーブルを作成してアクセスできますが、データに対してクエリを実行するには bigquery.jobs.create 権限が引き続き必要です。

BigQuery での Cloud IAM 役割と権限については、アクセス制御をご覧ください。

Cloud Storage の権限

Cloud Storage バケット内の外部データに対してクエリを実行するには、storage.objects.get 権限が付与されている必要があります。URI のワイルドカードを使用する場合は storage.objects.list 権限も必要です。

事前定義された Cloud IAM 役割 storage.objectViewer が付与されると、storage.objects.get 権限と storage.objects.list 権限が両方とも与えられます。

一時テーブルを作成してクエリを行う

CLI、API、またはクライアント ライブラリを使用して、外部データソースにリンクされた一時テーブルを作成し、それに対してクエリを実行できます。

CLI

外部データソースにリンクする一時テーブルに対してクエリを実行するには、bq query コマンドで --external_table_definition フラグを使用します。CLI を使用して、外部データソースにリンクする一時テーブルに対してクエリを実行する場合、以下を使用してテーブルのスキーマを確認できます。

  • テーブル定義ファイル(ローカルマシンに保存)
  • インライン スキーマの定義
  • JSON スキーマ ファイル(ローカルマシンに保存)

(省略可)--location フラグを指定して、その値をロケーションに設定します。

テーブル定義ファイルを使用して、外部データソースにリンクする一時テーブルに対してクエリを実行するには、次のコマンドを入力します。

bq --location=location query \
--external_table_definition=table::definition_file \
'query'

ここで

  • location は、ロケーションの名前です。--location フラグは省略可能です。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値を asia-northeast1 に設定します。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。
  • table は、作成する一時テーブルの名前です。
  • definition_file は、ローカルマシン上のテーブル定義ファイルのパスです。
  • query は、一時テーブルに送信するクエリです。

たとえば、次のコマンドを実行すると、sales_def というテーブル定義ファイルを使用して sales という一時テーブルが作成され、クエリが実行されます。

bq query \
--external_table_definition=sales::sales_def \
'SELECT
  Region,
  Total_sales
FROM
  sales'

インライン スキーマ定義を使用して、外部データソースにリンクする一時テーブルに対してクエリを実行するには、次のコマンドを入力します。

bq --location=location query \
--external_table_definition=table::schema@source_format=Cloud Storage URI \
'query'

ここで

  • location は、ロケーションの名前です。--location フラグは省略可能です。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値を asia-northeast1 に設定します。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。
  • table は、作成する一時テーブルの名前です。
  • schema は、インライン スキーマ定義(field:data_type,field:data_type の形式)です。
  • source_format は、CSVNEWLINE_DELIMITED_JSONAVRO または DATASTORE_BACKUP です(DATASTORE_BACKUP は Cloud Firestore でも使用されます)。
  • Cloud Storage URI は、使用する Cloud Storage URI です。
  • query は、一時テーブルに送信するクエリです。

たとえば、次のコマンドを実行すると、スキーマ定義 Region:STRING,Quarter:STRING,Total_sales:INTEGER を使用して、Cloud Storage に保存された CSV ファイルにリンクする一時テーブルが sales という名前で作成され、クエリが実行されます。

bq query \
--external_table_definition=sales::Region:STRING,Quarter:STRING,Total_sales:INTEGER@CSV=gs://mybucket/sales.csv \
'SELECT
  Region,
  Total_sales
FROM
  sales'

JSON スキーマ ファイルを使用して、外部のデータソースにリンクする一時テーブルに対してクエリを実行するには、次のコマンドを入力します。

bq --location=location query \
--external_table_definition=schema_file@source_format=Cloud Storage URI \
'query'

ここで

  • location は、ロケーションの名前です。--location フラグは省略可能です。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値を asia-northeast1 に設定します。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。
  • schema_file は、ローカルマシン上にある JSON スキーマ ファイルのパスです。
  • source_format は、CSVNEWLINE_DELIMITED_JSONAVRO または DATASTORE_BACKUP です(DATASTORE_BACKUP は Cloud Firestore でも使用されます)。
  • Cloud Storage URI は、使用する Cloud Storage URI です。
  • query は、一時テーブルに送信するクエリです。

たとえば、次のコマンドを実行すると、スキーマ ファイル /tmp/sales_schema.json を使用して、Cloud Storage に保存された CSV ファイルにリンクする一時テーブルが sales という名前で作成され、クエリが実行されます。

bq query
--external_table_definition=sales::/tmp/sales_schema.json@CSV=gs://mybucket/sales.csv
'SELECT Region, Total_sales FROM sales'

API

Python

このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用にある Python の設定手順に沿って設定を行ってください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。

# from google.cloud import bigquery
# client = bigquery.Client()

# Configure the external data source and query job
external_config = bigquery.ExternalConfig('CSV')
external_config.source_uris = [
    'gs://cloud-samples-data/bigquery/us-states/us-states.csv',
]
external_config.schema = [
    bigquery.SchemaField('name', 'STRING'),
    bigquery.SchemaField('post_abbr', 'STRING')
]
external_config.options.skip_leading_rows = 1  # optionally skip header row
table_id = 'us_states'
job_config = bigquery.QueryJobConfig()
job_config.table_definitions = {table_id: external_config}

# Example query to find states starting with 'W'
sql = 'SELECT * FROM `{}` WHERE name LIKE "W%"'.format(table_id)

query_job = client.query(sql, job_config=job_config)  # API request

w_states = list(query_job)  # Waits for query to finish
print('There are {} states with names starting with W.'.format(
    len(w_states)))

Cloud Storage の URI でのワイルドカードの使用

Cloud Storage のデータが、共通のベース名を共有する複数のファイルに分割されている場合は、テーブル定義ファイルの URI でワイルドカードを使用できます。テーブル定義ファイルを使用せずに外部テーブルを作成するときにもワイルドカードを使用できます。

Cloud Storage の URI にワイルドカードを追加するには、ベース名の末尾にアスタリスク(*)を追加します。たとえば、fed-sample000001.csvfed-sample000002.csv という 2 つのファイルがある場合、バケット URI を gs://mybucket/fed-sample* とします。このワイルドカードを含む URI は、Console、従来のウェブ UI、CLI、API、クライアント ライブラリで使用できます。

バケット内のオブジェクト(ファイル名)について使用できるワイルドカードは 1 つのみです。ワイルドカードは、オブジェクト名の中や末尾に使用できます。バケット名にワイルドカードを付けることはできません。

Google Cloud Datastore のエクスポートで指定できる URI は 1 つのみです。また、URI の末尾に .backup_info または .export_metadata を指定する必要があります。

以下の場合、ワイルドカード文字 *使用できません

  • Cloud Datastore または Cloud Firestore のエクスポートにリンクされる外部テーブルを作成する
  • Cloud Storage から Cloud Datastore または Cloud Firestore のエクスポート データを読み込む

_FILE_NAME 疑似列

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

列名 _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 を使用する場合や Cloud SDK でデフォルトのプロジェクトを設定する場合、このフラグは不要です。
  • dataset は、外部の永続テーブルが保存されているデータセットの名前です。
  • table_name は、外部の永続テーブルの名前です。
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。