ClickHouse 是分布式实时分析型列式数据库服务,查询效率数倍于传统数据仓库,适用于海量数据的实时查询分析。
Notice:
- 操作语句需要加上ON CLUSTER default!!
- 建表时能用数值型或日期时间型表示的字段,就不要用字符串;
- partition粒度根据业务特点决定,不宜过粗或过细。一般选择按天分区
- 必须指定索引列,通过order by指定,一般在查询条件中经常被用来充当筛选条件的属性被纳入进来;可以是单一维度,也可以是组合维度的索引;通常需要满足高基列在前、查询频率大的在前原则;还有基数特别大的不适合做索引列,如用户表的userid字段;通常筛选后的数据满足在百万以内为最佳
e.g
CREATE TABLE ABC.abc ON CLUSTER default ( XXXXXXX ) ENGINE = MergeTree() PARTITION BY (dayno,page_id,is_ad) ORDER BY (in_ods,is_join,nature_src_key,ad_src_key,process_query,xxHash32(imei)) SAMPLE BY xxHash32(imei)
生成dataframe,保存为parquet文件
- 不要存空值:clickhouse中存储Nullable列时需要创建一个额外的文件来存储NULL的标记,影响性能,所以在这一步可以进行空值填充,或者使用字段默认值为空
- 如果表过大查询速度慢,可以在这一步进行采样
reference
- clickhouse docs:https://clickhouse.com/docs/en/
- 优化:clickhouse优化最佳实践(易企秀) - 简书