備忘録:Big Query Scripting①
BigQueryScriptingとは?
・BigQuery(以下BQ)のコンソール上にて、データベース操作言語であるSQLを条件分岐や繰り返しなどの手続型言語と組み合わせて、操作する方法。
どんな文法がある?
変数
一般的なプログラミング言語のように変数を定義することが可能。
文法はJavascriptやVBAのようにまず、変数の宣言とデータ型の決定をし、その後代入を行う。自分はPythonを多用するので一瞬ミスった。
DECLARE hoge <データ型 STRING / INT64 /DATEなど>;
SET hoge = "hoge"/1234/"2022-04-01" など;
SELECT
*
FROM
hoge.foo.bar
where
date = hoge;
みたいな書き方ができる。
2行目のSET文を書かないと、変数hogeはNULL値となる。
ただし、DEFAULT句を用いると、変数が代入されない場合でも変数がNULLとならず、DEFAULT以下が変数として定義される。
DECLARE hoge date DEFAULT CURRENT_DATE();
こうすると変数hogeは今日の日付が代入される。
スケジュールドクエリなどで毎日の売り上げを集計する時などに良さそう。
DECLARE hoge date DEFAULT CURRENT_DATE();
INSERT INTO hoge.uriage.uriage_daily
SELECT
date,
sum(price) as uriage
FROM
purchases
WHERE
date = hoge
GROUP BY
date;
以下の方法でもできそうだけど、日数が多すぎたりするとクエリのパフォーマンスが落ちそう。
日付でパーティションを切っておけばBQの負荷的にも良さげな気がする。
CREATE OR REPLACE TABLE hoge.uriage.uriage_daily
SELECT
date,
sum(price)
FROM
purchases
GROUP BY
date;
BQのリファレンスを見ているど、どうやらDEFAULT以下でSELECT句を書けるみたいだ。複数の値がある場合の挙動が気になる。ARRAY型になるんだろうか。一回やってみたがうまく動作しない。ちょっと調べてみよう。
DECLARE item DEFAULT (SELECT item FROM schema1.products LIMIT 1);
今日はここまで。
この記事が気に入ったらサポートをしてみませんか?