Doris数据模型

首先要知道,在Doris中,数据以表table的形式进行逻辑上的描述,一张表有若干row、column,row代表一行数据,column代表不同字段。

而column分为两类,key column和value column,分别对应维度指标,然后在Doris中,有数据模型的概念,分别为aggregate、unique、duplicate三种数据模型,而这三种都有自己指定的键列(aggregate key、unique key、duplicate key),被标记的就是key column,剩下未被标记的就是value column了。

Aggregate聚合模型

当有数据聚合需求时使用该模型,它分两部分,为上文说的key,value,按aggregate type进行划分,有aggregate type的就是value,无则为key,而aggregate type有replace、min、max、sum、replace_if_not_null、hll_union、bitmap_union六种,还有agg_state。

因为按批次并行计算,所以其聚合模型的聚合数据是批间有序,批内无序的。故要小心replace列的数据是否适合。

其中数据的聚合会发生在三个阶段:

  1. 每一批数据导入的ETL阶段,在批内进行数据聚合

  2. 底层be进行数据compaction阶段时,会对已导入的不同批次进行进一步的聚合

  3. 数据查询阶段时,对查询到的数据做进一步的聚合

这样问题来了,数据在不同时间、不同节点上,聚合程度可能不一样,但最终结果应是相同的,所以Doris在查询引擎中加入了预聚合算子来保证数据的一致性,不过这种保证会带来查询性能的下降。例如count(*) (需要统计多列得出结果),可以增加一列aggregate type为replace,default为1的cnt列进行count统计

Unique主键模型

当有数据更新需求时使用unique主键模型,它确保了主键唯一性,更新时,同key的新数据覆盖旧数据

有两种实现方式,写时合并读时合并

写时合并(merge-on-write) :在1.2版本引入、2.0版本成熟、2.1版本置为默认实现,它为每次导入的rowset增加了对应的delete bitmap,来标记哪些数据被覆盖,当当批数据导入完成之后,上一批数据中重复行被标记为false,在查询中被过滤

读时合并(merge-on-read):与Aggregate聚合模型key,aggregate type全为replace聚合模型实现方式一样,在数据读入阶段不进行任何数据去重操作,在compaction、数据查询阶段中进行,因此,数据写入性能好、查询性能差

同时,unique模型默认的更新语义是整行更新,在该语义下,即使指定了部分列更新,剩余列会被置为null而非原值。但在2.0版本后,支持部分更新操作,详情:https://doris.apache.org/zh-CN/docs/data-operate/update/update-of-unique-model

Duplicate明细模型

多维分析中,无聚合需求与更新需求的可使用明细模型建模,它所指定的duplicate key 只是一个排序列,不指定时默认选取前三列

当无需排序时,在properties中配置"enable_duplicate_without_keys_by_default" = "true"即可

本文参考Doris官方文档模型概述 - Apache Doris,将数据模型的知识点进行小小总结

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值