doris--Aggregate、UNIQUE、Duplicate、索引

数据表模型

Doris 的数据模型主要分为3类:
- Aggregate  聚合模型
- Unique       唯一模型
- Duplicate    明细模型

Aggregate 模型

AggregationType 目前有以下五种聚合方式: 
- SUM:求和,多行的 Value 进行累加。
- REPLACE:替代,下一批数据中的 Value 会替换之前导入过的行中的 Value。 
- REPLACE_IF_NOT_NULL :当遇到 null 值则不更新。 
- MAX:保留最大值。 
- MIN:保留最小值。

数据的聚合,在 Doris 中有如下三个阶段发生:
1. 每一批次数据导入的 ETL 阶段。该阶段会在每一批次导入的数据内部进行聚合。
2. 底层 BE 进行数据 Compaction 的阶段。BE 会对已导入的不同批次的数据进行进一步的聚合。
3. 数据查询阶段。在数据查询时,对于查询涉及到的数据,会进行对应的聚合。

UNIQUE 模型

该模型本质上是聚合模型的一个特例,是相同key的数据进行自动去重的表模型。
Uniq 模型完全可以用聚合模型中的 REPLACE 方式替代。其内部的实现方式和数据存储方式也完全一样。

Duplicate 模型

就是存明细数据的表模型,既不做聚合也不做去重。
DUPLICATE KEY,只是用来指明底层数据按照那些列进行排序。 

数据模型的选择

- Aggregate 模型可以通过预聚合,极大地降低聚合查询时所需扫描的数据量和查询的计算量,非常适合有固定模式的报表类查询场景。
- Uniq 模型针对需要唯一主键约束的场景,可以保证主键唯一性约束。但是无法利用 ROLLUP 等预聚合带来的查询优势(因为本质是 REPLACE,没有 SUM 这种聚合方式)。 
- Duplicate 适合任意维度的查询。虽然同样无法利用预聚合的特性,但是不受聚合模型的约束,可以发挥列存模型的优势(只读取相关列,而不需要读取所有 Key 列)

索引

目前 Doris 主要支持两类索引:
- 内建的智能索引:包括前缀索引和 ZoneMap 索引。
- 用户创建的二级索引:包括 Bloom Filter 索引 和 Bitmap倒排索引。

前缀索引

doris中,对于前缀索引有如下约束:
1. 他的索引键最大长度是36个字节
2. 当他遇到了varchar数据类型的时候,即使没有超过36个字节,也会自动截断

Bloom Filter 索引

1. Bloom Filter 本质上是一种位图结构,用于判断一个值是否存在
2. 会产生小概率的误判,因为hash算法天生的碰撞
3. 在doris中是以tablet为粒度创建的,给每一个tablet创建一个布隆过滤器索引

如何创建BloomFilter索引?

  • 建表的时候指定
 PROPERTIES (
"bloom_filter_columns"="name,age,uid"
)
  • alter修改表的时候指定
ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = "k1,k3");

ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = "k1,k4");

ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = "");

修改/删除BloomFilter索引

ALTER TABLE sale_detail_bloom SET ("bloom_filter_columns" = "customer_id,saler_id");

Doris BloomFilter适用场景

1. BloomFilter是在无法利用前缀索引的查询场景中,来加快查询速度的。 
2. 查询会根据该列高频过滤,而且查询条件大多是 in 和 = 过滤。
3. 不同于Bitmap, BloomFilter适用于高基数列。比如UserID。因为如果创建在低基数的列上,比如 “性别” 列,则每个Block几乎都会包含所有取值,导致BloomFilter索引失去意义。字段随机

Bitmap 索引

创建索引

在table1 上为siteid 创建bitmap 索引

CREATE INDEX [IF NOT EXISTS] index_name ON table1 (siteid) USING BITMAP COMMENT 'balabala';

create index 索引名称  on 表名(给什么字段创建bitmap索引) using bitmap COMMENT 'balabala'create index user_id_bitmap on sale_detail_bloom(sku_id) USING BITMAP COMMENT '使用user_id创建的bitmap索引';

查看索引

SHOW INDEX FROM example_db.table_name;

删除索引

DROP INDEX [IF EXISTS] index_name ON [db_name.]table_name;
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值