更新时间:2024-11-29 GMT+08:00
Upsert数据写入
本章节主要介绍ClickHouse数据写入时数据去重写入功能的SQL基本语法和使用说明。
基本语法
使用示例
- 建表样例:
CREATE TABLE default.upsert_tab ON CLUSTER default_cluster ( `id` Int32, `pdate` Date, `name` String )ENGINE = ReplicatedMergeTree('/clickhouse/tables/default/{shard}/upsert_tab', '{replica}') PARTITION BY toYYYYMM(pdate) PRIMARY KEY id ORDER BY id SETTINGS index_granularity = 8192;
- Upsert数据去重写入:
Upsert into upsert_tab(id, pdate, name) values (1, rand() % 365, 'abc'), (2, rand() % 365, 'bcd'), (1, rand() % 365, 'def');
- 查询test_upsert表数据
select * from upsert_tab; ┌─id─┬───pdate─┬─name─┐ │ 2 │ 1970-06-09│ bcd │ │ 1 │ 1970-11-30│ def │ └───┴── ────┴────┘
- Upsert支持事务
注意事项
- MergeTree和ReplicatedMergeTree建表要指定primary key或order by字段作为去重唯一键。如果未指定主键,只指定了order by建表属性,去重键以order by字段为准。
- 数据去重的key需要提前在应用中进行sharding计算,保证相同的key会sharding到同一个shard,才能保证后续相同的key字段数据sharding到同一个shard进行数据的精确去重。
父主题: ClickHouse常用SQL语法