概要
私はSQLでデータ抽出をする際にはLOOP処理ができたらいいなと思うことも多々ある。
例えばカラムを日付毎に先頭一行ある状態でcsvファイルをエクスポートしたいなどという場合である。
そのような場合に検討することは
データベース言語のSQLでLOOP処理が実現可能なのかということである。
結論:SQLでLOOP処理は使用可能
1ヶ月分毎に指定した日付をエクスポート処理するクエリ
BigqueryでSQLをたたいてGCSにエクスポートする
sql
DECLARE x INT64 DEFAULT 初期月
SET stores = ;
--setでLOOP処理を終了させる条件の変数を作成する
WHILE x <= stores
DO
EXPORT DATA OPTIONS(
uri='gs://xxxxxxxxxxx-gcs-bucket-tokyo/export_sample/*.csv.gz', -- ファイルパスを指定。uriにはワイルドカード表記とする必要がある(ファイル名個別指定は出来ない)
compression='GZIP', -- 圧縮形式を指定(GZIP, DEFLATE, SNAPPY)。未指定の場合は圧縮無し
format='CSV', -- ファイルフォーマットを指定。CSV, JSON, AVROが選択可能
overwrite=true, -- ファイルが存在していた場合の上書き有無。未指定の場合はfalse
header=true, -- ヘッダ行の有無。未指定の場合はfalse
field_delimiter=',' -- 区切り文字を文字列として指定
) AS
SELECT *
FROM データセット.テーブル名
WHERE 日付 = x;
SET x = ADD_MONTHS(x, 1);
END WHILE;
まとめ
上記を定期スケジュールで実行させることで
定期的にファイルをGCSに抽出することが可能となる。
↧