2023年11月26日发(作者:)
ClickHouse基础_表引擎
clickhouse
⼀、表引擎使⽤
表引擎是Clickhouse的⼀⼤特⾊,可以说,表引擎决定了如何存储表的数据。
包括:
数据的存储⽅式和位置,写到哪⾥以及从哪⾥读取数据
partition by 分区
order by 排序
engine 指定搜索引擎
┌──id─┬─sku_id──┬─total_count─┬─────────create_time─┐
│ 101 │ sku_001 │ 1000 │ 2020-06-01 12:00:00 │
│ 101 │ sku_001 │ 1800 │ 2020-06-01 12:00:00 │
│ 102 │ sku_003 │ 2300 │ 2020-06-01 12:00:00 │
└─────┴─────────┴─────────────┴─────────────────────┘
┌──id─┬─sku_id──┬─total_count─┬─────────create_time─┐
│ 101 │ sku_001 │ 1000 │ 2020-06-01 12:00:00 │
│ 101 │ sku_001 │ 1000 │ 2020-06-01 12:00:00 │
└─────┴─────────┴─────────────┴─────────────────────┘
┌──id─┬─sku_id──┬─total_count─┬─────────create_time─┐
│ 102 │ sku_002 │ 2000 │ 2020-06-02 12:00:00 │
│ 103 │ sku_001 │ 2500 │ 2020-06-02 12:00:00 │
关于合并操作,系统通常会在某⼀时刻进⾏合并操作(10~15分钟)
也可以⼿动触发
optimize table xxx final;
这是合并所有 同⼀个分区键的数据,我们也可以合并指定分区键的数据。
optimize table xxx partition 键名 final;
当我们进⾏合并
optimize table t_order_mt final;
查看⽂件⽬录后发现
这⾥ 1_1_0 和 3_3_0 合并为 1_3_1
含义是:最⼩分区编号合并次数
最⼤分区编号
整型分区键:直接⽤该整型值的字符串形式作为分区ID
⽇期类型分区键:分区键为⽇期类型。如果是 ⽇期形式的字符串 会⾃动转为⽇期类型
直接使⽤⽇期类型 效率更⾼
其他类型分区键:String、Float等,通过Hash算法 取其Hash值作为分区ID
primary key主键(可选)
主键没有唯⼀约束,只提供数据的⼀级索引,并且这个索引是稀疏索引(避免存储重复数据,以及全表扫描)
关于稀疏索引,有⼀个磨⼈的 索引粒度 index granularity 指在稀疏索引中两个相邻索引对应数据的间隔。
Clickhouse中MergeTree默认是8192,如果重复数据远⼤于8192可以相应调⼤。
order by(必选)
order by 设定了分区内的数据按照哪些字段顺序进⾏有序保存
去重范围:
分区内进⾏合并去重
结论:
实际上是使⽤order by字段作为唯⼀键
去重不能跨分区
只有同⼀批插⼊(新版本)或合并分区时才会进⾏去重


发布评论