フェデレーション データソースの作成とクエリ

このページでは、BigQuery の外部に格納されているデータをクエリする方法について説明します。

フェデレーション データソースは、データが BigQuery に格納されていない場合でも直接クエリできるデータソースです。データを読み込みまたはストリーミングする代わりに、外部データソースを参照するテーブルを作成します。永続的なフェデレーション テーブルまたは一時テーブルを作成できます。

BigQuery では、Google Cloud StorageGoogle ドライブからのデータの直接クエリがサポートされます。次のような用途があります。

  • フェデレーション データソース(BigQuery の外部の場所)からデータに対してクエリを実行し、クリーニングした結果を BigQuery ストレージに書き込むことによって、1 つのパスでデータの読み込みとクリーニングを実行します。
  • 他のテーブルと結合する少量のデータを頻繁に変更します。フェデレーション データソースとして、頻繁に変更されるデータは更新されるたびに再読み込みする必要がありません。

次のような制限があります。

  • BigQuery ではフェデレーション データソースに対してデータの整合性が保証されません。 クエリの実行中に基になるデータを変更すると、予期しない動作が発生する可能性があります。
  • クエリ速度を優先する場合は、フェデレーション データソースを設定するのではなく、データを BigQuery に読み込みます。

BigQuery でサポートされるデータソース形式は次のとおりです。

Google Cloud Storage Google ドライブ
カンマ区切り値(CSV) カンマ区切り値(CSV)
JSON(改行区切り) JSON(改行区切り)
Avro ファイル Avro ファイル
Google Cloud Datastore バックアップ ファイル Google スプレッドシート(最初のタブのみ)

フェデレーション データソースを直接クエリするには、データへの Cloud Storage または Google ドライブ URI パスを指定し、そのデータソースを参照する外部テーブルを作成します。CSV ファイルと JSON ファイルの場合は、テーブル スキーマを含めることもできます。 スキーマを省略した場合、BigQuery はスキーマの自動検出を試行します。 Avro と Cloud Datastore のバックアップ ファイルの場合、BigQuery はデータソースからスキーマを読み取ります。

始める前に

  • フェデレーション データソースとして使用する予定のデータファイルを特定します。
  • ウェブ UI ではなく bq コマンドライン ツールを使用することを計画している場合は、BigQuery をアクティブ化し、gcloud SDK をインストールしてあることを確認します。 詳しくは、コマンドライン ツール クイックスタートの始める前にをご覧ください。
  • このページのコマンドライン ツールの例では、project_id フラグを省略できるようにデフォルト プロジェクトを設定したことを想定しています。デフォルト プロジェクトの設定方法について詳しくは、gcloud SDK のドキュメントで gcloud config set をご覧ください。

フェデレーション テーブルを作成する

フェデレーション テーブルは、データが BigQuery に格納されていない外部データソースを参照する永続的なテーブルです。フェデレーション テーブルを作成するには、外部テーブルタイプを使用します。テーブルは永続的であるため、基になる外部データソースへのアクセス権を持つ他のユーザーとテーブルを共有できます。

Cloud Storage を使用してフェデレーション テーブルを作成する

ウェブ UI

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

  2. ナビゲーション領域のデータセット ID にカーソルを合わせて ID の横の下矢印アイコン 下矢印アイコン画像 をクリックし、[新しいテーブルを作成] をクリックします。

  3. [ソースデータ] の下の [場所] で [Google Cloud Storage] を選択し、Cloud Storage ファイルの URI を入力します。たとえば、mybucket Cloud Storage バケットの yob2010.csv という名前のファイルの場合は gs://mybucket/yob2010.csv と入力します。

  4. データの形式を選択します。有効な形式は次のとおりです。

    • カンマ区切り値(CSV)
    • JSON(改行区切り)
    • Avro
    • Cloud Datastore バックアップ
  5. [宛先テーブル] でテーブル ID を入力し、[テーブルタイプ] フィールドで [外部テーブル] を選択します。

  6. CSV ファイルと JSON ファイルの場合は、テーブル スキーマを入力します。Cloud Datastore バックアップ ファイルと Avro ファイルの場合は、テーブル スキーマの指定を省略できます。スキーマは BigQuery によって検出されます。[送信] ボタンをクリックして処理を完了します。

