供应链场景使用ClickHouse最佳实践

💡 原文中文,约5500字,阅读约需14分钟。
📝

内容提要

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中如何处理新增列的操作?

新增列时,本地表可直接修改,分布式表需根据数据写入情况分步骤进行修改。

🏷️

标签

➡️

继续阅读