Posted at

BigQueryでパーティションのないテーブルをあるテーブルにコピーする


前提


  • 執筆者がよくbqコマンドを忘れるので、備忘録的に残しておく。

  • Bigqueryのパーティションは、日付タイプ。



  • 作成時のIAM権限は、要確認。(特に、コピー元に参照権限があるか?)


設定方法


コピー元のテーブルスキーマの取得

bq show --schema <コピー元 project name>:<コピー元 dataset name>.<コピー元 table name> > source.json


コピー先に空のテーブルを生成

bq mk --schema source.json --time_partitioning_type=DAY <コピー先 project name>:<コピー先 dataset name>.<コピー先 table name>


パーティションを絞ってコピー


  • 前提


    • 標準SQLを指定

    • 既にデータがある場合、置換を許容

    • "log_date"は、コピー元の日付パーティションの参考になりそうなカラム



bq query \

--use_legacy_sql=false \
--replace=true \
--destination_table '<コピー先 project name>:<コピー先 dataset name>.<コピー先 table name>$<YYYYMMDD>' \
'select * from `<コピー元 project name>.<コピー元 dataset name>.<コピー元 table name>` where date(<log_date>) = date("YYYY-MM-DD");'