Google bigquery 如何在BigQuery标准SQL中生成序列

Google bigquery 如何在BigQuery标准SQL中生成序列,google-bigquery,Google Bigquery,我需要生成一个表,每行包含600个连续数字(从51开始) 我如何使用BigQuery标准SQL实现这一点 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 ( S

我需要生成一个表,每行包含600个连续数字(从51开始)

我如何使用BigQuery标准SQL实现这一点

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

从那里,您可以调整逻辑,例如获取连续的天数和其他序列,尝试在标准SQL中生成数组:

SELECT num FROM UNNEST(GENERATE_ARRAY(51, 650)) AS num;
编辑:如果您想要超过一百万个元素,可以使用多个调用来生成数组,但要注意,如果生成的元素太多,查询可能会花费很长时间:

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

对于标准SQL,我已经准备好了一些更好的东西——不幸的是,它还不可用:(我会把这篇文章加上书签,等我有东西可以分享时再加上答案。@Elliott Brossard,看起来
GENERATE_ARRAY
将序列长度限制在
1048575
,也就是
2^20-1
。你知道这个限制是用来做什么的还是从哪里来的吗?我的用例涉及到生成一个从1到5 bi的序列数百万个条目长。我正在解决这个问题,将序列以CSV格式写入一个bucket,然后从那里导入到一个表中。我添加了这个限制,并添加了一条注释,
强制执行大约一百万个元素的硬限制,以避免生成太大的数组,无法进行持续折叠或运行时的其他部分。
我不想这样做以便于创建可能导致查询失败的数组。不过,请参阅我的更新答案。