持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
Uniq模型(唯一主键)
在某些多维分析场景下,用户更关注的是如何保证 Key 的唯一性,即如何获得 Primary Key 唯一性约束。因此,我们引入了 Uniq 的数据模型。该模型本质上是聚合模型的一个特例,也是一种简化的表结构表示方式。
Unique Key 的模型主要面向留存分析或者订单分析的场景,他们需要一个 Unique Key 的约束去保证整个数据不丢不重。然后 Duplicate Key 的模型,就是这个数据可能重复,
- 演示
| 操作步骤 | 说明 |
|---|---|
| 1 | 创建doris表 |
CREATE TABLE IF NOT EXISTS test_db . user**(** user_id LARGEINT NOT NULL COMMENT "用户id" , username VARCHAR ( 50 ) NOT NULL COMMENT "用户昵称" , city VARCHAR ( 20 ) COMMENT "用户所在城市" , age SMALLINT COMMENT "用户年龄" , sex TINYINT COMMENT "用户性别" , phone LARGEINT COMMENT "用户电话" , address VARCHAR ( 500 ) COMMENT "用户地址" , register_time DATETIME COMMENT "用户注册时间"**)**UNIQUE KEY ( user_id , username **)**DISTRIBUTED BY HASH ( user_id ) BUCKETS 10 ; | |
| 2 | 插入数据 |
| insert into test_db . user values ( 10000 , 'zhangsan' , '北京' , 20 , 0 , 13112345312 , '北京西城区' , '2020-10-01 07:00:00' **);**insert into test_db . user values ( 10000 , 'zhangsan' , '北京' , 20 , 0 , 13112345312 , '北京海淀区' , '2020-11-15 06:10:20' ); | |
| 3 | 查询数据 |
| select * from test_db . user ; | |
| 即 Uniq 模型完全可以用聚合模型中的 REPLACE 方式替代。其内部的实现方式和数据存储方式也完全一样 |
基本概念
在 Doris 中,我们将用户通过建表语句创建出来的表成为 Base 表(Base Table)。Base 表中保存着按用户建表语句指定的方式存储的基础数据。
在 Base 表之上,我们可以创建任意多个 ROLLUP 表。这些 ROLLUP 的数据是基于 Base 表产生的,并且在物理上是独立存储的。
ROLLUP 表的基本作用,在于在 Base 表的基础上,获得更粗粒度的聚合数据。
-
在聚合表的基础上,按照其他维度再进一步聚合,提升查询效率。
-
Doris索引是固定的前缀索引,用rollup改变索引顺序
ROLLUP 调整前缀索引
因为建表时已经指定了列顺序,所以一个表只有一种前缀索引。这对于使用其他不能命中前缀索引的列作为条件进行的查询来说,效率上可能无法满足需求。因此,我们可以通过创建 ROLLUP 来人为的调整列顺序。举例说明。