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

189 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

 Duplicate 模型(冗余模型)

Duplicate Key 的模型,就是说支持一个用户导入之后把这个数据全部放在数据库里面,我们不再做提前的聚合,也不单独保证唯一性,只做一个排序。因此,我们引入 Duplicate 数据模型来满足这类需求。

如:对于有些日志分析它不太在意数据多几条或者少几条,可能只关心排序,这个时候可能重复 Key 的模型会更加有效果。

  • 演示
操作步骤说明
1创建doris表
 CREATE TABLE IF NOT EXISTS test_db.example_log**(**    **timestamp** DATETIME NOT NULL COMMENT "日志时间" ,    **type** INT NOT NULL COMMENT "日志类型" ,    error_code INT COMMENT "错误码" ,    error_msg VARCHAR ( 1024 )  COMMENT "错误详细信息" ,    op_id BIGINT COMMENT "负责人id" ,    op_time DATETIME COMMENT "处理时间"**)**DUPLICATE KEY ( **timestamp** ,  **type** **)**DISTRIBUTED BY HASH ( **timestamp** )  BUCKETS 10 ;
2插入数据
 insert into test_db . example_log values ( '2020-10-01 08:00:05' , 1 , 404 , 'not found page' ,  101 ,  '2020-10-01 08:00:05' **);**insert into test_db . example_log values ( '2020-10-01 08:00:05' , 1 , 404 , 'not found page' ,  101 ,  '2020-10-01 08:00:05' **);**insert into test_db . example_log values ( '2020-10-01 08:00:05' , 2 , 404 , 'not found page' ,  101 ,  '2020-10-01 08:00:06' );insert into test_db . example_log values ( '2020-10-01 08:00:06' , 2 , 404 , 'not found page' ,  101 ,  '2020-10-01 08:00:07' );
3查询数据
 select  *  from test_db.example_log ;
 这种数据模型区别于 Aggregate 和 Uniq 模型。数据完全按照导入文件中的数据进行存储,不会有任何聚合。即使两行数据完全相同,也都会保留。 而在建表语句中指定的 DUPLICATE KEY,只是用来指明底层数据按照那些列进行排序

 案例演示

  • 在聚合表的基础上,按照其他维度再进一步聚合,提升查询效率。

以site_visit表为例

操作步骤说明
1创建表
 CREATE TABLE IF NOT EXISTS test_db . site_visit**(**    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 ( user_id )  BUCKETS 10 ;
2查看表的结构信息
 desc site_visit all;
3比如需要查看某个城市的user_id数,那么可以建立一个只有user_id和city的rollup
 alter table site_visit add rollup rollup_city_userid ( city , user_id );
4查看表的结构信息
 desc site_visit all;
5然后可以通过explain查看执行计划,是否使用到了rollup
 explain select date from site_visit where city='北京';
 Doris 会自动命中这个 ROLLUP 表,从而只需扫描极少的数据量,即可完成这次聚合查询。
6通过命令查看完成状态
 SHOW ALTER TABLE ROLLUP;