关于Catalog的建议

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

关于Catalog的建议

nobleyd
目前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啥的肯定能存储吧),...)。
Reply | Threaded
Open this post in threaded view
|

Re: 关于Catalog的建议

Rui Li
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
Reply | Threaded
Open this post in threaded view
|

Re: 关于Catalog的建议

admin
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

Reply | Threaded
Open this post in threaded view
|

Re: 关于Catalog的建议

Jark
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
>
>
Reply | Threaded
Open this post in threaded view
|

Re: 关于Catalog的建议

admin
感谢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
>>
>>