これで、ネイティブな BigQuery テーブルと同じようにテーブルに対してクエリを実行できます。ただし、フェデレーション データソースは制限の影響を受けます。

クエリの完了後に、結果を CSV または JSON としてダウンロード、テーブルとして保存、または Google スプレッドシートに保存できます。詳しくは、データのダウンロード、保存、エクスポートご覧ください。

CLI

次の例の手順に従います。

  1. 次のサンプルデータを含む fed-sample.csv という名前の CSV ファイルを作成します。

    1,Alice,10,one
    2,Alex,11,one
    3,Bob,11,two
    
  2. gsutil ツールを使用してファイルを Cloud Storage バケットにアップロードします([MY_BUCKET] は Cloud Storage バケットの名前で置換します)。

    gsutil cp fed-sample.csv gs://[MY_BUCKET]/fed-sample.csv
    

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

  1. データセット ID([DATASET_ID])に独自の値を指定して次のコマンドを実行し、テーブルを作成します。

     bq mk --external_table_definition=[SCHEMA]@[SOURCE_FORMAT]=[CLOUD_STORAGE_URI] [DATASET_ID].[TABLE_NAME]
    

    ここで、[SOURCE_FORMAT]CSVNEWLINE_DELIMITED_JSONAVRODATASTORE_BACKUP のいずれかです。

    たとえば、次のコマンドは mydataset という名前のデータセットの一部である fed-sample.csv ファイルを使用します。

    bq mk --external_table_definition=id:integer,name:string,num:integer,ord:string@CSV=gs://[MY_BUCKET]/fed-sample.csv mydataset.fed_sample
    

    ここで、[MY_BUCKET] は有効な Cloud Storage バケット名です。 スキーマがより複雑な場合は、JSON 形式で別のファイルに格納できます。たとえば、次の JSON オブジェクトは fed-sample.csv データのインライン スキーマを表します。

    [{
      "name": "id",
      "type": "integer",
      "mode": "nullable"
     },
     {
      "name": "name",
      "type": "string",
      "mode": "nullable"
     },
     {
      "name": "num",
      "type": "integer",
      "mode": "nullable"
      },
     {
      "name": "ord",
      "type": "integer",
      "mode": "nullable"
     }
    ]
    

    JSON スキーマが fed-sample-schema.json という名前で /tmp ディレクトリに格納されている場合は、スキーマ インラインを提供する代わりに、そのファイルを参照できます。

    bq mk --external_table_definition=/tmp/fed-sample-schema.json@CSV=gs://[MY_BUCKET]/fed-sample.csv mydataset.fed_sample
    
  2. 次のコマンドを実行して、テーブルに対してクエリを実行します。

    bq query --project_id=[PROJECT_ID] 'select name from [DATASET_ID].fed_sample where name contains "Alex";'
    

    ここで、[PROJECT_ID] は有効なプロジェクト ID です。

API

  • sourceUris は、完全修飾された gs://[BUCKET]/[OBJECT] 形式にする必要があります。

  • externalDataConfiguration.sourceFormat プロパティを設定して、データ形式を指定します。有効な値は次のとおりです。

    • CSV
    • NEWLINE_DELIMITED_JSON
    • AVRO
    • DATASTORE_BACKUP

Google ドライブを使用してフェデレーション テーブルを作成する

初めに、以下が有効になっていることを確認します。

Google ドライブ ファイルを指定するには、次の URI 形式の 1 つを使用します。

ソース形式 URL 形式
CSV | JSON | AVRO | Google スプレッドシート
https://drive.google.com/open?id=[FILE_ID]

この形式の Google ドライブ ファイルの URI にアクセスするには:

  1. Google ドライブを開きます。
  2. ファイルを右クリックし、[共有可能なリンクを取得] を選択します。
Google スプレッドシート
https://docs.google.com/spreadsheets/d/[FILE_ID]/edit#gid=[IDENTIFIER]

この形式の Google ドライブ ファイルの URI にアクセスするには:

  1. Google スプレッドシートを開きます。
  2. ファイルを開きます。
  3. ブラウザの URL アドレスバーから URL をコピーします。

