web-dev-qa-db-ja.com

BigQuery標準SQLでシリーズを生成する方法

各行にsay 600個の連続した数字(51から始まる)を持つテーブルを生成する必要があります
BigQuery Standard SQLでこれを行うにはどうすればよいですか?

12

BigQuery標準SQL

SELECT 50 + ROW_NUMBER() OVER() AS num
FROM UNNEST((SELECT SPLIT(FORMAT("%600s", ""),'') AS h FROM (SELECT NULL))) AS pos
ORDER BY num

BigQueryレガシーSQL

SELECT 50 + pos AS pos FROM (
  SELECT ROW_NUMBER() OVER() AS pos, * 
  FROM (FLATTEN((SELECT SPLIT(RPAD('', 600, '.'),'') AS h FROM (SELECT NULL)), h))
) WHERE pos BETWEEN 1 AND 600

そこからロジックを調整できますたとえば連続した日や他のシーケンスを取得する

4

標準SQLでGENERATE_ARRAYを試してください。

SELECT num FROM UNNEST(GENERATE_ARRAY(51, 650)) AS num;

編集:約100万を超える要素が必要な場合は、GENERATE_ARRAYを複数回呼び出すことができますが、生成する要素が多すぎるとクエリに時間がかかる可能性があることに注意してください。

SELECT num1 * num2 AS num
FROM UNNEST(GENERATE_ARRAY(1, 1000000)) AS num1,
  UNNEST(GENERATE_ARRAY(1, 100)) AS num2;
16