大数据分析——Apache Doris(三十二)

220 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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 来人为的调整列顺序。举例说明。