ウェブ UI

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

    BigQuery ウェブ UI に移動する

  2. ナビゲーション領域のデータセット ID にカーソルを合わせて ID の横の下矢印アイコン 下矢印アイコン画像 をクリックし、[新しいテーブルを作成] をクリックします。

  3. [ソースデータ] の [場所] で [Google ドライブ] を選択し、Google ドライブ ファイルの URI を入力します。

  4. データの形式を選択します。Google スプレッドシートの場合は、[CSV] オプションを選択します。有効な形式は次のとおりです。

    • カンマ区切り値(CSV)
    • JSON(改行区切り)
    • Avro
    • Google スプレッドシート(最初のタブのみ)
  5. [宛先テーブル] でテーブル ID を入力し、[テーブルタイプ] フィールドで [外部テーブル] を選択します。

  6. CSV ファイルと JSON ファイルの場合は、テーブル スキーマを入力します。Avro ファイルの場合は、テーブル スキーマを省略できます。スキーマは BigQuery によって検出されます。[送信] ボタンをクリックして処理を完了します。

これで、ネイティブな BigQuery テーブルと同じようにテーブルに対してクエリを実行できます。ただし、フェデレーション データソースは制限の影響を受けます。

クエリの完了後に、結果を CSV または JSON としてダウンロード、テーブルとして保存、または Google スプレッドシートに保存できます。詳しくは、データのダウンロード、保存、エクスポートご覧ください。

CLI

次の例の手順に従います。

  1. 次のサンプルデータを含む fed-sample.csv という名前の CSV ファイルを作成します。

    1,Alice,10,one
    2,Alex,11,one
    3,Bob,11,two
    
  2. ファイルを Google ドライブにアップロードします。

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

  1. 次のコマンドを、独自の値を指定して実行し、テーブルを作成します。

    bq mk --external_table_definition=[SCHEMA]@[SOURCE_FORMAT]=[GOOGLE_DRIVE_URL] [DATASET_ID].[TABLE_NAME]
    

    ここで、[SOURCE_FORMAT]CSVNEWLINE_DELIMITED_JSONAVROGOOGLE_SHEETS のいずれかです。

    たとえば、次のコマンドは fed-sample.csv という名前のデータセットの一部である mydataset ファイルを使用します。

    bq mk --external_table_definition=id:integer,name:string,num:integer,ord:string@CSV=[GOOGLE_DRIVE_URL] mydataset.fed_sample
    
  2. 次のコマンドを実行して、テーブルに対してクエリを実行します。

    bq query 'select name from [DATASET_ID].fed_sample where name contains "Alex";'
    

    ここで、[DATASET_ID] は有効なデータセット ID です。

API

  • sourceUris は、https://drive.google.com/open?id=[FILE_ID] または https://docs.google.com/spreadsheets/d/[FILE_ID]/edit#gid=[IDENTIFIER] の形式で完全修飾されている必要があります。

  • externalDataConfiguration.sourceFormat プロパティを設定して、データ形式を指定します。有効な値は次のとおりです。

    • CSV
    • NEWLINE_DELIMITED_JSON
    • AVRO
    • GOOGLE_SHEETS

一時テーブルを使用して外部データをクエリする

永続テーブルを作成せずに外部データソースを直接クエリするには、一時テーブルを作成するクエリを実行します。一時テーブルのクエリは、リモートデータを介したアドホック クエリを 1 回行う場合や、抽出、変換、読み込み(ETL)プロセスの場合に便利です。

次の例では、スキーマを含むテーブル定義ファイルを作成します。 例では、定義ファイルとデータソース URI を使用して一時テーブルを作成、クエリします。

Cloud Storage からデータをクエリする

