1、三种模型场景说明总结
| 模型 | 应用场景说明 |
|---|---|
| Duplicate (重复) |
适用于那些需要完全保留原始导入数据的场景,即使两行数据完全相同也会保留。 适用于既没有聚合需求,又没有主键唯一性约束的原始数据。 这种模型在处理那些需要保留原始数据详细信息的场景时非常有用,例如日志分析、审计追踪等。 |
| Aggregate (聚合) |
对于 Key 列(维度列)相同的行会聚合成一行,而 Value 列(指标列)会按照设置的 AggregationType 进行聚合。最大的缺点就是无法查询明细数据。通过预聚合,及大地减少查询时所需扫描和计算的数据,适合固定模式的报表类查询场景。 |
| Unique (唯一) |
业务更加关注Key的唯一性,即主键唯一性约束。 这种模型在处理那些需要精确匹配唯一标识的数据时非常有用,例如用户ID、订单号等。 |
2、补充说明:
2.1、AggregationType 目前有以下几种聚合方式和agg_state:
- SUM:求和,多行的 Value 进行累加。
- REPLACE:替代,下一批数据中的 Value 会替换之前导入过的行中的 Value。
- MAX:保留最大值。
- MIN:保留最小值。
- REPLACE_IF_NOT_NULL:非空值替换。和 REPLACE 的区别在于对于null值,不做替换。
- HLL_UNION:HLL 类型的列的聚合方式,通过 HyperLogLog 算法聚合。
- BITMAP_UNION:BIMTAP 类型的列的聚合方式,进行位图的并集聚合。
如果这几种聚合方式无法满足需求,则可以选择使用agg_state类型。
2.2、Unique模型提供了两种实现方式:
- 读时合并(merge-on-read)。在读时合并实现中,用户在进行数据写入时不会触发任何数据去重相关的操作,所有数据去重的操作都在查询或者compaction时进行。因此,读时合并的写入性能较好,查询性能较差,同时内存消耗也较高。
- 写时合并(merge-on-write)。在1.2版本中,我们引入了写时合并实现,该实现会在数据写入阶段完成所有数据去重的工作,因此能够提供非常好的查询性能。
自2.0版本起,写时合并已经非常成熟稳定, 由于其优秀的查询性能,我们推荐大部分用户选择该实现。自2.1版本其,写时合并成为Unique模型的默认实现
3、场景体验
准备:创建数据库
CREATE DATABASE IF NOT EXISTS example_db;
3.1、聚合(Aggregate)模型
CREATE TABLE IF NOT EXISTS example_db.example_tbl_agg
(
`user_id` LARGEINT NOT NULL COMMENT "用户id",
`date` DATE NOT NULL COMMENT "数据灌入日期时间",
`city` VARCHAR(20) COMMENT "用户所在城市",
`age` SMALLINT COMMENT "用户年龄",
`sex` TINYINT COMMENT "用户性别",
`last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
`cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
`max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
`min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
)
AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
DISTRIBUTED BY HASH(

本文详细介绍了ApacheDoris数据库中的Duplicate、Aggregate和Unique三种数据模型的应用场景,包括数据去重策略、聚合方式以及写时合并和读时合并的优劣。通过示例展示了如何创建和使用这些模型,并强调了写时合并作为Unique模型的推荐实现方式。
最低0.47元/天 解锁文章
2315

被折叠的 条评论
为什么被折叠?



