Google bigquery BigQuery中的豪华数字表
数字表在各种情况下都是非常宝贵和有用的。Google bigquery BigQuery中的豪华数字表,google-bigquery,Google Bigquery,数字表在各种情况下都是非常宝贵和有用的。 有许多方法可以在sql中创建和填充数字表。 在BigQuery中,处理这个问题的最佳方法是什么?我发现在GBQ的大多数情况下,几乎没有合理的选择。 到目前为止,我最喜欢的方法不是使用任何现有表作为基础,而是动态生成它,并与主sql逻辑结合使用 SELECT pos FROM ( SELECT ROW_NUMBER() OVER() AS pos, h FROM (FLATTEN(( SELECT SPLIT(RPA
有许多方法可以在sql中创建和填充数字表。
在BigQuery中,处理这个问题的最佳方法是什么?我发现在GBQ的大多数情况下,几乎没有合理的选择。
到目前为止,我最喜欢的方法不是使用任何现有表作为基础,而是动态生成它,并与主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\u START、:VAR\u STEP和:VAR\u END,并动态获得相应的数字表
这种方法在大多数情况下对我有效,在其他情况下也很容易转换。
例如,日期表:
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
)))
分别用“2015-08-25”和“2015-09-15”替换:VAR\u START和:VAR\u END,该表中有所有天数
我有时使用的另一个选项是JSUDF来生成更高级的序列