CLI

  1. テーブルの定義を作成し、ファイル /tmp/wikipedia への出力をパイプ処理する次のコマンドを実行して、テーブル定義を作成します。

    CSV
    bq mkdef --source_format=CSV "gs://[BUCKET_URI]" id:integer,name:string,category:integer,depth:string > /tmp/wikipedia

    テーブルは CSV 形式で、4 つのフィールド(id、name、category、depth)があります。

    JSON
    bq mkdef --source_format=NEWLINE_DELIMITED_JSON "gs://[BUCKET_URI]" id:integer,name:string,category:integer,depth:string > /tmp/wikipedia

    テーブルは JSON(改行区切り)形式で、4 つのフィールド(id、name、category、depth)があります。

    Avro
    bq mkdef --source_format=AVRO "gs://[BUCKET_URI]" > /tmp/wikipedia

    Avro ファイルをフェデレーション データソースとして使用する場合は、スキーマを指定しなくても BigQuery によって検出されます。

    Cloud Datastore
    bq mkdef --source_format=DATASTORE_BACKUP "gs://[BUCKET_URI]" > /tmp/wikipedia

    Cloud Datastore バックアップをフェデレーション データソースとして使用する場合は、スキーマを指定しなくても BigQuery によって自動検出されます。

    [BUCKET_URI] はバケット名とファイル名で構成されます。 たとえば、Cloud Storage バケットの名前が mybucket でデータファイルの名前が fed-sample.csv の場合、バケット URI は gs://mybucket/fed-sample.csv になります。

    テーブルが、共通のベース名を共有する複数のファイルに分かれている場合は、ベース名にアスタリスク(*)を追加し、バケットとファイル名を引用符で囲みます。たとえば、fed-sample000001.csvfed-sample000002.csv という名前の 2 つのテーブルがある場合、バケット URI は "gs://mybucket/fed-sample*" になります。

  2. 次のコマンドを実行して、テーブルに対してクエリを実行します。

    bq query --project_id=<project ID> --external_table_definition=wikipedia::/tmp/wikipedia 'select name from wikipedia where name contains "Alex";'

    上記のコマンドは、テーブルを「wikipedia」として参照するクエリを実行し、前の手順で作成したファイルを使用したテーブルの定義を指定します。

API

Google ドライブからデータをクエリする

初めに、Google ドライブ アクセスを有効にしてあることを確認します。

Google ドライブ ファイルを指定するには、次の URI 形式の 1 つを使用します。

ソース形式 URL 形式
CSV | JSON | AVRO | Google スプレッドシート
https://drive.google.com/open?id=[FILE_ID]

この形式の Google ドライブ ファイルの URI にアクセスするには:

  1. Google ドライブを開きます。
  2. ファイルを右クリックし、[共有可能なリンクを取得] を選択します。
Google スプレッドシート
https://docs.google.com/spreadsheets/d/[FILE_ID]/edit#gid=[IDENTIFIER]

この形式の Google ドライブ ファイルの URI にアクセスするには:

  1. Google スプレッドシートを開きます。
  2. ファイルを開きます。
  3. ブラウザの URL アドレスバーから URL をコピーします。

CLI

  1. テーブルの定義を作成し、ファイル /tmp/wikipedia への出力をパイプ処理する次のコマンドを実行して、テーブル定義を作成します。

    CSV
    bq mkdef --source_format=CSV "[GOOGLE_DRIVE_URI]" id:integer,name:string,category:integer,depth:string > /tmp/wikipedia

    テーブルは CSV 形式で、4 つのフィールド(id、name、category、depth)があります。

    JSON
    bq mkdef --source_format=NEWLINE_DELIMITED_JSON "[GOOGLE_DRIVE_URI]" id:integer,name:string,category:integer,depth:string > /tmp/wikipedia

    テーブルは JSON(改行区切り)形式で、4 つのフィールド(id、name、category、depth)があります。

    Avro
    bq mkdef --source_format=AVRO "[GOOGLE_DRIVE_URI]" > /tmp/wikipedia

    Avro ファイルをフェデレーション データソースとして使用する場合は、スキーマを指定しなくても BigQuery によって検出されます。

    Google スプレッドシート
    bq mkdef --source_format=GOOGLE_SHEETS "[GOOGLE_DRIVE_URI]" > /tmp/wikipedia

    ソースは Google スプレッドシート ファイルの最初のタブです。

    [BUCKET_URI] はバケット名とファイル名で構成されます。 たとえば、Cloud Storage バケットの名前が mybucket でデータファイルの名前が fed-sample.csv の場合、バケット URI は gs://mybucket/fed-sample.csv になります。

    テーブルが、共通のベース名を共有する複数のファイルに分かれている場合は、ベース名にアスタリスク(*)を追加し、バケットとファイル名を引用符で囲みます。たとえば、fed-sample000001.csvfed-sample000002.csv という名前の 2 つのテーブルがある場合、バケット URI は "gs://mybucket/fed-sample*" になります。

  2. 次のコマンドを実行して、テーブルに対してクエリを実行します。

    bq query --project_id=<project ID> --external_table_definition=wikipedia::/tmp/wikipedia 'select name from wikipedia where name contains "Alex";'

    上記のコマンドは、テーブルを「wikipedia」として参照するクエリを実行し、前の手順で作成したファイルを使用したテーブルの定義を指定します。

