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

157 阅读3分钟

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

l 演示三:导入数据与已有数据聚合

刚才讲了数据在导入的时候会有一次合并,因为要聚合。还有一种情况是如果我先导入了一批数据,然后又导入了一批数据,这两批的数据之间有相同的时候,也需要进行一个合并

操作步骤说明
1创建doris表
 CREATE TABLE IF NOT EXISTS test_db . example_site_visit3**(**    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_visit3 values ( 10000 , '2020-10-01' , '北京' , 20 , 0 , '2020-10-01 06:00:00' , 20 , 10 , 10 **);**insert into test_db . example_site_visit3 values ( 10000 , '2020-10-01' , '北京' , 20 , 0 , '2020-10-01 07:00:00' , 15 , 2 , 2 **);**insert into test_db . example_site_visit3 values ( 10001 , '2020-10-01' , '北京' , 30 , 1 , '2020-10-01 17:05:45' , 2 , 22 , 22 **);**insert into test_db . example_site_visit3 values ( 10002 , '2020-10-02' , '上海' , 20 , 1 , '2020-10-02 12:59:12' , 200 , 5 , 5 **);**insert into test_db . example_site_visit3 values ( 10003 , '2020-10-02' , '广州' , 32 , 0 , '2020-10-02 11:20:00' , 30 , 11 , 11 **);**insert into test_db . example_site_visit3 values ( 10004 , '2020-10-01' , '深圳' , 35 , 0 , '2020-10-01 10:00:15' , 100 , 3 , 3 **);**insert into test_db . example_site_visit3 values ( 10004 , '2020-10-03' , '深圳' , 35 , 0 , '2020-10-03 10:20:22' , 11 , 6 , 6 );
3select  *  from test_db . example_site_visit3 ;
4再导入一批新的数据:
 insert into test_db . example_site_visit3 values ( 10004 , '2020-10-03' , '深圳' , 35 , 0 , '2020-10-03 11:22:00' , 44 , 19 , 19 );insert into test_db . example_site_visit3 values ( 10005 , '2020-10-03' , '长沙' , 29 , 1 , '2020-10-03 18:11:02' , 3 , 1 , 1 );
5select  *  from test_db . example_site_visit3 ;
 可以看到,用户 10004 的已有数据和新导入的数据发生了聚合。同时新增了 10005 用户的数据。数据的聚合,在 Doris 中有如下三个阶段发生:l 每一批次数据导入的 ETL 阶段。该阶段会在每一批次导入的数据内部进行聚合。l 底层 BE 进行数据 Compaction 的阶段。该阶段,BE 会对已导入的不同批次的数据进行进一步的聚合。l 数据查询阶段。在数据查询时,对于查询涉及到的数据,会进行对应的聚合。数据在不同时间,可能聚合的程度不一致。比如一批数据刚导入时,可能还未与之前已存在的数据进行聚合。但是对于用户而言,用户只能查询到聚合后的数据。即不同的聚合程度对于用户查询而言是透明的。用户需始终认为数据以最终的完成的聚合程度存在,而不应假设某些聚合还未发生。(可参阅聚合模型的局限性一节获得更多详情。)