【问题标题】:How to cast int to boolean when doing SQL transform in Apache Beam在 Apache Beam 中进行 SQL 转换时如何将 int 转换为布尔值
【发布时间】:2021-04-13 18:29:16
【问题描述】:

我正在尝试使用 Calcite SQL 语法对 Apache Beam 进行 SQL 转换。我正在做一个 int 到布尔转换。我的 sql 是这样的:

,CASE WHEN cast(IsService as BOOLEAN) THEN CASE WHEN IsEligible THEN 1 ELSE 0 END ELSE NULL END AS Reported

IsService 是 int 指标,IsEligible 是布尔值。

根据documentation,从 int 到 boolean 的显式转换很好。 但是,当我运行管道时出现以下错误:

Caused by: org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.sql.validate.SqlValidatorException: Cast function cannot convert value of type INTEGER to type BOOLEAN

谁能解释我为什么会收到错误消息?

【问题讨论】:

  • 底层数据库是什么?
  • @JimGarrison 我正在阅读 Kafka 主题
  • 为什么不直接使用 IsService = [int] ,这里需要强制转换吗?
  • @T.Peter 你是对的,它会工作,但我的 sql 正在其他地方自动生成,改变它是一件很痛苦的事情。只是好奇为什么我会收到错误
  • 看看。 Beam 是在相当旧的 Calcite 版本上,所以可能就是这样。不过,我将添加另一个答案来解决您的问题。

标签: java sql apache-beam apache-calcite beam-sql


【解决方案1】:

要立即解决您的问题,您可以使用IsService > 0 而不是CAST。在我看来,转换是什么就更清楚了。我不喜欢依赖“虚假”的价值观。

【讨论】:

  • 使用> 0 可以解决问题,但这需要更改自动生成的sql,而且很麻烦
猜你喜欢
  • 2012-02-25
  • 2015-09-27
  • 2011-04-17
  • 1970-01-01
  • 2017-04-15
  • 2016-01-19
  • 1970-01-01
  • 2018-12-20
相关资源
最近更新 更多