API

テーブル定義ファイルを作成する

テーブル定義ファイルには、テーブルのソース形式や関連プロパティなど、テーブルに関するメタデータが含まれます。テーブル定義ファイルを使用して、永続的なフェデレーション テーブルまたは一時外部テーブルを作成できます。コマンドライン ツールと API では、テーブル定義ファイルの作成と使用がサポートされます。

テーブル定義を作成、使用するには:

CLI

  1. コマンドライン ツールの mkdef コマンドを使用してテーブル定義を作成するか、テーブル定義を手動で作成します。mkdef コマンドでは、テーブル定義ファイルが JSON 形式で生成されます。

  2. 必要に応じて、テーブル定義ファイルを手動で編集して、カスタム パラメータを変更、追加、または削除します。

  3. bq mk を使用してフェデレーション テーブルを作成するか、テーブル定義ファイルを --external_table_definition フラグの値として使用した bq query を使用して一時外部テーブルを作成します。

API

BigQuery API を使用している場合は、ジョブ設定の一部としてテーブル定義を定義します。詳しくは、API リファレンスの configuration.query.tableDefinitions をご覧ください。

多くのテーブル定義設定は、複数のソース形式に適用されます。設定とソース形式について詳しくは、次の各設定に関する API リファレンスの説明をご覧ください。

一般テーブル定義設定
autodetect

型: boolean

デフォルト値: true

説明: CSV と JSON スキーマの自動検出をご覧ください。

API リファレンス: configuration.query.tableDefinitions.(key).autodetect

compression

型: string

デフォルト値: GZIP

有効な値: GZIPNONE

API リファレンス: configuration.query.tableDefinitions.(key).compression

ignoreUnknownValues

型: boolean

デフォルト値: false

API リファレンス: configuration.query.tableDefinitions.(key).ignoreUnknownValues

maxBadRecords

型: integer

デフォルト値: 0

API リファレンス: configuration.query.tableDefinitions.(key).maxBadRecords

schema

型: ネストされたオブジェクト

API リファレンス: configuration.query.tableDefinitions.(key).schema

sourceFormat

型: string

API リファレンス: configuration.query.tableDefinitions.(key).sourceFormat

sourceUris

型: list

API リファレンス: configuration.query.tableDefinitions.(key).sourceUris

テーブル定義設定の完全なリストは、API リファレンスの configuration.query.tableDefinitions をご覧ください。

CSV ソースファイルに基づくテーブル定義

次のコマンドは、[BUCKET] という名前の Cloud Storage バケット内の fed- sample.csv という CSV ファイルに基づいてテーブル定義を作成します。スキーマは /tmp/fed-sample-schema.json に格納され、生成される定義ファイルは /tmp/fed-sample-def に格納されます。

bq mkdef --source_format=CSV 'gs://[BUCKET]/fed-sample.csv' /tmp/fed-sample-schema.json > /tmp/fed-sample-def

fed-sample-def のコンテンツ(簡略化のために schema 値は省略):

{
  "csvOptions": {
    "allowJaggedRows": false,
    "allowQuotedNewlines": false,
    "encoding": "UTF-8",
    "fieldDelimiter": ",",
    "quote": "\"",
    "skipLeadingRows": 0
  },
  "schema": {
    "fields": [
      ...
    ]
  },
  "sourceFormat": "CSV",
  "sourceUris": [
    "gs://[BUCKET]/fed-sample.csv"
  ]
}

後続の bq mk または bq query の呼び出しで更新された値が使用されるように、テーブル定義ファイルを変更できます。たとえば、ジャグ行を許可することにした場合は、そのプロパティを fed-sample-def で変更できます。

