flink实战--数据写入clickhouse(自定义ClickHouseSink 与jdbc sink)

扫一扫加入大数据公众号和技术交流群,了解更多大数据技术,还有免费资料等你哦

简介

            Clickhouse 支持http协议的web方式进行访问,也支持JDBC或者ODBC的驱动程序的客户端进行访问,我们使用Flink操作Clickhouse,可以按照操作mysql一样的方式通过JDBC进行访问,本文将具体介绍flink实时写入Clickhouse的自定义sink实现方式和原生的jdbc sink,对于Flink自定义sink,参考上篇博客:flink实战--读写Hbase_阿华田的博客-CSDN博客_flink写数据到hbase

自定义ClickhouseSink实现的两种方式

第一种:标准形式
            标准形式是我们常用的jdbc方式,通过JDK原生接口获取连接,其关键参数如下:


JDBC Driver Class为ru.yandex.clickhouse.ClickHouseDriver;
JDBC URL为jdbc:clickhouse://<host>:<port>[/<database>]   

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
可以使用 FlinkJDBC Sink数据写入 ClickHouse 数据库。具体步骤如下: 1. 在 pom.xml 中添加 ClickHouse JDBC 驱动的依赖: ```xml <dependency> <groupId>ru.yandex.clickhouse</groupId> <artifactId>clickhouse-jdbc</artifactId> <version>0.3.0</version> </dependency> ``` 2. 在 Flink 程序中创建 ClickHouse JDBC Sink: ```java import java.sql.PreparedStatement; import java.sql.SQLException; import org.apache.flink.configuration.Configuration; import org.apache.flink.streaming.api.functions.sink.RichSinkFunction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.yandex.clickhouse.ClickHouseConnection; import ru.yandex.clickhouse.ClickHouseDataSource; public class ClickHouseSink extends RichSinkFunction<String> { private static final long serialVersionUID = 1L; private static final Logger LOG = LoggerFactory.getLogger(ClickHouseSink.class); private ClickHouseConnection connection; private PreparedStatement statement; @Override public void open(Configuration parameters) throws Exception { super.open(parameters); // 初始化 ClickHouse 连接 ClickHouseDataSource dataSource = new ClickHouseDataSource("jdbc:clickhouse://<clickhouse-host>:<clickhouse-port>/<clickhouse-database>"); connection = dataSource.getConnection(); statement = connection.prepareStatement("INSERT INTO <clickhouse-table> (col1, col2, ...) VALUES (?, ?, ...)"); } @Override public void invoke(String value, Context context) throws Exception { String[] fields = value.split(","); // 设置 PreparedStatement 的参数 statement.setString(1, fields[0]); statement.setInt(2, Integer.parseInt(fields[1])); ... // 执行插入操作 statement.executeUpdate(); } @Override public void close() throws Exception { super.close(); // 关闭 ClickHouse 连接 if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } } ``` 3. 在 Flink 程序中使用 ClickHouse JDBC Sink 输出数据: ```java DataStream<String> dataStream = ... // 获取数据流 dataStream.addSink(new ClickHouseSink()); ``` 其中 `<clickhouse-host>`、`<clickhouse-port>`、`<clickhouse-database>` 和 `<clickhouse-table>` 分别表示 ClickHouse 数据库的主机名、端口号、数据库名称和数据表名称。在执行插入操作时,需要根据实际情况设置 PreparedStatement 的参数。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿华田512

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值