开发者社区> 问答> 正文

SQL从1.9迁移到1.11的问题

我们目前使用的是 flink 1.9.1 执行 SQL 任务,主要使用了以下几种接口:

  1. sqlQuery sqlUpdate: 执行表的创建、查找和写入

  2. toAppendStream/toRetractStream:将表转换为流后,通过 DataStream.addSink(new

RichSinkFunction )写入

  1. registerDataStream:将流注册为表,下一步使用 sqlQuery/sqlUpdate 读写该表

最后通过 env.execute() 或者 tableEnv.execute() 执行:通过 RichSinkFunction.invoke 或者

sqlUpdate(DML) 更新到存储,这两种输出形式都可能多次调用。

看到文档里,这部分接口 [1][2] 的行为有些变化,实际使用1.11后,有几处困惑想请教:

  1. 如果预期混用 SQL/DataStream 的接口,我目前按照3里的介绍,使用 sqlUpdate,然后通过 tEnv.execute()

来输出。具体的,程序设置两个输出,分别是 RichSinkFunction.invoke 以及 sqlUpdate,观察到只有 sqlUpdate

更新了数据,RichSinkFunction 没有执行。如果希望同时输出的话,是必须将 RichSinkFunction.invoke

的部分也都实现为 StreamTableSink 么,是否有其他成本较低的迁移方式?如果按照 1.11 区分 env/tableEnv

的思路,这种情况怎么实现更加合理?

  1. 对于这种情况,env.getExecutionPlan 获取的只是调用 DataStream 接口的 DAG 图,如果要获取 Table

操作流程的 DAG,应该通过 tableEnv 的哪个接口获取?

1.

https://ci.apache.org/projects/flink/flink-docs-release-1.11/release-notes/flink-1.11.html#corrected-execution-behavior-of-tableenvironmentexecute-and-streamtableenvironmentexecute-flink-16363

2.

https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=134745878

3.

https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/common.html#translate-and-execute-a-queryc*来自志愿者整理的flink邮件归档

展开
收起
小阿怪 2021-12-07 10:49:09 634 0
1 条回答
写回答
取消 提交回答
  • 通过 Table 操作流程的 DAG 现在不再会缓存到底层的 exec env 中,为了避免 transformations

    污染,所以是拿不到的,但是内部代码我们仍然是先拼接 StreamGraph 然后直接通过 exec env 提交。*来自志愿者整理的flink邮件归档

    2021-12-07 11:32:58
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载