在 Flink 程序之间共享动态表

时间:2021-07-06 07:56:08

标签: apache-flink flink-sql

我有一个 Flink 作业,它从数据库更改日志流创建一个动态表。表定义如下所示:

tableEnv.sqlUpdate("""
      CREATE TABLE some_table_name (
          id INTEGER,
          name STRING,
          created_at BIGINT,
          updated_at BIGINT
      )
      WITH (
          'connector' = 'kafka',
          'topic' = 'topic',
          'properties.bootstrap.servers' = 'localhost:9092',
          'properties.zookeeper.connect' = 'localhost:2181',
          'properties.group.id' = 'group_1',
          'format' = 'debezium-json',
          'debezium-json.schema-include' = 'true'
      )
    """)

尝试在同一集群上运行的另一个 Flink 应用程序中引用该表时,我的程序返回错误:SqlValidatorException: Object 'some_table_name' not found。是否可以以某种方式注册该表以便其他程序可以使用它?例如在这样的语句中:

  tableEnv.sqlQuery("""
    SELECT count(*) FROM some_table_name
  """).execute().print()

1 个答案:

答案 0 :(得分:1)

请注意,Flink 中的 table 不保存任何数据。另一个 Flink 应用程序可以独立创建另一个由同一个 Kafka 主题支持的表,例如。因此,不在应用程序之间共享表并不像您想象的那么悲惨。

但是您可以通过将表格存储在外部目录中来共享表格。例如,您可以为此使用 Apache Hive 目录。有关详细信息,请参阅 the docs