BigQuery エンジンを使用すると、パブリックデータセットを含む Google BigQuery のテーブルに対して読み取りと書き込みを行えます。
読み取りには BigQuery REST API (tabledata.list) を使用するため、読み取り可能なのはネイティブテーブルのみです (ビュー、materialized view、外部テーブルは読み取れません) 。書き込みにはストリーミング挿入 (tabledata.insertAll) を使用します。これを使用するには、プロジェクトで billing を有効にする必要があります。
書き込みはアトミックではありません。大規模な INSERT はバッチに分けて送信されます (1 リクエストあたり最大 500 行。BigQuery’s の 10 MB リクエストサイズ上限を超えないようにも分割されます) 。また、1 つのリクエストが部分的にしか成功しない場合があります (BigQuery はリクエスト内の一部の行を commit し、残りを insertErrors で拒否することがあります) 。さらに、先行するバッチが受け入れられた後で、後続のバッチが拒否されることもあります。いずれの場合も、すでに commit された行は BigQuery に残り、クエリでは error が報告されます。各行には安定した insertId (クエリ id と行の序数位置から派生) が付与されるため、BigQuery は再試行された行の重複をベストエフォートで排除します。insertId は序数位置に依存するため、同じ INSERT を再実行した際に重複排除されるのは、行が同じ順序で渡される場合のみです (たとえば、max_threads = 1 および max_insert_threads = 1 を指定した single-threaded の場合) 。詳細については、bigquery テーブル関数 の制限事項を参照してください。
テーブルの作成
REQUIRED BigQuery フィールドを定義から省略したテーブルは読み取り可能ですが、書き込みはできません。BigQuery のストリーミング挿入ではこのようなフィールドが欠落した行は拒否されるため、該当する INSERT は事前に拒否されます。省略した REQUIRED フィールドに defaultValueExpression が宣言されている場合、BigQuery がデフォルト値を設定するため、テーブルは引き続き書き込み可能です。NULLABLE RECORD は Nullable(Tuple(...)) にマッピングされるため、NULL レコードを損失なく往復変換できます。このようなテーブルを作成するには (構造を推論する場合も明示的に宣言する場合も) 、すべての Nullable(Tuple) カラムと同様に enable_nullable_tuple_type 設定が必要です。カラムを明示的に宣言する場合、設定を回避するために RECORD フィールドを通常の Tuple(...) として宣言することもできますが、その場合、レコード全体の NULL はデフォルトのタプルに強制変換されます。推論された型との差異として許容されるのは、RECORD の Tuple をラップする Nullable を削除することだけであり、それも同じレコードでのみ可能です。null 許容性を別の (内側または外側の) レコードに移すことはできません。
エンジンパラメータ
project— データセットを所有する Google Cloud プロジェクト。dataset— データセット名。table— テーブル名。access_token— OAuth 2.0 アクセストークン (省略可能な位置引数) 。
key = value によるオーバーライドを指定した名前付きコレクションとして渡すこともできます。オプションの完全なリストと認証方法の説明については、bigquery テーブル関数を参照してください。認証方法は必ず 1 つ指定する必要があります。永続テーブルでは、アクセストークンは 1 時間以内に期限切れとなるため、access_token よりも service_account_key または refresh_token を使用することを推奨します。