为什么bigquery在array\u concat与array\u agg一起应用于非空数组时生成空数组?

dxxyhpgq  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(424)

我在bigquery中遇到了一个非常奇怪的行为。
以下查询生成意外的结果空数组 [] ,因为我要连接数组,所以我期望一个数组包含所有要连接的元素。

SELECT ARRAY_CONCAT(
    (
        SELECT ARRAY_AGG(col1) -- This is creating an empty array since condition is always false
        FROM ... 
        WHERE 1 = 2
    ),
    ['test']
)

而一个非常相似的查询会产生预期的结果 ['test'] :

SELECT ARRAY_CONCAT(
    [],
    ['test']
)

array_agg()确实生成一个空数组 [] :

SELECT ARRAY_AGG(col1) -- This is creating an empty array since condition is always false
FROM ... 
WHERE 1 = 2

为什么第一个查询生成空数组,而它是第二个和第三个查询的组合?

hfyxw5xn

hfyxw5xn1#

这有点难解释。第一个查询不会生成空数组。它生成一个数组列,其值为 NULL . 这就是concat返回的原因 NULL .
作为一般规则,几乎没有行的子查询中的聚合函数返回 NULL . 唯一的例外是 COUNT() 它回来了 0 .
很容易想到 NULL 和空数组是一样的。他们不是。

相关问题