概要
BigQueryで特大のデータを扱いたい、しかし、ストレージのコストがかかってしまうので、テーブルで持ちたくないという時があります。
そういった時には、外部テーブルを利用すると良いかと思います。
その方法をこちらで説明します。
作成方法
BigQueryのデータセットを作成する
まずは、BigQueryでデータセットを作成しておきます。3点リーダーから「データセットを作成」をクリックすれば簡単に作成できます。
GCSに対象のcsvをアップロードする
GCSにバケット「techblog_data」を作成して、テスト用のcsvをアップロードします。
実際にこのようなcsvを使いました。
ソースコードをアップロードする
下記のソースコード(create_table_outside.py)をCloud Shellの3点リーダーからアップロードします。
from google.cloud import bigquery
# BigQuery クライアントの初期化
client = bigquery.Client()
# データセット ID の設定
dataset_id = 'test_dataset' # データセットIDを適切なものに設定してください。
# データセットの参照を取得
dataset_ref = client.dataset(dataset_id)
# テーブル ID の設定
table_id = "outside_data" # テーブルIDを適切なものに設定してください。
# テーブルスキーマの定義
schema = [
bigquery.SchemaField("column1", "STRING"),
bigquery.SchemaField("column2", "STRING"),
bigquery.SchemaField("column3", "STRING"),
bigquery.SchemaField("column4", "STRING"),
bigquery.SchemaField("column5", "STRING"),
bigquery.SchemaField("column6", "STRING"),
bigquery.SchemaField("column7", "STRING"),
bigquery.SchemaField("column8", "STRING"),
bigquery.SchemaField("column9", "STRING"),
bigquery.SchemaField("column10", "STRING"),
]
# 外部テーブルの設定
external_config = bigquery.ExternalConfig("CSV")
external_config.source_uris = [
"gs://techblog_data/outside_table.csv" # GCS 上のファイルパスを適切に設定してください。
]
external_config.schema = schema
external_config.options.skip_leading_rows = 1 # ヘッダー行がある場合はスキップ
external_config.autodetect = True # スキーマの自動検出を有効にする場合
# テーブルの作成と外部データ構成の設定
table = bigquery.Table(dataset_ref.table(table_id))
table.external_data_configuration = external_config
# テーブルの作成
table = client.create_table(table)
print(f"Created table {table.table_id}")
ソースコードを実行する
Cloud Shellで、下記コマンドを実行します。
$ python create_table_outside.py
このようにテーブルが作られていれば、完了となります。
まとめ
今回は、外部テーブルの設定のしかたを実践してみました。
BigQueryで外部テーブルを作成することは往々にしてあります。
都度こちらを参考にしていただけると幸いです!
コメント