BigQuery COALESCE/IFNULL 类型与文字不匹配
BigQuery COALESCE/IFNULL type mismatch with literals
在 SQL 中,我通常使用 COALESCE
和 IFNULL
来确保我得到数字而不是 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。
在 SQL 中,我通常使用 COALESCE
和 IFNULL
来确保我得到数字而不是 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。