Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google bigquery BigQuery中的豪华数字表_Google Bigquery - Fatal编程技术网

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来生成更高级的序列