如何从ARRAY中排除NULL,以便查询不会失败

Mos*_*sky 9 google-bigquery

ARRAY_AGG聚合函数包含NULLs在它构建的数组中.当此类数组是查询结果的一部分时,查询失败并显示错误:

数组不能有null元素; 写作领域的错误

即以下查询演示它:

#standardSQL
SELECT ARRAY_AGG(x) FROM UNNEST([1,NULL,2,3]) x
Run Code Online (Sandbox Code Playgroud)

我们怎么解决呢?

Mos*_*sky 14

很高兴你问!BigQuery 在某些聚合函数中支持IGNORE NULLSRESPECT NULLS修饰,包括ARRAY_AGG,因此您的查询变为

#standardSQL
SELECT ARRAY_AGG(x IGNORE NULLS) FROM UNNEST([1,NULL,2,3]) x
Run Code Online (Sandbox Code Playgroud)

它通过生产[1,2,3].更多细节在文档中.


Mik*_*ant 5

另一个有趣的用例是,如果您不想丢失 NULL 元素,而是想用一些默认值替换它。例如-999

下面将执行此操作

#standardSQL
SELECT ARRAY_AGG(IFNULL(x,-999)) FROM UNNEST([1,NULL,2,3]) x   
Run Code Online (Sandbox Code Playgroud)

如果您只想要不同的元素 -

#standardSQL
SELECT ARRAY_AGG(DISTINCT IFNULL(x,-999)) FROM UNNEST([1,NULL,2,3,1,NULL]) x
Run Code Online (Sandbox Code Playgroud)