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

在使用 flink1.17 udtf 时,select 不报错,这个是什么原因造成的?

在使用 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.
这个是什么原因造成的?

展开
收起
真的很搞笑 2023-10-22 22:16:02 122 1
5 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    这个错误是由于在使用 Flink 1.17 的 UDF(用户自定义函数)时,插入操作报错。具体原因是在编译表程序时出现了问题,可能是由于 Flink 的一个 bug 导致的。

    2023-10-23 15:26:34
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    这个错误是因为在使用Flink 1.17 UDTF时,插入数据时出现错误。错误的原因可能是由于UDTF在处理数据时产生了错误,导致数据无法插入到表中。
    解决这个问题的方法有以下几种:

    1. 检查UDTF的代码,确保其正确性和完整性。如果代码有错误,需要修复错误。
    2. 检查UDTF的输入数据,确保其格式正确。如果数据格式不正确,需要修复数据格式。
    3. 检查UDTF的输出数据,确保其格式正确。如果数据格式不正确,需要修复数据格式。
    4. 如果上述方法都无法解决问题,可以尝试更新Flink版本,或者寻求Flink社区的帮助。
    2023-10-23 13:35:26
    赞同 展开评论 打赏
  • 天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。

    这个错误是因为在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)文档

    2023-10-23 11:05:04
    赞同 展开评论 打赏
  • Flink 1.17 版本中存在的一个 bug 导致的。这个 bug 会导致在使用 UDTF 时,编译器无法正确地生成代码,从而抛出异常。

    这个 bug 已经在 Flink 1.18 版本中得到了修复。 可以尝试升级 Flink 版本,或者使用以下的临时解决方案:

    • 在 UDTF 的类定义中,添加一个 @FunctionHint 注解,指定输出类型的 Class 和 GenericType。例如:

    @FunctionHint(output = @DataTypeHint(value = "ROW", bridgedTo = Row.class))
    public class MyUdtf extends TableFunction {
    // ...
    }

    • 在 SQL 中,使用 AS 关键字给 UDTF 的输出字段起别名。例如:

    SELECT * FROM user_log as tab, LATERAL TABLE (splitUdtf (tab.data)) AS T (name, age);

    2023-10-23 11:00:16
    赞同 1 展开评论 打赏
  • 这个错误信息通常是由于Flink的UDTF(User Defined Table-Generating Function)在执行插入操作时出现了问题导致的。UDTF是一种特殊的用户定义函数,它可以生成多张表。

    这个错误的具体原因可能是:

    1. UDTF的实现有问题,导致在编译Table Program时出现错误。
    2. UDTF的输出类型与目标表的列类型不匹配。
    3. 在执行插入操作时,Flink遇到了一些内部错误。

    你可以尝试以下步骤来解决这个问题:

    1. 检查UDTF的实现,确保它没有问题。
    2. 检查UDTF的输出类型,确保它与目标表的列类型匹配。
    3. 如果可能的话,尝试更新Flink的版本,因为旧版本的Flink可能存在一些已知的问题。
    2023-10-23 11:00:16
    赞同 展开评论 打赏

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

相关产品

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

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