唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

BigQueryのクエリで定数を定義して複数箇所で使いたい

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