MERGE INTO stu4_sink_hudiUSING ( SELECT * FROM stu4) sourceON stu4_sink_hudi.id = source.idWHEN MATCHED THEN UPDATE SET stu4_sink_hudi.name = source.name, stu4_sink_hudi.school = source.schoolWHEN NOT MATCHED THEN INSERT (id, name, school) VALUES (source.id, source.name, source.school)WHEN NOT MATCHED BY SOURCE AND stu4_sink_hudi.school='school1' THEN DELETE;[ERROR] Could not execute SQL statement. Reason:org.apache.flink.sql.parser.impl.ParseException: Encountered "WHEN" at line 12, column 1.Was expecting one of: ")" ... 请问一下,Flink1.13.6 MERGE 这语法 有什么问题?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
问题描述: 您在使用Flink 1.13.6尝试执行一个MERGE INTO语句时遇到了编译错误,具体错误信息为org.apache.flink.sql.parser.impl.ParseException: Encountered "WHEN" at line 12, column 1. Was expecting one of: ")" ...
。您想了解该MERGE语法存在的问题。
查询背景:
查询语句:
MERGE INTO stu4_sink_hudi
USING (SELECT * FROM stu4) source
ON stu4_sink_hudi.id = source.id
WHEN MATCHED THEN UPDATE SET
stu4_sink_hudi.name = source.name,
stu4_sink_hudi.school = source.school
WHEN NOT MATCHED THEN INSERT
(id, name, school)
VALUES (source.id, source.name, source.school)
WHEN NOT MATCHED BY SOURCE AND stu4_sink_hudi.school='school1' THEN DELETE;
问题分析:
)
,这通常意味着SQL语法不被当前版本的Flink SQL解析器所支持。WHEN NOT MATCHED BY SOURCE
这样的高级条件处理,这在某些数据库系统中可用但在Flink的特定版本中可能未实现或有不同语法。优化建议:
示例调整方案(假设直接执行DELETE不可行):
注意事项:
参考资料:
综上所述,您遇到的错误可能是由于Flink 1.13.6对MERGE INTO语句的高级用法支持不足所致。建议查阅官方文档以确认语法兼容性,并考虑调整策略或升级Flink版本以解决此问题。
注:上述回答中的角标仅作为示例引用标记,实际回答中应依据提供的知识库资料内容进行适当调整或直接省略,因为给出的知识库并未包含直接相关的Flink版本与功能支持细节。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。