在SQL中,我通常使用COALESCE
和IFNULL
来确保在我的查询包含NULL
和COUNT
等聚合函数时获取数字而不是SUM
,例如:
SELECT IFNULL(COUNT(foo), 0) AS foo_count FROM …
然而,在BigQuery中我遇到了一个错误:
函数中的参数类型不匹配IFNULL:' f0 _'是类型uint64,' 0'是类型int32。
有没有办法让BigQuery明白在这种情况下文字0应该被解释为unit64
?
我已尝试使用CAST
,但我可以投出unit64
类型,所以我尝试INTEGER
:
SELECT IFNULL(COUNT(foo), CAST(0 AS INTEGER)) AS foo_count FROM …
这给了我基本相同的错误,但至少我已经成功获得了64位零而不是32位:
函数中的参数类型不匹配IFNULL:' f0 _'是类型uint64,' 0'是int64类型。
如果我使用INTEGER(0)
,也会发生同样的情况。
如果我将两个参数都转换为INTEGER
:
SELECT IFNULL(INTEGER(COUNT(foo)), INTEGER(0)) AS foo_count FROM …
但现在它开始变得冗长。这真的是你应该如何在BigQuery中做到这一点吗?
答案 0 :(得分:10)
这是BigQuery中的一个错误,它已存在很长时间了。目前您需要强制转换COUNT
,但您不应该为您的" 0"进行转换。
以下内容应该有效:
SELECT IFNULL(INTEGER(COUNT(foo)), 0) AS foo_count FROM
感谢@Kinaan Khan Sherwani提供official bug report的链接。