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

时间:2016-02-11 20:20:11

标签: sql google-bigquery

在SQL中,我通常使用COALESCEIFNULL来确保在我的查询包含NULLCOUNT等聚合函数时获取数字而不是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中做到这一点吗?

1 个答案:

答案 0 :(得分:10)

这是BigQuery中的一个错误,它已存在很长时间了。目前您需要强制转换COUNT,但您不应该为您的" 0"进行转换。

以下内容应该有效:

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

感谢@Kinaan Khan Sherwani提供official bug report的链接。