🥓
[BigQuery]大量のDDLを実行するシェルスクリプトを作ってみた
コマンドラインからBigQueryに大量のDDLを実行するシェルスクリプトを作ったので覚書き
前提条件
- Cloud SDK がインストール済であること
→ まだの場合は以下を参考にインストールすること
Cloud SDK のインストール | Google Cloud - 対象プロジェクトのユーザーアカウントもしくはサービスアカウントが承認済であること
→ まだの場合は以下を参考に承認しておくこと
Cloud SDK ツールの承認 | Google Cloud
ディレクトリ構成
実行用シェルファイルと同階層にddlディレクトリを作成し、その下にddlを記載したファイルを格納する
/
|--- execDdl.sh -- 実行用シェルファイル
|
|--- ddl -- DDL配置ディレクトリ: 配下に実行したいDDLを置く
|--- xxx.ddl
|--- yyy.ddl
|--- zzz.ddl
:
プログラム
データセットの作成から、DDLの実行までを実行する内容です
データセット名は、test_bqとしています(適宜置き換えて実行してください)
execDdl.sh
#!bin/bash
# 本ファイルのあるディレクトリへ移動
cd $(dirname $0)
# データセットの作成
echo 'データセットを作成します'
bq mk test_bq
# データセットができたことを確認
bq show test_bq
echo 'データセットの作成が完了しました'
# ddlディレクトリ下に配置したDDLを順に実行する
echo 'テーブル作成を開始します'
files='./ddl/*'
for file in $files
do
# DDL記載ファイルの中身を変数: コメントがあるとうまく実行できないため削除する
ddl=`cat $file | sed -e 's/--.*\$//g'`
# DDLの実行
bq query --use_legacy_sql=false $ddl
done
echo '全てのテーブル作成が完了しました'
# データセット配下のテーブル一覧を表示
echo 'テーブル一覧を表示します'
bq ls test_bq
ポイント
- DDLファイルにコメント(「--」で記載)が入っていると、「FATAL Flags parsing error: Unknown command line flag '--xxx'」エラーが出てしまったため、sedコマンドにてコメントを削除する処理を入れました
実行DDL例
以下のように、コメントが入っていてもエラーなく実行できます
members.ddl
-- 会員情報テーブル
create table `test_bq.members` (
member_id string not null
, name string not null
, regist_date date not null
, sex string
, birthday date
, latitude float64
, longitude float64
, location geography -- BigQueryにはgeometry型がないのでgeography型を使う
, citycode string
);
終わりに
DDLファイルをいちいち開いてコンソールから実行するの面倒だなー、とはいえDDL作ってしまったし、今更bq mk用に書き換えるのもなーということで、シェルスクリプトにしてしまいました
もっとよい方法があればぜひ教えてください!
Discussion