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字段作为唯⼀键

去重不能跨分区

只有同⼀批插⼊(新版本)或合并分区时才会进⾏去重