供应链场景使用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。
  • 可变值字段不能添加二级索引,增加二级索引只对后续新增数据生效。
➡️

继续阅读