错误消息:
Could not parse the plan for the sink due to incorrect join result types: [DOUBLE, NULL]
原因:
该错误表明在双流 join 中,连接结果的类型不匹配。具体来说,join 后的结果包含了两个列,一个是 DOUBLE 类型,另一个是 NULL 类型。
解决办法:
要解决此问题,需要确保连接的列具有兼容的类型。以下是一些可能的解决方案:
检查数据类型:检查正在连接的列的数据类型,确保它们兼容。例如,如果一个列是 DOUBLE 类型,另一个列应该是 DOUBLE 或 FLOAT 类型。
使用类型转换:如果连接的列具有不同的类型,可以使用类型转换函数将其转换为兼容的类型。例如,可以使用 CAST 函数将 DOUBLE 转换为 FLOAT。
使用公共超类型:如果连接的列具有不同的类型,但有公共超类型,可以使用公共超类型。例如,DOUBLE 和 FLOAT 的公共超类型是 DECIMAL。
修改查询:如果无法将列类型转换为兼容的类型,可能需要修改查询以避免连接这些列。
示例:
假设有两个流:
流 A:包含列 id(INT) 和 value_a(DOUBLE)
流 B:包含列 id(INT) 和 value_b(FLOAT)
要连接这两个流,可以使用以下查询:
SELECT a.id, a.value_a, b.value_b
FROM stream_a AS a
JOIN stream_b AS b ON a.id = b.id
但是,如果 value_a 列的类型为 DOUBLE,而 value_b 列的类型为 FLOAT,则查询将失败,并显示上述错误消息。
要解决此问题,可以使用以下查询:
SELECT a.id, CAST(a.value_a AS FLOAT) AS value_a, b.value_b
FROM stream_a AS a
JOIN stream_b AS b ON a.id = b.id
此查询将使用 CAST 函数将 value_a 列转换为 FLOAT 类型,从而使其与 value_b 列兼容。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。