flink实战 -- 数据写入clickhouse(ClickHouseSink)

本文详细介绍了如何使用Flink JDBC Connector将数据写入ClickHouse,探讨了遇到的不支持Dialect、删除流处理等问题,并提出了最终解决方案,包括自定义ClickHouseDialect和忽略删除流的方法。
摘要由CSDN通过智能技术生成

简介

本文主要介绍如何通过Flink JDBC Connector将数据写入ClickHouse以及直接使用Flink JDBC Connector操作ClickHouse存在什么样的问题。

Flink JDBC Connector的使用

  • 通过JDBCUpsertTableSink.Builder创建一个JDBCUpsertTableSink对象,JDBCUpsertTableSink需要的参数:
private JDBCUpsertTableSink(
		TableSchema schema,
		JDBCOptions options,
		int flushMaxSize,
		long flushIntervalMills,
		int maxRetryTime)
  • 创建TableSchema对象:
TableSchema schema = TableSchema
.builder()
.fields(
	fieldName,
	TypeConversions.fromLegacyInfoToDataType(fieldType)
).build();
  • 创建JDBCOptions对象
JDBCOptions.builder
      .setTableName(tablename)
      .setDBUrl(dbUrl)
      .setDriverName(driverName)
      .setDialect(clickHouseDialect)
      .setUsername(username)
      .setPassword(passdword)
      .build
// ----
private JDBCOptions(
	String dbURL, 
	String tableName, 
	String driverName, 
	String username,
	String password, 
	JDBCDialect dialect // 数据库的方言
)

进入到JDBCDialect这个类中发现源码中并不支持clickHouse Dialect

public final class JDBCDialects {
   

	private static final List<JDBCDialect> DIALECTS = Arrays.asList(
		new DerbyDialect(),
		new MySQLDialect(),
		new PostgresDialect()
	);
	.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值