はじめに
- 2019年8月に、copying datasetsがβとしてリリースされました。
- この記事では、bqコマンドを使ってdatasetのコピーを試してみます(コンソールでもできます)。
- Datasetのコピー機能によって、copyやrenameが実現できるようになりました👏
- ドキュメントとしてはここに全部書いているのですが、あまり親切ではなかったので、qiitaにちょっと起こしてみました。
事前準備
- BigQuery Data Transfer Serviceを利用するので、APIの有効化が必要です。詳細は、こちらのドキュメントに全部書いているので、どうぞ。
- また、BigQueryの適切な権限が必要です。権限はこちらのドキュメントを見てください。
実行
BigQuery Data Transfer Serviceの有効化が終わっている状態で、bqコマンドを実行してみます。
サンプルの前提
- project名
- foo-project
- location
- asia-northeast1
- ソースdataset名
- dataset1
- ターゲットdataset名
- datase2
同一locationでのdatasetコピーを試してみます。
実行サンプル
まず、copy先の空のdatasetをつくっておきます。
bq --location=asia-northeast1 mk --dataset foo-project:dataset2
次にBigQuery Data Transfer Serviceのタスクを登録します
bq mk \
--location=asia-northeast1 \
--transfer_config \
--project_id=foo-project \
--data_source=cross_region_copy \
--target_dataset=dataset2 \
--display_name='dataset1 -> dataset2 copy' \
--params='{"source_dataset_id":"dataset1","source_project_id":"foo-project","overwrite_destination_table":"true"}'
いくつかパラメータについて補足すると
- overwrite_destination_table
- 以前にコピーしたテーブルを切り捨ててすべてのデータを更新する
上記を実行すると、下記のようなレスポンスがあります。
https://www.gstatic.com/xxx
Please copy and paste the above URL into your web browser and follow the instructions to retrieve an authentication code.
Enter your authentication code here:
https://www.gstatic.com/xxx
にアクセスして、許可すると、authentication code が発行されるので Enter your authentication code here:
に続けて入力してください。
Transfer configuration 'projects/xxx' successfully created.
というメッセージが表示されれは、成功です。
上記でレスポンスのあった、リソースIDを指定して、bq showすると、ステータスなどが表示できます。
bq show --format=prettyjson \
--transfer_config projects/xxx
同様のことは、すべてコンソールからもできるのですが、数が多いときはbqコマンドで実行できたほうが便利ですよね。
残った問題
上記の例で実行すると、毎日実行される日次の転送設定として登録されてしまう。
今は、OneShotの実行を行いたい場合は、初回転送実行後、転送設定を消しているけど、もうちょいいいやり方(オプション等)がないか模索中。