数字表在各种情况下都是非常宝贵和有用的 在sql中创建和填充数字表的方法有很多种 在BigQuery中处理这个问题的最佳,最佳方法是什么?
答案 0 :(得分:2)
在GBQ中,我发现适用于大多数情况的合理选项很少 到目前为止,我最喜欢的不是使用任何现有的表作为基础,而是在飞行中生成它并与主sql逻辑一起使用
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_STEP和:VAR_END 替换为您需要的值,并随时获取相应的数字表
这种方法在大多数情况下适用于我,并且可以轻松转换为其他情况。 例如,日期表:
if(i%j==0);
分别替换:VAR_START和:VAR_END ' 2015-08-25'和' 2015-09-15'你在那张桌子上度过了所有的日子
我有时使用的另一个选项是JS UDF来生成更高级的序列