BigQueryでクエリを書くときに、同じ日付や倍率、円周率などの定数をクエリの複数箇所で使いたい時があります
単純に複数箇所に書くと修正するときに大変なので、共通のものを複数箇所で使いまわす方法を調べてみました
UDF(ユーザー定義関数)による方法
定数を返す関数を定義して使う方法が一番簡単です
Standard SQLのUDFは以下のような形式で書けます
CREATE TEMPORARY FUNCTION 関数名(引数名 型, ...) AS (使いたいSQL);
これを使うと以下のように定数として使うことができて、修正したいときは関数の定義だけを変えればよくなります
#StandardSQL CREATE TEMPORARY FUNCTION RATE1() AS (0.01); CREATE TEMPORARY FUNCTION PI() AS (ACOS(-1)); SELECT i, i * RATE1(), PI() FROM UNNEST(GENERATE_ARRAY(1, 100)) AS i
WITHで適当なテーブルを作ってCROSS JOIN
する方法
こっちの方法だとCROSS JOIN
をしないといけないので少しコードがわかりづらくなります
#StandardSQL WITH const AS ( SELECT 0.01 AS RATE1 , ACOS(-1) AS PI ) SELECT i, i * RATE1, PI FROM const, UNNEST(GENERATE_ARRAY(1, 100)) AS i