こんにちは。SCSKの山口です。
今回は、案件業務で活用した「BigQuery 上に大量テーブルを一括作成する便利な方法」をブログ化します。
私はこの方法で約900のテーブルをBigQuery 上に一括作成しました。
BigQuery テーブル作成方法
BigQuery 上にテーブルを作成する際は、コンソール上で作成する方法とデータ定義言語(DDL)ステートメントを使用する方法があります。
コンソール上で作成する方法は、直感的にテーブルを作成することができ大変便利です。
しかし、大量のテーブルを作成したい際は天文学的な時間を要してしまい、もうBigQuery のコンソールミタクナイ、、、とグロッキーになってしまう可能性があります。
皆さんにBigQuery LOVEのままでいてもらうために、今回はDDLを連続的に実行してBigQuery 上にテーブルを一括作成する方法をご紹介します。
実践:DDLを連続的に実行しBigQuery テーブルを一括作成する
DDLファイル
・今回はお試しとして、以下の5つのDDLを準備します
testDDL1.ddl |
— testDDL1.ddl
CREATE TABLE evocative-entry-277709.yamaguchi_test_execDDL.create_table_test1
(
`clm1` STRING,
`clm2` STRING,
`clm` STRING
)
;
|
testDDL2.ddl |
— testDDL2.ddl
CREATE TABLE evocative-entry-277709.yamaguchi_test_execDDL.create_table_test2
(
`clm1` STRING,
`clm2` STRING,
`clm` STRING
)
;
|
testDDL3.ddl |
— testDDL3.ddl
CREATE TABLE evocative-entry-277709.yamaguchi_test_execDDL.create_table_test3
(
`clm1` STRING,
`clm2` STRING,
`clm` STRING
)
;
|
testDDL4.ddl |
— testDDL4.ddl
CREATE TABLE evocative-entry-277709.yamaguchi_test_execDDL.create_table_test4 |
testDDL5.ddl |
— testDDL5.ddl
CREATE TABLE evocative-entry-277709.yamaguchi_test_execDDL.create_table_test5 |
Pythonスクリプト
今回はBigQuery 用のPython用のクライアントライブラリを使用して、PythonスクリプトからDDLファイルを実行します。
以下が今回作成したPythonスクリプトです。
execDDL.py |
”’ execDDL.py”’
import os
from google.cloud import bigquery
# DDLファイルのパス
ddls_path = ‘/home/sho_yamaguchi/Blog/execDDLs/DDLs’
# SQLファイルのリストを取得
ddl_files = [f for f in os.listdir(ddls_path) if f.endswith(“.ddl”)]
for ddl_file in ddl_files:
# DDLファイルのパス
ddlfile_path = os.path.join(ddls_path, ddl_file)
# DDLファイルの内容を取り込む →query
with open (ddlfile_path, encoding=’utf-8′)as f:
query = f.read()
# BigQuery クライアント作成
client = bigquery.Client()
# クエリ実行
query_job = client.query(query)
|
今回のPythonスクリプトは「ファイルを開く→内容をクエリとして取り込む→クエリ実行」という作りにしています。
後はPythonスクリプトを実行するだけです。
実行結果
Pythonスクリプト実行後の対象データセット内は以下の通りです。
狙い通り5つのテーブルが作成されていますね。
ジョブ履歴からもDDLが実行されていることが確認できました。
まとめ
今回はDDLを連続的に実行してBigQuery 上にテーブルを一括作成する方法を実際にやってみました。
DDLファイルの量が多くなるとその分時間ががりますが、一度スクリプトを流してしまえば放置でOKなのでとても楽です。
今回のPythonスクリプトの作りとしては、「ファイルを開く→内容をクエリとして取り込む→クエリ実行」という単純な作りなので、
アイデア次第でテーブル作成以外の他のことにも使えそうですね。
最後まで読んでいただきありがとうございました。