{
  "csvOptions": {
    "allowJaggedRows": true,
  ...

次のオプションは、CSV ファイルに基づくテーブル定義でのみ使用できます。

CSV テーブル定義のオプション
allowJaggedRows

型: boolean

デフォルト値: false

API リファレンス: configuration.query.tableDefinitions.(key).csvOptions.allowJaggedRows

allowQuotedNewlines

型: boolean

デフォルト値: false

説明: 改行文字のある CSV ファイルは並列処理が困難です。これを true に設定すると、並列処理によるパフォーマンス向上が低減することがあります。

API リファレンス: configuration.query.tableDefinitions.(key).csvOptions.allowQuotedNewlines

encoding

型: string

デフォルト値: UTF-8

有効な値: UTF-8ISO_8859_1

API リファレンス: configuration.query.tableDefinitions.(key).csvOptions.encoding

fieldDelimiter

型: string

デフォルト値: ","

API リファレンス: configuration.query.tableDefinitions.(key).csvOptions.fieldDelimiter

quote

型: string

デフォルト値: "(引用符)

API リファレンス: configuration.query.tableDefinitions.(key).csvOptions.quote

skipLeadingRows

型: long

デフォルト値: 0

API リファレンス: configuration.query.tableDefinitions.(key).csvOptions.skipLeadingRows

JSON ソースファイルに基づくテーブル定義

次のコマンドは、fed-sample.json という名前の Cloud Storage バケット内の [BUCKET] という JSON ファイルに基づいてテーブル定義を作成します。スキーマは /tmp/fed-sample-schema.json に格納され、生成される定義ファイルは /tmp/fed-sample-def に格納されます。

bq mkdef --source_format=NEWLINE_DELIMITED_JSON 'gs://[BUCKET]/fed-sample.json' /tmp/fed-sample-schema.json > /tmp/fed-sample-json-def

fed-sample-json-def のコンテンツ(簡略化のために schema 値は省略):

{
  "autodetect": true,
  "schema": {
    "fields": [
      ...
    ]
  },
  "sourceFormat": "NEWLINE_DELIMITED_JSON",
  "sourceUris": [
    "gs://[BUCKET]/fed-sample.json"
  ]
}

JSON ソースファイルに固有の設定はありませんが、一般設定の多くが JSON ファイルに適用されます。詳しくは、一般テーブル定義設定をご覧ください。

Google スプレッドシート ソースファイルに基づくテーブル定義

次のコマンドは、[GOOGLE_DRIVE_URI] で指定された Google ドライブに格納されている Google スプレッドシートに基づいてテーブル定義を作成します。スキーマは自動検出され、生成された定義ファイルは /tmp/google-sheet-def に格納されます。

bq mkdef --source_format=GOOGLE_SHEETS "[GOOGLE_DRIVE_URI]" > /tmp/google-sheet-def

google-sheet-def の内容:

{
  "autodetect": true,
  "sourceFormat": "GOOGLE_SHEETS",
  "sourceUris": [
    "[GOOGLE_DRIVE_URI]"
  ]
}

新しい googleSheetsOptions セクションを追加して、先頭の行をスキップするようにテーブル定義を変更できます。次の例は、最初の 3 行をスキップするようにテーブル定義を変更します。

{
  "autodetect": true,
  "sourceFormat": "GOOGLE_SHEETS",
  "sourceUris": [
    "[GOOGLE_DRIVE_URI]"
  ],
  "googleSheetsOptions": {
    "skipLeadingRows": 3
  }
}
Google スプレッドシート テーブル定義設定
autodetect

型: boolean

デフォルト値: true

API リファレンス: configuration.query.tableDefinitions.(key).autodetect

skipLeadingRows

型: long

デフォルト値: 0

API リファレンス: configuration.query.tableDefinitions.(key).googleSheetsOptions.skipLeadingRows

一般設定のリストは、一般テーブル定義設定をご覧ください。

Google ドライブ アクセスを有効にする

ウェブ UI


ウェブ UI でテーブルを作成する場合は、ウェブベースの認証ステップに従います。

CLI


Google ドライブ アクセスを有効にするには

  1. Google Cloud Platform Console を使用して、使用を計画しているプロジェクトの Google ドライブ API を有効にします。

  2. コマンドライン ツールの最新バージョンがあることを確認します。

    gcloud components update
    
  3. Google ドライブで認証します

    gcloud auth login --enable-gdrive-access
    

API


BigQuery API を使用している場合:

  1. Google Cloud Platform Console を使用して、API 呼び出しを行うプロジェクトに対して Google ドライブ API を有効にします。

  2. BigQuery のスコープに加えて Google ドライブの OAuth スコープをリクエストします。

Avro と Cloud Datastore のバックアップ スキーマの検出

フェデレーション データソースとして Avro ファイルまたは Cloud Datastore バックアップを使用する場合は、BigQuery によってスキーマが検出されます。

BigQuery がスキーマを検出するときに、BigQuery SQL 構文に対応させるためにフィールド名が変更されることがまれにあります。

検出されたスキーマを表示するには、外部テーブルを作成して bq show コマンドを使用します。または、BigQuery ウェブ UI を使用してスキーマを表示することもできます。

データ型変換について詳しくは、以下をご覧ください。

CSV と JSON スキーマの自動検出

スキーマの説明を含めずに CSV ファイルまたは JSON ファイルを指定した場合、BigQuery はベスト エフォートでスキーマの自動推定を試行します。 自動検出は、現在コマンドライン ツールと BigQuery API で使用できます。

BigQuery は、データセット内でランダム ファイルを選択し、ファイルの最大 100 行をスキャンして代表的なサンプルとして使用することで、推定プロセスを開始します。BigQuery は、各フィールドを検証し、そのサンプル内の値に基づいてそのフィールドにデータ型を割り当てようとします。

スキーマの自動検出はデフォルトで有効になります。自動検出を無効にするには、mkdef を使用してテーブル定義を作成するときに --noautodetect フラグを渡すか、autodetect プロパティの値を false に変更することで既存のテーブル定義を変更します。たとえば、テーブル定義 JSON ファイルからの以下の抜粋は自動検出を無効にします。

{
  "autodetect": false,
  ...
}

その他の自動検出の詳細は次のとおりです。

圧縮
BigQuery は、ファイルを開くときに gzip 互換ファイル圧縮を認識します。
CSV 区切り文字
BigQuery は以下の区切り文字を検出します。
  • カンマ(,)
  • パイプ(|)
  • タブ(\t)
CSV ヘッダー
BigQuery は、ファイルの最初の行をデータセット内の他の行と比較することでヘッダーを推定します。最初の行に文字列のみ含まれ、他の行に含まれない場合、BigQuery はその最初の行がヘッダー行であると想定します。
CSV 引用符付き改行
BigQuery は、CSV フィールド内の引用符付き改行文字を検出し、引用符付き改行文字を行境界として解釈しません。
タイムスタンプ
BigQuery は、以下のような幅広いタイムスタンプ形式を検出します(ただし、これらに限定されません)。
  • `yyyy-mm-dd`(任意の順序)
  • `yyyy-mm-dd hh:mm:ss`
  • `yyyy-mm-dd hh:mm:ss.sss`
その他のタイムスタンプの詳細:
  • データ区切り文字には "-"、"/"、"." のいずれかを使用できます
  • タイムゾーンはオフセットまたは名前を使用して追加できます

_FILE_NAME 疑似列

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

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

  1. Cloud Storage バケットからのファイルの URI を使用して、テーブル wikipedia のテーブル定義を作成します。次に例を示します。

    bq mkdef --source_format=CSV "gs://[BUCKET_URI]" id:integer,name:string,category:integer,depth:string > /tmp/wikipedia

    [BUCKET_URI] はバケット名とファイル名で構成されます。 たとえば、Cloud Storage バケットの名前が mybucket でデータファイルの名前が fed-sample.csv の場合、バケット URI は gs://mybucket/fed-sample.csv になります。

    テーブルが、共通のベース名を共有する複数のファイルに分かれている場合は、ベース名にアスタリスク(\*)を追加し、バケットとファイル名を引用符で囲みます。たとえば、fed-sample000001.csvfed-sample000002.csv という名前の 2 つのテーブルがある場合、バケット URI は "gs://mybucket/fed-sample\*" になります。

  2. _FILE_NAME 疑似列をクエリします。

    bq query --project_id=<project ID> --external_table_definition=wikipedia::/tmp/wikipedia 'select name, _FILE_NAME as fn from wikipedia where name contains "Alex";' 

制限事項

フェデレーション データソースの制限事項は、[割り当てのポリシー] ページの読み込みジョブで説明されている読み込みジョブの制限事項と同じです。

外出先でもリソースをモニタリング

Google Cloud Console アプリを入手して、プロジェクトの管理にお役立てください。

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

BigQuery のドキュメント