ElcamyTECH
Articles

BigQuery の外部参照テーブル先を変更する

TechBigQueryGoogleCloudGoogle CloudTIPS2023/07/10

はじめに

BigQueryで外部テーブルのスプレッドシートの参照先URIを変更する場合、そのまま編集できないため不便です。 そこで、今回は外部テーブルのURIを変更するプログラムを作成しましたので、ご紹介します。

やりたいこと

image

外部テーブルのURIをColaboratoryで変える

プログラム

メモ

こちらをコピーして使用できます。

https://colab.research.google.com/drive/1uFh94Q40Ellbc_rr9WDCQkXEC_n9cp1f

コード解説

  1. まずは、認証します

     

認証(実行後 authorization code をコピーして貼り付けEnter)

!gcloud auth login

1. 次に変数を指定します

   ```python
# プロジェクトを指定
PROJECT_ID="*my_project_id*"

# 対象のデータセットとテーブルを指定
dataset="*my_dataset*"
table="*my_table*"

# 変更先のスプレッドシートのURI
target_google_sheets_uri="https://docs.google.com/spreadsheets/d/*my_spread_sheet_key*"
  1. 対象テーブルのテーブル定義を出力しておきます

     

テーブル定義ファイルを出力

!bq show --format=prettyjson $PROJECT_ID:$dataset.$table > def.json

1. 先ほど出力したテーブル定義を使って新しいテーブル定義ファイルを作成します

   ```python
   import json

# テーブル定義ファイルを読み込む
with open('./def.json', 'r') as f:
  data = json.load(f)

schema = data.get("schema")
new_def = data.get("externalDataConfiguration")

# 新しいテーブル定義を作成
new_def.update({"schema": schema})
new_def.update({"sourceUris": [target_google_sheets_uri]})
with open("./new_def.json", 'w') as f:
  json.dump(new_def, f, indent=2)
  1. テーブルを更新します

     

元のテーブルを削除(実行後 y を入力してEnter)

!bq rm $PROJECT_ID:$dataset.$table

新しいテーブルを作成

!bq mk
--external_table_definition=new_def.json
$PROJECT_ID:$dataset.$table

これで、外部テーブルのURIが更新されます!

## 参考


公式のドキュメント

https://cloud.google.com/bigquery/docs/external-data-drive?hl=ja
テーブル定義の方法

https://cloud.google.com/bigquery/docs/external-table-definition?hl=ja#use-json-schema

関連記事

Elcamyについて

AI・データエンジニアリング・クラウドを中心に、技術で事業課題を解決しています。 お気軽にご相談ください。