[大数据学习之ClickHouse]10-ClickHouse高级进阶之表级别优化

本篇文章主要聊一下CLK中的表级别优化操作

  1. 时间字段的类型
    CLK与HIVE两者虽然都是用天来进行分区规则,但是不同的点就是,HIVE的日期字段是STRING,CLK的官方建议是时间戳字段直接使用DATATIME或者是Long类型的(INT32)
    如果使用STRING也不是不可以,CLK底层也会将STRING给转化成LONG(INT32)去存储,或多或少会影响点性能
create table t_type2(
 id UInt32, 
 sku_id String, 
 total_amount Decimal(16,2) ,  
 create_time Int32
 ) 
 engine =ReplacingMergeTree(create_time) 
 partition by toYYYYMMDD(toDate(create_time)) 
 primary key (id) order by (id, sku_id);
 
 
 
 create table t_type2(
 id UInt32, 
 sku_id String, 
 total_amount Decimal(16,2) ,  
 create_time DataTime
 ) 
 engine =ReplacingMergeTree(create_time) 
 partition by toYYYYMMDD(create_time) 
 primary key (id) order by (id, sku_id);

  1. 空值

空值无论是在HIVE还是CLK中都是应该避免的,在CLK中,空值列无法被索引,并且空值还会在CLK的底层多一个小文件出来,除非特殊情况,空值都应该指定一个业务上不使用的默认值来避免这种情况的出现

官网说明:https://clickhouse.tech/docs/zh/sql-reference/data-types/nullable/

3 . 分区/索引
分区一般按天进行分区
CLK中必须指定索引列,索引列就是排序列,也就是ORDER BY中的字段
组合索引遵循查询频率大的在前的原则,基数特别大的(查询很频繁,数据量还很大)不建议作为索引列

4 . TTL
合理的使用针对表的TTL功能,可以很大程度上的减少磁盘存储空间

5 . 写入/删除操作
尽量避免小批量的删除和插入,会产生过多的小分区文件

不要一次写入过多个分区,最好针对一个分区进行操作

你可能感兴趣的:(BigData,big,data,学习,hive)