BigQuery COALESCE/IFNULL 类型与文字不匹配

BigQuery COALESCE/IFNULL type mismatch with literals

在 SQL 中,我通常使用 COALESCEIFNULL 来确保我得到数字而不是 NULL 当我的查询包含 COUNT 之类的聚合函数时和 SUM,例如:

SELECT IFNULL(COUNT(foo), 0) AS foo_count FROM …

但是,在BigQuery中我运行报错了:

Argument type mismatch in function IFNULL: 'f0_' is type uint64, '0' is type int32.

有没有办法让 BigQuery 理解文字 0 在此上下文中应解释为 unit64

我试过使用 CAST,但是没有 unit64 可以转换的类型,所以我尝试 INTEGER:

SELECT IFNULL(COUNT(foo), CAST(0 AS INTEGER)) AS foo_count FROM …

这给了我基本相同的错误,但至少我已经成功获得了 64 位零而不是 32 位:

Argument type mismatch in function IFNULL: 'f0_' is type uint64, '0' is type int64.

如果我使用 INTEGER(0),也会发生同样的情况。

如果我将两个参数都转换为 INTEGER:

,我可以让它工作
SELECT IFNULL(INTEGER(COUNT(foo)), INTEGER(0)) AS foo_count FROM …

但现在它开始冗长了。在 BigQuery 中真的应该这样做吗?

这是 BigQuery 中的一个错误,已经存在了很长一段时间。目前您需要强制转换 COUNT,但您不需要为您的“0”执行此操作。

以下应该有效:

SELECT IFNULL(INTEGER(COUNT(foo)), 0) AS foo_count FROM

感谢@Kinaan Khan Sherwani link 到 official bug report