【问题标题】:BigQuery COALESCE/IFNULL type mismatch with literalsBigQuery COALESCE/IFNULL 类型与文字不匹配
【发布时间】:2016-02-11 20:20:10
【问题描述】:

在 SQL 中,当我的查询包含像 COUNTSUM 这样的聚合函数时,我通常使用 COALESCEIFNULL 来确保获得数字而不是 NULL,例如:

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 中应该这样做的方式吗?

【问题讨论】:

标签: sql google-bigquery


【解决方案1】:

这是 BigQuery 中的一个错误,已经存在了很长一段时间。暂时你需要强制转换COUNT,但你不应该为你的“0”做它。

以下应该有效:

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

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

【讨论】:

  • 将两者都转换为 BIGINT 不是更好吗,考虑到 BigQuery/BigData,21 亿并不是一个大数字?
  • 我不相信 Bigquery 具有“BIGINT”数据类型。只是 64 位整数。我不太使用它,所以我可能会弄错,但我相信原始海报发现了同样的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-23
  • 1970-01-01
  • 2016-03-01
  • 2010-09-20
  • 1970-01-01
  • 2022-01-18
相关资源
最近更新 更多