Flink Jdbc sink写入多表如何实现

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

Flink Jdbc sink写入多表如何实现

张健
hi,


我现在有个需求是一个source进来,然后根据数据里的字段 分发写入 clickhouse多张表中(比如用户行为事件,上报进来有多种,不同的事件写入不同的表中),我想用Flink的Jdbc sink来做,但看接口貌似不能直接实现这样的功能。


这个是要自定义一个sink来做嘛?有没有什么简单的实现方式?







--

张健
Reply | Threaded
Open this post in threaded view
|

Re:Flink Jdbc sink写入多表如何实现

Shubin Ruan
Hi,张健:


    感觉可以根据数据里的字段定义不同的侧输出,然后将各个侧输出通过 jdbc sink 到对应表中。


Best,
Shubin Ruan




在 2020-10-30 16:10:33,"张健" <[hidden email]> 写道:

>hi,
>
>
>我现在有个需求是一个source进来,然后根据数据里的字段 分发写入 clickhouse多张表中(比如用户行为事件,上报进来有多种,不同的事件写入不同的表中),我想用Flink的Jdbc sink来做,但看接口貌似不能直接实现这样的功能。
>
>
>这个是要自定义一个sink来做嘛?有没有什么简单的实现方式?
>
>
>
>
>
>
>
>--
>
>张健
Reply | Threaded
Open this post in threaded view
|

Re:Re:Flink Jdbc sink写入多表如何实现

张健
hi, Shubin Ruan


如果字段是可枚举的,应该是可以用这种模式写入的。


DataStream<> input = ...;
input.filter(...).addSink(sink1);
input.filter(...).addSink(sink2);
input.filter(...).addSink(sink3);




但这种一个是感觉不太灵活,当上报数据增加类型就要改代码。另一个是如果这个值枚举比较多,这样写起来也挺烦的。







--

张健





在 2020-10-30 17:19:56,"Shubin Ruan" <[hidden email]> 写道:

>Hi,张健:
>
>
>    感觉可以根据数据里的字段定义不同的侧输出,然后将各个侧输出通过 jdbc sink 到对应表中。
>
>
>Best,
>Shubin Ruan
>
>
>
>
>在 2020-10-30 16:10:33,"张健" <[hidden email]> 写道:
>>hi,
>>
>>
>>我现在有个需求是一个source进来,然后根据数据里的字段 分发写入 clickhouse多张表中(比如用户行为事件,上报进来有多种,不同的事件写入不同的表中),我想用Flink的Jdbc sink来做,但看接口貌似不能直接实现这样的功能。
>>
>>
>>这个是要自定义一个sink来做嘛?有没有什么简单的实现方式?
>>
>>
>>
>>
>>
>>
>>
>>--
>>
>>张健
Reply | Threaded
Open this post in threaded view
|

Re:Flink Jdbc sink写入多表如何实现

hailongwang
In reply to this post by 张健
Hi,
    目前JDBC sink 不支持分库分表,只能自己实现一个 Sink。具体实现的话,即使 insert Statement 需要在 writeRecord 阶段根据你的数据的 key 进行生成。
其中还需要将 key 和 statement 的对应关系缓存起来。
    之前我内部的版本也支持了这个需求,因为后来在 DB 层面支持分库分表,所以在升级版本时候去掉了。(个人觉得这个是不是 DB 层面应该支持的?)


Best,
Hailong  Wang

在 2020-10-30 15:10:33,"张健" <[hidden email]> 写道:

>hi,
>
>
>我现在有个需求是一个source进来,然后根据数据里的字段 分发写入 clickhouse多张表中(比如用户行为事件,上报进来有多种,不同的事件写入不同的表中),我想用Flink的Jdbc sink来做,但看接口貌似不能直接实现这样的功能。
>
>
>这个是要自定义一个sink来做嘛?有没有什么简单的实现方式?
>
>
>
>
>
>
>
>--
>
>张健
Reply | Threaded
Open this post in threaded view
|

答复: Re:Flink Jdbc sink写入多表如何实现

范超
我这边自己的做法是,根据不同的行为时间,将source拆流,然后一个事件对应一个sink
Sink的逻辑处理都是一致的,只不过配置的表不同。

-----邮件原件-----
发件人: hailongwang [mailto:[hidden email]]
发送时间: 2020年11月3日 星期二 0:21
收件人: [hidden email]
主题: Re:Flink Jdbc sink写入多表如何实现

Hi,
    目前JDBC sink 不支持分库分表,只能自己实现一个 Sink。具体实现的话,即使 insert Statement 需要在 writeRecord 阶段根据你的数据的 key 进行生成。
其中还需要将 key 和 statement 的对应关系缓存起来。
    之前我内部的版本也支持了这个需求,因为后来在 DB 层面支持分库分表,所以在升级版本时候去掉了。(个人觉得这个是不是 DB 层面应该支持的?)


Best,
Hailong  Wang

在 2020-10-30 15:10:33,"张健" <[hidden email]> 写道:

>hi,
>
>
>我现在有个需求是一个source进来,然后根据数据里的字段 分发写入 clickhouse多张表中(比如用户行为事件,上报进来有多种,不同的事件写入不同的表中),我想用Flink的Jdbc sink来做,但看接口貌似不能直接实现这样的功能。
>
>
>这个是要自定义一个sink来做嘛?有没有什么简单的实现方式?
>
>
>
>
>
>
>
>--
>
>张健
Reply | Threaded
Open this post in threaded view
|

Re:答复: Re:Flink Jdbc sink写入多表如何实现

Michael Ran
通过key 分成不同 view ,然后不同的view 写不同的表可以吧
在 2021-01-19 17:59:54,"范超" <[hidden email]> 写道:

>我这边自己的做法是,根据不同的行为时间,将source拆流,然后一个事件对应一个sink
>Sink的逻辑处理都是一致的,只不过配置的表不同。
>
>-----邮件原件-----
>发件人: hailongwang [mailto:[hidden email]]
>发送时间: 2020年11月3日 星期二 0:21
>收件人: [hidden email]
>主题: Re:Flink Jdbc sink写入多表如何实现
>
>Hi,
>    目前JDBC sink 不支持分库分表,只能自己实现一个 Sink。具体实现的话,即使 insert Statement 需要在 writeRecord 阶段根据你的数据的 key 进行生成。
>其中还需要将 key 和 statement 的对应关系缓存起来。
>    之前我内部的版本也支持了这个需求,因为后来在 DB 层面支持分库分表,所以在升级版本时候去掉了。(个人觉得这个是不是 DB 层面应该支持的?)
>
>
>Best,
>Hailong  Wang
>
>在 2020-10-30 15:10:33,"张健" <[hidden email]> 写道:
>>hi,
>>
>>
>>我现在有个需求是一个source进来,然后根据数据里的字段 分发写入 clickhouse多张表中(比如用户行为事件,上报进来有多种,不同的事件写入不同的表中),我想用Flink的Jdbc sink来做,但看接口貌似不能直接实现这样的功能。
>>
>>
>>这个是要自定义一个sink来做嘛?有没有什么简单的实现方式?
>>
>>
>>
>>
>>
>>
>>
>>--
>>
>>张健