目前Flink提供memory、jdbc、hive这3种catalog。 感觉实际使用中,可以使用如下几种方案。 (1)选择memory catalog,然后每次sql都带上自己的相关DDL。 (2)选择某种catalog,支持“持久化”DDL定义,然后具体sql就不需要带上自己相关的DDL了。
方案1和方案2各有优缺点。
方案1的优点: 比如sql1和sql2都只针kafka topic的部分时间段范围,这种情况某个kafka topic就不方便写死DDL(持久化),而应该每个SQL自带一个定义。(当然,使用方案2也是可以基于options的覆盖方式简化sql1和sql2自带DDL定义的语句的) 方案1的缺点: 很明显,不支持“持久化”本身就是缺点,这也是方案2的优点。
-----然后,我的问题来了。 在Flink文档中,HiveCatalog写了其作用是作为flink表元数据,同时也是作为读取hive表元数据的接口。而在JdbcCatalog中没写其支持的表类型(Connect类型)。 问题1(如上)没针对每个catalog写清楚其支持的connector类型,即表类型。 问题2:能否提供一个更简单方便的支持持久化,且支持所有connector类型的catalog的实现。“简单”指的是比如通过Mysql/PostgreSQL什么的,再或者直接json文件作为存储都可以。“持久化”即可以持久化。
当然,考虑到hive这种元数据使用其他存储可能需要额外复杂的转化,我感觉至少应该搞个相对通用的catalog,比如支持(mysql表,kafka表(kafka元数据很简单,用mysql啥的肯定能存储吧),...)。*来自志愿者整理的flink邮件归档
FlinkSQL允许一个Session使用多个Catalog,所以Catalog的选择不是互斥的,可以混用。
关于你的两个问题:
[1] https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/connectors/jdbc.html#postgres-database-as-a-catalog
*来自志愿者整理的flink邮件归档
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。