(Google Cloud PlatformのCompute Engineでシェルスクリプトを使い)SQL(BigQuery)を操作する際、日別でテーブルを作成する方法について
シェルスクリプトについての質問です。
最下部にサンプルコードの掲載しました。
シェルでループを回し、”一日毎に”(BigQueryを操作して)日別のテーブルを作成したいと考えております。
*(BigQueryの)記述内容に関して、日付指定の箇所以外は同様のもの
上記、日付部分を操作する為、以下のイメージを考えてます。
1.テーブル作成する為のクエリーをシェルでループ処理
2.ただし、上記の「指定日付のみ」ループ毎に変わっていく
具体的には、以下の通りです。
1.のシェル内に、2.の変数を入れてループ処理する。
上記を実現する為のシェルスクリプトはどのように記述すれば宜しいでしょうか?
また、上記以外でも、目的を実現できる方法があればご教授ください。
現状は、以下のように「■■」内にSQL(BigQuery)をベタ書きしています。
(*指定日付のみ変数で対応)
ベタ書き以外で、もっとキレイな書き方があれば、ご教授ください。
どうぞよろしくお願いします。
#!/bin/sh
for i in `seq 0 3`
do
echo "i = $i"
GetDateTime08=`date -d "$i days ago" '+%Y%m%d'`
echo $GetDateTime08
bq query --use_legacy_sql=false --replace --allow_large_results --destination_table=■テーブル名■_$GetDateTime08 \
'
--■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
SQL(BigQuery)をベタ書き
--■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
'
done
【補足1】
今回、実現したいテーブルは、日を跨いで集計するテーブルではなく、
その前段階として、「日別でログ保存するテーブル」となります。
上記のテーブルに対してFROM句を使い、必要な期間を「*(ワイルドカード)」で指定する仕様です。
例)
FROM Table名_20*
WHERE _TABLE_SUFFIX > "2018-08-01"
この仕様にするメリットは、全期間が保存されたテーブルを(WHERE句で)絞り込む必要がなく、
必要な期間のみ、FROM句で呼び出す為、非常に軽くなります。
なお、日別でテーブル作成する場合、BigQuery側の保存形式は(VIEW形式ではなく)テーブル形式となります。
(最終的に、日を跨いで集計するテーブルはVIEW形式)
今回、扱っているデータは、(顧客情報など時間の経過によって変化するものではなく)Googleアナリティクスのデータであり、
1日毎にテーブル形式で保存してしまっても影響が、ほぼ無いと考えた為です。