64.【clickhouse】ClickHouse从入门到放弃-二级索引

简介: 【clickhouse】ClickHouse从入门到放弃-二级索引

前文如下:

11.【clickhouse】ClickHouse从入门到放弃-概述

12.【clickhouse】ClickHouse从入门到放弃-环境搭建

13.【clickhouse】ClickHouse从入门到放弃-引擎

14.【clickhouse】ClickHouse从入门到放弃-实战

55.【clickhouse】ClickHouse从入门到放弃-概念场景

56.【clickhouse】ClickHouse从入门到放弃-架构概述

57.【clickhouse】ClickHouse从入门到放弃-update和delete的使用

58.【clickhouse】ClickHouse从入门到放弃-数据类型转换

59.【clickhouse】ClickHouse从入门到放弃-分区表

60.【clickhouse】ClickHouse从入门到放弃-MergeTree的创建方式

61.【clickhouse】ClickHouse从入门到放弃-MergeTree的存储结构

62.【clickhouse】ClickHouse从入门到放弃-数据分区

63.【clickhouse】ClickHouse从入门到放弃-一级索引

文档参考:《ClickHouse原理解析与应用实践(数据库技术丛书)(朱凯)》


1.二级索引

除了一级索引之外,MergeTree同样支持二级索引。二级索引又称跳数索引,由数据的聚合信息构建而成。根据索引类型的不同,其聚合信息的内容也不同。跳数索引的目的与一级索引一样,也是帮助查询时减少数据扫描的范围。

跳数索引在默认情况下是关闭的,需要设置allow_experimental_data_skipping_indices(该参数在新版本中已被取消)才能使用:

SET allow_experimental_data_skipping_indices = 1

网络异常,图片无法展示
|

1.1 granularity与index_granularity的关系

不同的跳数索引之间,除了它们自身独有的参数之外,还都共同拥有granularity参数。初次接触时,很容易将granularity与index_granularity的概念弄混淆。对于跳数索引而言,index_granularity定义了数据的粒度,而granularity定义了聚合信息汇总的粒度。换言之,granularity定义了一行跳数索引能够跳过多少个index_granularity区间的数据。

要解释清楚granularity的作用,就要从跳数索引的数据生成规则说起,其规则大致是这样的:首先,按照index_granularity粒度间隔将数据划分成n段,总共有[0,n-1]个区间(n=total_rows/index_granularity,向上取整)。接着,根据索引定义时声明的表达式,从0区间开始,依次按index_granularity粒度从数据中获取聚合信息,每次向前移动1步(n+1),聚合信息逐步累加。最后,当移动granularity次区间时,则汇总并生成一行跳数索引数据。

以minmax索引为例,它的聚合信息是在一个index_granularity区间内数据的最小和最大极值。以下图为例,假设index_granularity=8192且granularity=3,则数据会按照index_granularity划分为n等份,MergeTree从第0段分区开始,依次获取聚合信息。当获取到第3个分区时(granularity=3),则汇总并会生成第一行minmax索引(前3段minmax极值汇总后取值为[1,9]),

1.2 跳数索引的类型

目前,MergeTree共支持4种跳数索引,分别是minmax、set、ngrambf_v1和tokenbf_v1。一张数据表支持同时声明多个跳数索引,例如:

CREATE TABLE skip_test (
    ID String,
    URL String,
    Code String,
    EventTime Date,
    INDEX a ID TYPE minmax GRANULARITY 5,
    INDEX b(length(ID) * 8) TYPE set(2) GRANULARITY 5,
    INDEX c(ID,Code) TYPE ngrambf_v1(3, 256, 2, 0) GRANULARITY 5,
    INDEX d ID TYPE tokenbf_v1(256, 2, 0) GRANULARITY 5
) ENGINE = MergeTree()
省略...

接下来,就借助上面的例子逐个介绍这几种跳数索引的用法:

(1)minmax:minmax索引记录了一段数据内的最小和最大极值,其索引的作用类似分区目录的minmax索引,能够快速跳过无用的数据区间,示例如下所示:

INDEX a ID TYPE minmax GRANULARITY 5

上述示例中minmax索引会记录这段数据区间内ID字段的极值。极值的计算涉及每5个index_granularity区间中的数据。

(2)set:set索引直接记录了声明字段或表达式的取值(唯一值,无重复),其完整形式为set(max_rows),其中max_rows是一个阈值,表示在一个index_granularity内,索引最多记录的数据行数。如果max_rows=0,则表示无限制,例如:

