BigQuery 中的豪华数字 Table

Luxury Numbers Table in BigQuery

数字 table 在各种情况下都是非常宝贵和有用的。
在 sql.
中创建和填充数字 table 的方法有很多种 在 BigQuery 中处理此问题的最佳、最佳方式是什么?

我发现几乎没有适用于 GBQ 中大多数情况的合理选项。
到目前为止,我最喜欢的是不使用任何现有的 table(s) 作为基础,而是即时生成它并与主要 sql 逻辑

内联使用
SELECT pos 
FROM (
     SELECT ROW_NUMBER() OVER() AS pos, h 
     FROM (FLATTEN((
        SELECT SPLIT(RPAD('', :VAR_END, '.'),'') AS h FROM (SELECT NULL)),h
))) 
WHERE pos BETWEEN :VAR_START AND :VAR_END
AND (pos - :VAR_START) % :VAR_STEP = 0

:VAR_START, :VAR_STEP 和 :VAR_END 替换为您需要的值,您将得到相应的数字 Table飞行中

这种方法在我的大多数情况下都有效,并且很容易转换为其他情况。 例如,日期 Table:

SELECT DATE(DATE_ADD(TIMESTAMP(:VAR_START), pos - 1, "DAY")) as day
FROM (
     SELECT ROW_NUMBER() OVER() AS pos, h
     FROM (FLATTEN((
         SELECT SPLIT(RPAD('', 1 + DATEDIFF(TIMESTAMP(:VAR_END), TIMESTAMP(:VAR_START)), '.'),'') AS h
         FROM (SELECT NULL)),h
)))

:VAR_START 和 :VAR_END 分别替换为 '2015-08-25' 和 '2015-09-15' 就可以了那几天 table

我有时使用的另一个选项是 JS UDF 来生成更高级的序列