備忘録: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);

今日はここまで。

この記事が気に入ったらサポートをしてみませんか?