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

203 阅读3分钟

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

AGGREGATEKEY模型可以提前聚合数据,适合报表和多维度业务

  • 演示一:导入数据聚合
操作步骤说明
1创建doris表
 CREATE TABLE IF NOT EXISTS test_db . example_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插入数据
 insert into test_db . example_site_visit values ( 10000 , '2020-10-01' , '北京' , 20 , 0 , '2020-10-01 06:00:00' , 20 , 10 , 10 **);**insert into test_db . example_site_visit values ( 10000 , '2020-10-01' , '北京' , 20 , 0 , '2020-10-01 07:00:00' , 15 , 2 , 2 **);**insert into test_db . example_site_visit values ( 10001 , '2020-10-01' , '北京' , 30 , 1 , '2020-10-01 17:05:45' , 2 , 22 , 22 **);**insert into test_db . example_site_visit values ( 10002 , '2020-10-02' , '上海' , 20 , 1 , '2020-10-02 12:59:12' , 200 , 5 , 5 **);**insert into test_db . example_site_visit values ( 10003 , '2020-10-02' , '广州' , 32 , 0 , '2020-10-02 11:20:00' , 30 , 11 , 11 **);**insert into test_db . example_site_visit values ( 10004 , '2020-10-01' , '深圳' , 35 , 0 , '2020-10-01 10:00:15' , 100 , 3 , 3 );insert into test_db . example_site_visit values ( 10004 , '2020-10-03' , '深圳' , 35 , 0 , '2020-10-03 10:20:22' , 11 , 6 , 6 );
3select  *  from test_db . example_site_visit ;
 可以看到,用户 10000 只剩下了一行聚合后的数据。而其余用户的数据和原始数据保持一致。这里先解释下用户 10000 聚合后的数据:前5列没有变化,从第6列 last_visit_date 开始:2020-10-01 07:00:00:因为 last_visit_date 列的聚合方式为 REPLACE,所以 2020-10-01 07:00:00 替换了 2020-10-01 06:00:00 保存了下来。注:在同一个导入批次中的数据,对于 REPLACE 这种聚合方式,替换顺序不做保证。如在这个例子中,最终保存下来的,也有可能是 2020-10-01 06:00:00。而对于不同导入批次中的数据,可以保证,后一批次的数据会替换前一批次。35:因为 cost 列的聚合类型为 SUM,所以由 20 + 15 累加获得 35。10:因为 max_dwell_time 列的聚合类型为 MAX,所以 10 和 2 取最大值,获得 10。2:因为 min_dwell_time 列的聚合类型为 MIN,所以 10 和 2 取最小值,获得 2。经过聚合,Doris 中最终只会存储聚合后的数据。换句话说,即明细数据会丢失,用户不能够再查询到聚合前的明细数据了