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'
);
根据您提供的代码和报错信息,问题可能出在子查询中的online_ddi.state
和offline_ddi.state
。在子查询中,您使用了别名online_ddi
和offline_ddi
,但在子查询的WHERE子句中又引用了它们的state
属性。这可能导致Flink CDC无法正确解析查询语句。
为了解决这个问题,您可以尝试将子查询中的online_ddi.state
和offline_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中正常执行。如果仍然遇到问题,请检查其他部分的代码是否有误。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。