在使用 flink1.17 udtf 时,select 不报错,在insert 时报错Caused by: org.apache.flink.shaded.guava30.com.google.common.util.concurrent.UncheckedExecutionException: org.apache.flink.api.common.InvalidProgramException: Table program cannot be compiled. This is a bug. Please file an issue.
这个是什么原因造成的?
这个错误是由于在使用 Flink 1.17 的 UDF(用户自定义函数)时,插入操作报错。具体原因是在编译表程序时出现了问题,可能是由于 Flink 的一个 bug 导致的。
这个错误是因为在使用Flink 1.17 UDTF时,插入数据时出现错误。错误的原因可能是由于UDTF在处理数据时产生了错误,导致数据无法插入到表中。
解决这个问题的方法有以下几种:
这个错误是因为在Flink1.17中,正在尝试在INSERT语句中使用UDTF,但是这个操作在Flink中是不被允许的。在Flink中,只有在SELECT语句中才能使用UDTF。如果你想要在INSERT语句中使用UDTF,需要先将UDTF的结果作为新的表或者视图存在,然后再进行INSERT操作,由于Flink全托管产品受部署环境和网络环境等因素的影响,所以开发Python自定义函数时,需要注意以下限制:
仅支持开源FlinkV1.12及以上版本。
Flink全托管集群上已预装了Python3.7.9,因此需要您在Python3.7.9版本开发代码。
Flink全托管运行环境使用的是JDK1.8,如果Python作业中依赖第三方JAR包,请确保JAR包兼容JDK1.8。
仅支持开源ScalaV2.11版本,如果Python作业中依赖第三方JAR包,请确保使用ScalaV2.11对应的JAR包依赖。
---实时计算flink版自定义表值函数(UDTF)文档
Flink 1.17 版本中存在的一个 bug 导致的。这个 bug 会导致在使用 UDTF 时,编译器无法正确地生成代码,从而抛出异常。
这个 bug 已经在 Flink 1.18 版本中得到了修复。 可以尝试升级 Flink 版本,或者使用以下的临时解决方案:
@FunctionHint(output = @DataTypeHint(value = "ROW", bridgedTo = Row.class))
public class MyUdtf extends TableFunction {
// ...
}
SELECT * FROM user_log as tab, LATERAL TABLE (splitUdtf (tab.data)) AS T (name, age);
这个错误信息通常是由于Flink的UDTF(User Defined Table-Generating Function)在执行插入操作时出现了问题导致的。UDTF是一种特殊的用户定义函数,它可以生成多张表。
这个错误的具体原因可能是:
你可以尝试以下步骤来解决这个问题:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。