0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【GoogleCloud】BigQuery 別プロジェクトへのテーブルコピー方法

Last updated at Posted at 2024-09-24

はじめに

既に運用されているBigQueryの一部テーブルを、別プロジェクトのテーブルへコピーするための参考手順となります。

データセットのコピーについて

GoogleCloud の公式ドキュメントを参照すると「データセットのコピー」という項目があり、手順が記載されています。
https://cloud.google.com/bigquery/docs/managing-datasets?hl=ja#copy-datasets
 
しかし、2024/09/24現在ではまだベータ版となっており、以下のような注意書きがある状況です。
image.png

ベータ版の説明は以下
https://cloud.google.com/products?hl=ja#product-launch-stages
image.png

利用はできそうですが、SLAやテクニカルサポートの義務はないとのことから、別の方法を検討する事に。

bq コマンドでのコピー

コピー方法をいくつか検討しました。

案① 既存BigQueryからエクスポートし、新規BigQueryへインポートする方法

運用中のBigQuery各テーブルをCloud Storageへエクスポートし、BigQuery追加ページでエクスポートしたファイルから読み込む手順を選定し実施しました。
エクスポートはCSV形式でおこない、インポート時にスキーマを自動検出をオンにし、インポートしてみたのですが、テーブル種別がうまく引き継がれず、スキーマ情報を手動で入力しました。
元のスキーマ情報をGoogleCloudコンソール上でコピーし、インポート時にペーストしていたところ、フィールド名の頭に半角スペースが入ってしまいました。
しかも、GoogleCloudコンソール上では、フィールド名頭に半角スペースが入っておらず、ミスにつながる可能性があったので、こちらの案はボツとなりました。

案② コマンドを利用したコピー

上記案①のようなミスを防ぐために、作業をコマンドで実施するように検討する事に。
調べてみたところ bq コマンドで、別プロジェクトを指定できることがわかりました。

bq コマンドライン ツール リファレンス
https://cloud.google.com/bigquery/docs/reference/bq-cli-reference?hl=ja

bqコマンドを利用することで以下のようにデータセットをコピーすることができました。

# 1.コピー元の対象テーブルのスキーマ情報を作成(誤入力を防止)
bq show -schema --project_id <既存プロジェクト名> <コピー元データセット名>.<コピー元テーブル名> > schema.json

# 2.コピー先へ空のテーブルを作成
bq mk --project_id <コピー先プロジェクト名> --table <コピー先データセット名>.<コピー先テーブル名> schema.json

# 3.コピー先テーブルへコピー実行
bq query --project_id <コピー先プロジェクト名> --destination_table <コピー先データセット名>.<コピー先テーブル名> --use_legacy_sql=false "select * from <既存プロジェクト名>.<既存データセット名>.<既存テーブル名>;"

コピー後は、コピー元とコピー先のテーブル詳細画面を開き、行数やパーティションなどの数が同様であるかを確認し、作業終了とした。

■ 身につけた知識

・極力、手入力を避けた方が良い
・やむなく手入力してしまった場合、設定値確認はコマンドにて実施しよう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?