唯物是真 @Scaled_Wurm

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

BigQueryのGENERATE_ARRAY関数で個数が多い等差数列を作る

GENERATE_ARRAY(start_expression, end_expression[, step_expression])関数を使うと連番の数値(等差数列)を作ることができます

f:id:sucrose:20180616232444p:plain
しかし一度に作る個数が多いとError: GENERATE_ARRAY(1, 10000000, 1) produced too many elementsのようにエラーが出てしまいます

なので力技でエラーを回避します
2つのGENERATE_ARRAY()で数列を生成して、片方を小さい方の桁もう片方を大きい方の桁の数値とします
こうやると先程は\(10^7\)個の数列の作成でもエラーになっていたのが例えば\(10^9\)個の数列でも作ることができます

#standardSQL
SELECT
  i * 1000 + i2 AS i
FROM UNNEST(GENERATE_ARRAY(0, 999999)) AS i, UNNEST(GENERATE_ARRAY(0, 1000 - 1)) AS i2

ただし実行時間は結構遅いので注意が必要です
\(10^9\)個の数列を作って出力するだけで8分以上かかっています
f:id:sucrose:20180616235031p:plain