更新时间: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语法