Catalog 是什么
类似于 Hive 的 MetaStore,用来管理 Flink SQL 表的元数据信息。
Catalog 可以放在哪里
- 内存:Flink 任务重启后,就失效了,需要重建。
- 放在 Hive 中:通过使用 Flink 的 Hive Catalog,可以将 Flink 的元数据信息存放到 Hive 的 MetaStore 中进行持久化保存。这样Flink 任务重启后,依旧可以找到重启前的 Flink 表的元数据信息,而无需重建。
Catalog 放在 Hive 的功能全解
- 持久化 Flink 表的元数据信息。
- Flink 可以通过访问 Hive MetaStore,访问操作属于 Hive 的表,也可以使用 Flink SQL 直接在 Hive 上创建属于 Hive 的表。
上面两处“属于 Hive 的表”的说明:前者侧重指,原本在 Hive 上就已经存在的 Hive 表;后者侧重指,后续插入数据时,数据是存放在 Hive 上,当然该表也可以被 Hive 本身访问操作。
Hive Catalog 环境下 Flink SQL 创建的表如何判定该表是属于 Flink 的还是属于 Hive 的
- 方式一:Flink 自己识别你的建表语句符合 Hive 语法,判定该表属于 Hive,后续数据会往 Hive 中写。
- 方式二:with 中带 'connector'='hive' 参数。
- 方式三:这也是官方推荐的
It's recommended to use Hive dialect to execute DDLs to create Hive tables, views, partitions, functions within Flink.
创建属于 Hive 的表之前,将当前 Flink SQL 环境切换到 Hive 方言:
SET table.sql-dialect = hive; -- to use Hive dialect
SET table.sql-dialect = default; -- to use Flink default dialect
最后,判定 Flink SQL 创建的表是否属于 Flink 还是属于 Hive 等外部数据库的终极标识:dec 创建的表
- 如果 'is_generic' = 'true' ,属于 Flink
- 如果 'is_generic' = 'false' ,不属于 Flink