Cloud Intelligence™
BigQuery内でデータをコピーする方法
このページはEnglish、Deutsch、Español、Français、Italiano、Portuguêsでもご覧いただけます。
About Joshua Fox
Joshua Fox has been a software architect in innovative technology companies for 20 years. Now, he advises tech startups and growth companies on architecture and cost optimization for Google Cloud Platform and Amazon Web Services; also publishing articles, and speaking to cloud engineers.
He has a PhD from Harvard University and a BA in math from Brandeis.
My personal pageBigQuery内のテーブル間でデータをコピーする作業は、近年で大幅に簡単になりました。とはいえ方法は今も複数あり、それぞれに異なる制約があって混乱しがちです。本記事では各手法をメリット・デメリットとあわせて解説します。

かつて、リージョンをまたぐデータコピーは厄介な作業でした。
PerfectScale™ for Kubernetes
Ready to optimize?
Get your free Kubernetes savings analysis

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