Doris ----- Modelo de agregación agregado e implementación de casos

Modelo agregado

Es un modelo de tabla que agrega automáticamente datos con la misma clave . Las columnas de la tabla se dividen en Clave (columna de dimensión) y Valor (columna de indicador) según si se establece AggregationType. Las que no tienen AggregationType se denominan Clave y las que tienen AggregationType establecido se denominan Valor. Cuando importamos datos, las filas con la misma columna Clave se agregarán en una fila y la columna Valor se agregará de acuerdo con el AggregationType establecido. AggregationType actualmente tiene los siguientes cuatro métodos de agregación:

  • SUMA: Suma, se acumulan los valores de varias filas.

  • REEMPLAZAR: Reemplazo, el Valor en el siguiente lote de datos reemplazará el Valor en la fila importada anteriormente.

  • REPLACE_IF_NOT_NULL: no actualizar cuando se encuentre un valor nulo.

  • MAX: Mantiene el valor máximo.

  • MIN: Mantiene el valor mínimo.

Se presenta el siguiente escenario: se necesita crear una tabla para registrar toda la información del comportamiento de consumo de cada usuario de la empresa, con los siguientes campos:

identificación de usuario Fecha de inserción de datos Ciudad edad género tiempo de entrevista Cantidad de cada consumo Duración de la estancia del usuario
10000 2017/10/1 Beijing 20 0 2017/10/01 06:00:00 20 10
10000 2017/10/1 Beijing 20 0 2017/10/01 07:00:00 15 2
10000 2017/10/1 Beijing 20 0 2017/10/01 08:00:00 30 15
10001 2017/10/1 Beijing 30 1 2017/10/01 17:05:45 2 22

Además, la empresa está especialmente preocupada por estos datos y un informe

La última vez que cada usuario visitó nuestra página, el monto total gastado por el usuario y el tiempo máximo y mínimo que permaneció en nuestra página.

identificación de usuario Fecha de inserción de datos Ciudad edad género hora de la última visita El consumo total de este usuario. La duración máxima de la estancia de este usuario. La estancia mínima del usuario
10000 2017/10/1 Beijing 20 0 2017/10/01 08:00:00 sesenta y cinco 15 2
10001 2017/10/1 Beijing 30 1 2017/10/01 17:05:45 2 22 22

 Cada vez que desee ver este informe, deberá ejecutar un SQL estadístico en la "tabla de detalles".

Select
    user_id,data,city,age,gender,
    max(visit_data) as last_visit_data,
    sum(cost) as cost,
    max(dwell_time) as max_dwell_time,
    min(dwell_time) as min_dwell_time
From  t
Group by  user_id,data,city,age,gender  -- 对应的是聚合模型型key

 Modelo de agregación

identificación de usuario Fecha de inserción de datos Ciudad edad género hora de la última visita El consumo total de este usuario. La duración máxima de la estancia de este usuario. La estancia mínima del usuario
10000 2017/10/1 Beijing 20 0 2017/10/01 08:00:00 sesenta y cinco 15 2
10001 2017/10/1 Beijing 30 1 2017/10/01 17:05:45 2 22 22

 ejemplo de sql:

-- 这是一个用户消费和行为记录的数据表
CREATE TABLE IF NOT EXISTS test.ex_user
(
 `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 "用户最小停留时间" 
 )
ENGINE=olap
AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
-- 分区
-- 分桶
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1;

 Insertar algunos datos en la tabla.

insert into test.ex_user values\
(10000,'2017-10-01','北京',20,0,'2017-10-01 06:00:00',20,10,10),\
(10000,'2017-10-01','北京',20,0,'2017-10-01 07:00:00',15,2,2),\
(10001,'2017-10-01','北京',30,1,'2017-10-01 17:05:45',2,22,22),\
(10002,'2017-10-02','上海',20,1,'2017-10-02 12:59:12',200,5,5),\
(10003,'2017-10-02','广州',32,0,'2017-10-02 11:20:00',30,11,11),\
(10004,'2017-10-01','深圳',35,0,'2017-10-01 10:00:15',100,3,3),\
(10004,'2017-10-03','深圳',35,0,'2017-10-03 10:20:22',11,6,6);

 Al verificar los datos, descubrí que solo quedaban 6 datos, esto se debe a que cuando las claves son las mismas, los resultados posteriores se agregan.

 Implementación de casos

 ejemplo

-- 数据
订单id,userId,商品id,购买件数,支付的金额,订单日期
1,u01,p01,2,20,2022-12-01
1,u01,p02,1,10,2022-12-01
1,u01,p01,1,10,2022-12-01
2,u02,p03,2,40,2022-12-01


需求:
创建一个doris的聚合模型的表,插入上述明细数据后,自动聚合出如下结果:

订单日期,订单id,userId,商品id,购买得总件数,支付总额

key是什么?
value是什么?


要求:
按天分区(每天一个分区)
每个分区要划分成2个桶
表的数据需要保存2个副本
表的数据初始存储介质指定为SSD
设置冷却时间为2023年6月5日18点

-- 建表语句

create table order_1
(
    `date` date COMMENT "日期时间",
    `oid` bigint COMMENT "订单id",
    `userid` varchar(255) COMMENT "用户id",
    `spid` varchar(255) COMMENT "商品id",
    `total` int sum COMMENT "商品总数",
    `pay` int sum COMMENT "支付总金额"

)
ENGINE=olap
AGGREGATE KEY(`date`,`oid`,`userid`,`spid`)
partition by range(`date`)
    (
        partition `p20221201` values less than ("2022-12-02"),
        partition `p20221202` values less than ("2022-12-03"),
        partition `p20221203` values less than ("2022-12-04")
    )
DISTRIBUTED BY HASH(`userid`) BUCKETS 2
properties(
    "replication_num"="2",
    "storage_medium" = "SSD"

);



-- 插入数据
insert into order_1 values
('2022-12-01',1,'u01','p01',2,20),
('2022-12-01',1,'u01','p02',1,10),
('2022-12-01',1,'u01','p01',1,10),
('2022-12-01',2,'u02','p03',2,40);

 

Supongo que te gusta

Origin blog.csdn.net/m0_53400772/article/details/130892860
Recomendado
Clasificación