前言:公司使用flinksql纯查hive中的表做关联让我很疑惑。(彷佛是flinksql在查hive中的表,实际是hive作为元数据存储地,查询的数据是第三方)
原因发现经过:使用flinksql查询hive中的表做关联写入es,在创建sink表时,create table if not exists hive.sbo_rt_dm.table1。其中使用的是hivecatalog,将这个表table1的元数据写入到hive表中的sbo_rt_dm数据库中。
原因:
即,用hivecatalog存储第三方(比如es)的元数据,元数据存储在hive metarstore中,真正的数据存储在第三方(比如es)而不是hdfs。
则直接用hive查询这种表,会转发给flinksql去查询第三方(比如es),性能会有损耗,不如直接用flinksql查询。
flinksql使用hivecatalog的好处:
(1)统一进行分层管理,不同的数据源都将元数据存储在hive中,方便hive做分层管理
(2)使用flinksql查询的时候,使用hivecatalog,直接select * from hive.sbo_rt_dm.table1,而不用再去使用connecter连接第三方(比如es)去创建映射表。因为hivecatalog在这张表被写入时创建在了hivecatalog中,永久保存了。
数据流
写入:hivecatalog,connector
某个数据源-flinksql(使用hivecatalog)-connector-第三方表(数据真正存储的地方)
查询:hivecatalog----select * from hive.sbo_rt_dm.table1
flinksql(使用hivecatalog)-(直接查到第三方中的数据)