Clickhouse可以组合几种引擎达到幂等效果,ReplacingMergeTree + 物化视图 + 
AggregatingMergeTree(AggregateFunction:argMaxIf)


CREATETABLEIFNOTEXISTSdefault.local_dat_update (
pk1 UInt64 COMMENT '主键',
pk2 String COMMENT '主键',
ver DateTime64 COMMENT '版本,业务提供',
col1 Int32 DEFAULT0 COMMENT '选取!=0的最大版本',
col2 String DEFAULT'' COMMENT '选取!=空字符串的最大版本',
col3 DateTimeDEFAULT0 COMMENT '选取!=0的最大版本'
) ENGINE = ReplacingMergeTree()
PARTITIONBY (xxHash64(pk1, pk2) % 10)
ORDER BY (pk1,pk2);



CREATETABLEIFNOTEXISTSdefault.local_agg_update
(
pk1 UInt64,
pk2 String,
version AggregateFunction(max, DateTime64),
col1 AggregateFunction(argMaxIf, Int32, DateTime64, UInt8),
col2 AggregateFunction(argMaxIf, String, DateTime64, UInt8),
col3 AggregateFunction(argMaxIf, DateTime, DateTime64, UInt8)
) ENGINE = AggregatingMergeTree()
PARTITIONBY (xxHash64(pk1, pk2) % 10)
ORDER BY (pk1, pk2);


CREATE MATERIALIZED VIEW IFNOTEXISTSdefault.mv_update
TOdefault.local_agg_update
AS
SELECT pk1 AS pk1,
pk2 AS pk2,
maxState(ver) ASversion,
-- 根据业务需求调整组合函数及判断逻辑
argMaxIfState(col1, ver, col1 !=0) AS col1,
argMaxIfState(col2, ver, col2 !='') AS col2,
argMaxIfState(col3, ver, col3 !=0) AS col3
FROMdefault.local_dat_update
GROUP BY pk1, pk2;


| |
13051111332
|
|
[email protected]
|
签名由网易邮箱大师定制


在2021年05月8日 10:44,张锴<[email protected]> 写道:
clickhouse不支持事务及幂等写入,无法保证end to end 精准一次。

李一飞 <[email protected]> 于2021年5月7日周五 下午10:27写道:

请问   Flink写clickhouse怎么实现精准一次性,有啥好办法呀

回复