供应链场景使用ClickHouse最佳实践
内容提要
ClickHouse是供应链数字化团队使用的实时数据存储工具,具有命名约定和建表约定。数据写入约定建议使用JDQ队列进行解耦和共享。DTS任务命名规则为' sc_digital_${集群ID}_${分布式表名}'。数据查询约定包括使用prewhere替代where、尽量包含分区键和主键索引前缀字段、避免使用Select *、where和group by顺序统一、避免使用JOIN、使用final去重和二级索引的使用注意事项。
关键要点
-
ClickHouse是供应链数字化团队使用的实时数据存储工具,具有命名约定和建表约定。
-
数据写入约定建议使用JDQ队列进行解耦和共享。
-
DTS任务命名规则为'sc_digital_${集群ID}_${分布式表名}'。
-
数据查询约定包括使用prewhere替代where,尽量包含分区键和主键索引前缀字段。
-
避免使用Select *,where和group by顺序统一,避免使用JOIN。
-
使用final去重和二级索引的使用注意事项。
-
表命名要求:本地表命名必须_local结尾,分布式表命名必须以_all结尾。
-
分区键设置视情况而定,大表按天分区,小表按月分区,避免使用string类型的分区键。
-
分片键需要采用hash函数,避免数据热点,集中写入某个分片。
-
字段类型能用数字型的字段尽量用数字型,避免使用string。
-
新增列操作方式需区分不同情况进行操作。
-
DTS任务批次写入默认值为'40W/1分钟',建议每次插入50W行左右数据。
-
尽量使用prewhere替代where以提升查询性能。
-
避免使用SELECT *,应当对列进行裁剪,只选择需要的列。
-
where和group by中的列顺序要与建表语句中order by的列顺序统一。
-
使用final去重查询,尽量不要用argMax。
-
可变值字段不能添加二级索引,增加二级索引只对后续新增数据生效。
延伸问答
ClickHouse在供应链数字化中有什么应用?
ClickHouse用于存储实时数据,帮助供应链数字化团队进行数据管理和分析。
如何命名ClickHouse的DTS任务?
DTS任务命名规则为'sc_digital_${集群ID}_${分布式表名}'。
在ClickHouse中,如何优化数据查询性能?
建议使用prewhere替代where,避免使用SELECT *,并确保where和group by的列顺序与建表语句一致。
ClickHouse的表命名约定是什么?
本地表命名必须以_local结尾,分布式表命名必须以_all结尾。
在ClickHouse中,如何设置分区键?
大表建议按天分区,小表按月分区,分区键应使用date和datetime字段,避免使用string类型。
ClickHouse中如何处理新增列的操作?
新增列时,本地表可直接修改,分布式表需根据数据写入情况分步骤进行修改。