持续创作,加速成长!这是我参与「掘金日新计划 · 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 ); | |
| 3 | select * 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 中最终只会存储聚合后的数据。换句话说,即明细数据会丢失,用户不能够再查询到聚合前的明细数据了。 |