我有一个 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()
答案 0 :(得分:1)
请注意,Flink 中的 table 不保存任何数据。另一个 Flink 应用程序可以独立创建另一个由同一个 Kafka 主题支持的表,例如。因此,不在应用程序之间共享表并不像您想象的那么悲惨。
但是您可以通过将表格存储在外部目录中来共享表格。例如,您可以为此使用 Apache Hive 目录。有关详细信息,请参阅 the docs。