我做双流join,一直报这个错,有知道是什么原因的吗?

707b83d1bde9174b97979229c22a1cbf.png

展开
收起
爱喝咖啡嘿 2023-01-03 16:04:01 216 分享 版权
1 条回答
写回答
取消 提交回答
  • 错误消息:

    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 列兼容。

    2024-02-27 17:45:47
    赞同 展开评论

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

收录在圈子:
实时计算 Flink 版(Alibaba Cloud Realtime Compute for Apache Flink,Powered by Ververica)是阿里云基于 Apache Flink 构建的企业级、高性能实时大数据处理系统,由 Apache Flink 创始团队官方出品,拥有全球统一商业化品牌,完全兼容开源 Flink API,提供丰富的企业级增值功能。
还有其他疑问?
咨询AI助理