こんにちは。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スクリプトの作りとしては、「ファイルを開く→内容をクエリとして取り込む→クエリ実行」という単純な作りなので、
アイデア次第でテーブル作成以外の他のことにも使えそうですね。
最後まで読んでいただきありがとうございました。

  
  
  
  

