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

The*_*heo 5 sql google-bigquery

在SQL我通常使用COALESCE,并IFNULL确保我得到的数字,而不是NULL当我查询包含像聚合函数COUNTSUM,例如:

SELECT IFNULL(COUNT(foo), 0) AS foo_count FROM …
Run Code Online (Sandbox Code Playgroud)

但是,在BigQuery中我遇到了一个错误:

函数中的参数类型不匹配IFNULL:'f0_'是uint64类型,'0'是int32类型.

有没有办法让BigQuery理解unit64在这个上下文中应该将文字0解释为a ?

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

SELECT IFNULL(COUNT(foo), CAST(0 AS INTEGER)) AS foo_count FROM …
Run Code Online (Sandbox Code Playgroud)

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

函数中的参数类型不匹配IFNULL:'f0_'是uint64类型,'0'是int64类型.

如果我使用同样的事情INTEGER(0).

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

SELECT IFNULL(INTEGER(COUNT(foo)), INTEGER(0)) AS foo_count FROM …
Run Code Online (Sandbox Code Playgroud)

但现在它开始变得冗长.这真的是你应该如何在BigQuery中做到这一点?

Tom*_*m H 10

这是BigQuery中的一个错误,它已存在很长一段时间了.暂时你需要强制转换COUNT,但你不需要为你的"0"做这件事.

以下应该有效:

SELECT IFNULL(INTEGER(COUNT(foo)), 0) AS foo_count FROM
Run Code Online (Sandbox Code Playgroud)

感谢@Kinaan Khan Sherwani提供官方错误报告的链接.