clickhouse建表优化
本地表创建样例:
CREATE TABLE database.table_branch ON CLUSTER 'CLUSTER ' ( timevalue DateTime COMMENT '时间', vprovince Nullable(String) COMMENT '省份', vcity Nullable(String) COMMENT '地市', msisdn String COMMENT '号码' rat Nullable(String) COMMENT '接入网', cell_id Nullable(String) COMMENT '小区', cell_name Nullable(String) COMMENT '小区名称', longitude Nullable(Float64) COMMENT '经度', latitude Nullable(Float64) COMMENT '纬度', prov_id String COMMENT '省份id', INDEX ix_longitude longitude TYPE minmax GRANULARITY 4, INDEX ix_latitude latitude TYPE minmax GRANULARITY 4, INDEX ix_cell_id cell_id TYPE minmax GRANULARITY 4 ) ENGINE = ReplicatedMergeTree('/aaaa/database/table_branch/{shard}/aaaa/database/table_branch', '{replica}')
PARTITION BY (toYYYYMMDD(timevalue), prov_id,vcity)
ORDER BY (cell_id,longitude, latitude,msisdn)
TTL timevalue + toIntervalYear(1) SETTINGS storage_policy = 'allData', allow_nullable_key = 1, index_granularity = 8192
分布式表创建语句
CREATE TABLE database.table ON CLUSTER 'CLUSTER ' ( timevalue DateTime COMMENT '时间', vprovince Nullable(String) COMMENT '省份', vcity Nullable(String) COMMENT '地市', msisdn String COMMENT '号码' rat Nullable(String) COMMENT '接入网', cell_id Nullable(String) COMMENT '小区', cell_name Nullable(String) COMMENT '小区名称', longitude Nullable(Float64) COMMENT '经度', latitude Nullable(Float64) COMMENT '纬度', prov_id String COMMENT '省份id' ) ENGINE = Distributed('CLUSTER ', 'database', 'table_branch ', rand())
建表关键字解释
ENGINE ck建表引擎在如果要最后查询的是分布式表那么引擎使用Distributed
PARTITION BY 一般使用时间作为分区 分区可用使用函数
ORDER BY 排序列
TTL 数据保留时间
allow_nullable_key =1 设置允许索引为空
index_granularity 设置索引疏密
实际操作中遇到问题:
(1). 重建表的时候 用ON CLUSTER 删掉了表但是重建报错
ck建表分为本地表和分布式表 clickhouse是去中心化的 内部通过Zookeper进行通信,所以在修改表的时候需要一段时间广播到其他节点,所有重建会报错,需要等待
(2).当修改了字段后重建表等待很久还是报错,并且查看其他节点发现表已经被删除
即使其他节点被广播到了之后,zk存放的信息还没改变,新的建表格式和原有的冲突所有还是会报错.
解决办法:修改ReplicatedMergeTree 中的路径将新的信息存放到另一个路径,即能快速建表,或者手动删除路径文件
优化参数:
1 | SETTINGS index_granularity = 8192, <br>use_minimalistic_part_header_in_zookeeper = 1,<br> merge_with_ttl_timeout = 3600, <br>min_bytes_for_wide_part = 100000000, <br>min_rows_for_wide_part = 400000, <br>min_bytes_for_compact_part = 1000000, <br>min_rows_for_compact_part = 10000, <br>in_memory_parts_enable_wal = 0,<br> write_ahead_log_max_bytes = 10000000, <br>allow_nullable_key = 1 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类