BigQuery内のテーブル間でデータをコピーする作業は、近年で大幅に簡単になりました。とはいえ方法は今も複数あり、それぞれに異なる制約があって混乱しがちです。本記事では各手法をメリット・デメリットとあわせて解説します。

かつて、リージョンをまたぐデータコピーは厄介な作業でした。
Storage経由でコピーする
BigQueryからCloud Storageへ書き出し、別リージョンのBigQueryへ戻す方法です。手順が一段増えるだけでなく、コストもかさみがちです。さらにスケジューリングやバッファリング、並列化などをComposerなどで自前で組み立てる必要がありました。
Dataset Copying
最近ではDataset Copying機能の登場で、この作業は格段にラクになりました。リージョンをまたいで利用でき、ネットワーク費用を除けば無料です。スケジューリングなどの関連機能も最初から組み込まれています。
`bq`、Job API、Copy Tablesによるリージョン内コピー
同一リージョン内のコピーは以前から比較的容易で、しかも無料です。コマンドラインでbq cpを実行する、Job APIに対してコードを書く、あるいはCloud Consoleの「Copy Tables」を使う、といった選択肢があります。
Scheduled Queries
Scheduled Queriesも、リージョン内コピーのもう一つの選択肢です。無料ではありませんが柔軟性が高く、任意のSELECT文を書いてターゲットテーブルへ挿入できます。名前のとおりスケジューリング機能も標準搭載です。
ここまで紹介した方法のうち、よくあるユースケースである「取り込み時間でパーティション分割されたテーブルの日次増分バックアップ」に対応できるのは、bq cpとScheduled Queriesだけです。直近1日分のパーティションのみをコピーし、ターゲットテーブルでもパーティションとして保持できるのはこの2つに限られます。
各手法を表にまとめると次のとおりです: