【GCP】BigQuery で複数テーブルを一括作成してみる

こんにちは。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
(
`clm1` STRING,
`clm2` STRING,
`clm` STRING
)
;

testDDL5.ddl
— testDDL5.ddl

CREATE TABLE evocative-entry-277709.yamaguchi_test_execDDL.create_table_test5
(
`clm1` STRING,
`clm2` STRING,
`clm` STRING
)
;

 

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スクリプトの作りとしては、「ファイルを開く→内容をクエリとして取り込む→クエリ実行」という単純な作りなので、

アイデア次第でテーブル作成以外の他のことにも使えそうですね。

最後まで読んでいただきありがとうございました。

タイトルとURLをコピーしました