INDEX b(length(ID) * 8) TYPE set(100) GRANULARITY 5

上述示例中set索引会记录数据中ID的长度*8后的取值。其中,每个index_granularity内最多记录100条。

(3)ngrambf_v1:ngrambf_v1索引记录的是数据短语的布隆表过滤器,只支持String和FixedString数据类型。ngrambf_v1只能够提升in、notIn、like、equals和notEquals查询的性能,其完整形式为ngrambf_v1(n,size_of_bloom_filter_in_bytes,number_of_hash_functions,random_seed)。这些参数是一个布隆过滤器的标准输入,如果你接触过布隆过滤器,应该会对此十分熟悉。它们具体的含义如下:

·n:token长度,依据n的长度将数据切割为token短语。

·size_of_bloom_filter_in_bytes:布隆过滤器的大小。

·number_of_hash_functions:布隆过滤器中使用Hash函数的个数。

·random_seed:Hash函数的随机种子。

例如在下面的例子中,ngrambf_v1索引会依照3的粒度将数据切割成短语token,token会经过2个Hash函数映射后再被写入,布隆过滤器大小为256字节。

INDEX c(ID,Code) TYPE ngrambf_v1(3, 256, 2, 0) GRANULARITY 5

(4)tokenbf_v1:tokenbf_v1索引是ngrambf_v1的变种,同样也是一种布隆过滤器索引。tokenbf_v1除了短语token的处理方法外,其他与ngrambf_v1是完全一样的。tokenbf_v1会自动按照非字符的、数字的字符串分割token,具体用法如下所示:

INDEX d ID TYPE tokenbf_v1(256, 2, 0) GRANULARITY 5


相关文章
|
存储 SQL 大数据
大数据技术之ClickHouse---入门篇---介绍
大数据技术之ClickHouse---入门篇---介绍
|
安全 大数据 Linux
大数据技术之Clickhouse---入门篇---安装
大数据技术之Clickhouse---入门篇---安装
|
存储 SQL 大数据
大数据技术之Clickhouse---入门篇---数据类型、表引擎
大数据技术之Clickhouse---入门篇---数据类型、表引擎
|
2月前
|
存储 SQL Docker
ClickHouse入门指南:快速搭建与使用
【10月更文挑战第26天】在大数据时代,如何高效地处理海量数据成为了许多企业和开发者的关注点。ClickHouse 是一个开源的列式数据库管理系统(Column-Oriented DBMS),以其出色的查询性能和高并发能力,在数据分析领域迅速崛起。本文将从一个初学者的角度出发,详细介绍如何快速上手 ClickHouse,涵盖从环境搭建到基础操作的全过程。
99 3
|
3月前
|
存储 算法 NoSQL
大数据-138 - ClickHouse 集群 表引擎详解3 - MergeTree 存储结构 数据标记 分区 索引 标记 压缩协同
大数据-138 - ClickHouse 集群 表引擎详解3 - MergeTree 存储结构 数据标记 分区 索引 标记 压缩协同
49 0
|
3月前
|
存储 消息中间件 分布式计算
大数据-137 - ClickHouse 集群 表引擎详解2 - MergeTree 存储结构 一级索引 跳数索引
大数据-137 - ClickHouse 集群 表引擎详解2 - MergeTree 存储结构 一级索引 跳数索引
51 0
|
SQL 缓存 大数据
大数据技术之Clickhouse---入门篇---SQL操作、副本
大数据技术之Clickhouse---入门篇---SQL操作、副本
|
存储 索引
67.【clickhouse】ClickHouse从入门到放弃-对于分区、索引、标记和压缩数据的协同总结
【clickhouse】ClickHouse从入门到放弃-对于分区、索引、标记和压缩数据的协同总结
67.【clickhouse】ClickHouse从入门到放弃-对于分区、索引、标记和压缩数据的协同总结
|
存储 缓存 数据库
66.【clickhouse】ClickHouse从入门到放弃-数据标记
【clickhouse】ClickHouse从入门到放弃-数据标记
66.【clickhouse】ClickHouse从入门到放弃-数据标记
|
存储 算法 NoSQL
65.【clickhouse】ClickHouse从入门到放弃-数据存储
【clickhouse】ClickHouse从入门到放弃-数据存储
65.【clickhouse】ClickHouse从入门到放弃-数据存储