はじめに
BigQueryで外部テーブルのスプレッドシートの参照先URIを変更する場合、そのまま編集できないため不便です。
そこで、今回は外部テーブルのURIを変更するプログラムを作成しましたので、ご紹介します。
やりたいこと
外部テーブルのURIをColaboratoryで変える
プログラム
📌
こちらをコピーして使用できます。
コード解説
-
まずは、認証します
# 認証(実行後 authorization code をコピーして貼り付けEnter) !gcloud auth login
-
次に変数を指定します
# プロジェクトを指定 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"
-
対象テーブルのテーブル定義を出力しておきます
# テーブル定義ファイルを出力 !bq show --format=prettyjson $PROJECT_ID\:$dataset\.$table > def.json
-
先ほど出力したテーブル定義を使って新しいテーブル定義ファイルを作成します
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)
-
テーブルを更新します
# 元のテーブルを削除(実行後 y を入力してEnter) !bq rm $PROJECT_ID\:$dataset\.$table # 新しいテーブルを作成 !bq mk \ --external_table_definition=new_def.json \ $PROJECT_ID\:$dataset\.$table
これで、外部テーブルのURIが更新されます!
参考
公式のドキュメント
テーブル定義の方法