目前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啥的肯定能存储吧),...)。 |
Hi,
FlinkSQL允许一个Session使用多个Catalog,所以Catalog的选择不是互斥的,可以混用。 关于你的两个问题: 1. 我理解JDBC Catalog主要是为了方便用户查询JDBC的表,目前的实现应该基本是个只读的Catalog [1],文档也许是可以说的更明确一些。 2. 我觉得要实现一个完整的、生产可用的元数据管理系统都不会太“简单”,能读写schema只是最基础的要求,是否支持并发访问、如何支持HA、如何保证元数据安全都是需要考虑的问题。而hive metastore已经有比较多的人在用了,所以借助它来持久化元数据是个性价比比较高的选择。 [1] https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/connectors/jdbc.html#postgres-database-as-a-catalog On Mon, Nov 23, 2020 at 7:41 PM 赵一旦 <[hidden email]> wrote: > 目前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啥的肯定能存储吧),...)。 > -- Best regards! Rui Li |
Hi Rui Li,
> FlinkSQL允许一个Session使用多个Catalog,所以Catalog的选择不是互斥的,可以混用。 一个job里面可以切换catalog的是吧,比如从读kafka中 写hive 的 db1.hive_table。 几个问题请教一下: 1.create kafka source 使用 memory catalog,hive table 使用hive catalog,这样是可以的吧 2.在sql里面切换catalog的语法是什么,在[1]里面没看到,是这样吗 USE CATALOG catalogName(default_catalog/hive_catalog) 3.在注册hivecatalog时,需要指定一个默认的database,比如指定了默认test,然后要写到db1的hive_table,是不是切换一下database即可。 USE db1; 感谢 [1]https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/catalogs.html > 2020年11月23日 下午8:52,Rui Li <[hidden email]> 写道: > > Hi, > > FlinkSQL允许一个Session使用多个Catalog,所以Catalog的选择不是互斥的,可以混用。 > > 关于你的两个问题: > 1. 我理解JDBC Catalog主要是为了方便用户查询JDBC的表,目前的实现应该基本是个只读的Catalog > [1],文档也许是可以说的更明确一些。 > 2. > 我觉得要实现一个完整的、生产可用的元数据管理系统都不会太“简单”,能读写schema只是最基础的要求,是否支持并发访问、如何支持HA、如何保证元数据安全都是需要考虑的问题。而hive > metastore已经有比较多的人在用了,所以借助它来持久化元数据是个性价比比较高的选择。 > > [1] > https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/connectors/jdbc.html#postgres-database-as-a-catalog > > On Mon, Nov 23, 2020 at 7:41 PM 赵一旦 <[hidden email]> wrote: > >> 目前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啥的肯定能存储吧),...)。 >> > > > -- > Best regards! > Rui Li |
Administrator
|
1. 可以的
2. 是的。见文档 https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/sql/use.html#use-catloag 3. 是的。 Hive metastore catalog 就是 Flink 官方提供的通用 catalog(可以存任何 connector 类型)。 Best, Jark On Tue, 24 Nov 2020 at 10:58, admin <[hidden email]> wrote: > Hi Rui Li, > > FlinkSQL允许一个Session使用多个Catalog,所以Catalog的选择不是互斥的,可以混用。 > > 一个job里面可以切换catalog的是吧,比如从读kafka中 写hive 的 db1.hive_table。 > 几个问题请教一下: > 1.create kafka source 使用 memory catalog,hive table 使用hive catalog,这样是可以的吧 > 2.在sql里面切换catalog的语法是什么,在[1]里面没看到,是这样吗 USE CATALOG > catalogName(default_catalog/hive_catalog) > > 3.在注册hivecatalog时,需要指定一个默认的database,比如指定了默认test,然后要写到db1的hive_table,是不是切换一下database即可。 > USE db1; > 感谢 > > [1] > https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/catalogs.html > > > 2020年11月23日 下午8:52,Rui Li <[hidden email]> 写道: > > > > Hi, > > > > FlinkSQL允许一个Session使用多个Catalog,所以Catalog的选择不是互斥的,可以混用。 > > > > 关于你的两个问题: > > 1. 我理解JDBC Catalog主要是为了方便用户查询JDBC的表,目前的实现应该基本是个只读的Catalog > > [1],文档也许是可以说的更明确一些。 > > 2. > > > 我觉得要实现一个完整的、生产可用的元数据管理系统都不会太“简单”,能读写schema只是最基础的要求,是否支持并发访问、如何支持HA、如何保证元数据安全都是需要考虑的问题。而hive > > metastore已经有比较多的人在用了,所以借助它来持久化元数据是个性价比比较高的选择。 > > > > [1] > > > https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/connectors/jdbc.html#postgres-database-as-a-catalog > > > > On Mon, Nov 23, 2020 at 7:41 PM 赵一旦 <[hidden email]> wrote: > > > >> 目前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啥的肯定能存储吧),...)。 > >> > > > > > > -- > > Best regards! > > Rui Li > > |
感谢jark大佬,试过了确实可以
我是先用hive的catalog+dialect 建了 hive表, 然后切换到default catalog 建了 kafka source表, 在insert into hive select from kafka时需要指定hive_catalog.hive_db.hive_table,否则会报表不存在,因为当前是在default catalog 下。大家注意一下 > 2020年11月24日 上午11:41,Jark Wu <[hidden email]> 写道: > > 1. 可以的 > 2. 是的。见文档 > https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/sql/use.html#use-catloag > 3. 是的。 > > Hive metastore catalog 就是 Flink 官方提供的通用 catalog(可以存任何 connector 类型)。 > > Best, > Jark > > > On Tue, 24 Nov 2020 at 10:58, admin <[hidden email]> wrote: > >> Hi Rui Li, >>> FlinkSQL允许一个Session使用多个Catalog,所以Catalog的选择不是互斥的,可以混用。 >> >> 一个job里面可以切换catalog的是吧,比如从读kafka中 写hive 的 db1.hive_table。 >> 几个问题请教一下: >> 1.create kafka source 使用 memory catalog,hive table 使用hive catalog,这样是可以的吧 >> 2.在sql里面切换catalog的语法是什么,在[1]里面没看到,是这样吗 USE CATALOG >> catalogName(default_catalog/hive_catalog) >> >> 3.在注册hivecatalog时,需要指定一个默认的database,比如指定了默认test,然后要写到db1的hive_table,是不是切换一下database即可。 >> USE db1; >> 感谢 >> >> [1] >> https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/catalogs.html >> >>> 2020年11月23日 下午8:52,Rui Li <[hidden email]> 写道: >>> >>> Hi, >>> >>> FlinkSQL允许一个Session使用多个Catalog,所以Catalog的选择不是互斥的,可以混用。 >>> >>> 关于你的两个问题: >>> 1. 我理解JDBC Catalog主要是为了方便用户查询JDBC的表,目前的实现应该基本是个只读的Catalog >>> [1],文档也许是可以说的更明确一些。 >>> 2. >>> >> 我觉得要实现一个完整的、生产可用的元数据管理系统都不会太“简单”,能读写schema只是最基础的要求,是否支持并发访问、如何支持HA、如何保证元数据安全都是需要考虑的问题。而hive >>> metastore已经有比较多的人在用了,所以借助它来持久化元数据是个性价比比较高的选择。 >>> >>> [1] >>> >> https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/connectors/jdbc.html#postgres-database-as-a-catalog >>> >>> On Mon, Nov 23, 2020 at 7:41 PM 赵一旦 <[hidden email]> wrote: >>> >>>> 目前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啥的肯定能存储吧),...)。 >>>> >>> >>> >>> -- >>> Best regards! >>> Rui Li >> >> |
Free forum by Nabble | Edit this page |