开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink CDC这种复杂的sql查询flink好像1.13.6不支持,哪位朋友们知道如何解决吗?

Flink CDC这种复杂的sql查询flink好像1.13.6不支持,查询语句修改了好多种查询方式都不行,代码走到第319行报错了,哪位朋友们知道如何解决吗?下面是代码和报错信息SELECT
dvi.id,
COALESCE(
CASE
WHEN online_ddi.id IS NOT NULL THEN 'online'
WHEN offline_ddi.id IS NOT NULL THEN 'offline'
ELSE 'notActive'
END,
'notActive'
) AS state
FROM
dev_vehicle_instance dvi
LEFT JOIN
dev_device_instance online_ddi
ON
online_ddi.id IN (
SELECT die.device_instance_id
FROM dev_device_instance_ext die
LEFT JOIN vehicle_device_instance_relation vdir ON die.id = vdir.device_instance_id
WHERE vdir.veh_instance_id = dvi.id AND online_ddi.state = 'online'
)
LEFT JOIN
dev_device_instance offline_ddi
ON
offline_ddi.id IN (
SELECT die.device_instance_id
FROM dev_device_instance_ext die
LEFT JOIN vehicle_device_instance_relation vdir ON die.id = vdir.device_instance_id
WHERE vdir.veh_instance_id = dvi.id AND offline_ddi.state = 'offline'
);image.png
image.png

展开
收起
cuicuicuic 2024-03-06 00:15:13 33 0
1 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    根据您提供的代码和报错信息,问题可能出在子查询中的online_ddi.stateoffline_ddi.state。在子查询中,您使用了别名online_ddioffline_ddi,但在子查询的WHERE子句中又引用了它们的state属性。这可能导致Flink CDC无法正确解析查询语句。

    为了解决这个问题,您可以尝试将子查询中的online_ddi.stateoffline_ddi.state替换为实际的表名和列名。以下是修改后的代码:

    SELECT
    dvi.id,
    COALESCE(
    CASE
    WHEN online_ddi.id IS NOT NULL THEN 'online'
    WHEN offline_ddi.id IS NOT NULL THEN 'offline'
    ELSE 'notActive'
    END,
    'notActive'
    ) AS state
    FROM
    dev_vehicle_instance dvi
    LEFT JOIN
    dev_device_instance online_ddi
    ON
    online_ddi.id IN (
    SELECT die.device_instance_id
    FROM dev_device_instance_ext die
    LEFT JOIN vehicle_device_instance_relation vdir ON die.id = vdir.device_instance_id
    WHERE vdir.veh_instance_id = dvi.id AND die.state = 'online'
    )
    LEFT JOIN
    dev_device_instance offline_ddi
    ON
    offline_ddi.id IN (
    SELECT die.device_instance_id
    FROM dev_device_instance_ext die
    LEFT JOIN vehicle_device_instance_relation vdir ON die.id = vdir.device_instance_id
    WHERE vdir.veh_instance_id = dvi.id AND die.state = 'offline'
    );
    

    这样修改后,您的查询语句应该可以在Flink CDC中正常执行。如果仍然遇到问题,请检查其他部分的代码是否有误。

    2024-03-08 22:33:59
    赞同 展开评论 打赏

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

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载