Doris-----Modèle d'agrégation agrégé et mise en œuvre de cas

Modèle agrégé

Il s'agit d'un modèle de table qui agrège automatiquement les données avec la même clé . Les colonnes du tableau sont divisées en Key (colonne de dimension) et Value (colonne d'indicateur) selon que AggregationType est défini ou non. Celles sans AggregationType sont appelées Key, et celles avec AggregationType défini sont appelées Value. Lorsque nous importons des données, les lignes avec la même colonne Clé seront regroupées en une seule ligne et la colonne Valeur sera agrégée en fonction du AggregationType défini. AggregationType dispose actuellement des quatre méthodes d'agrégation suivantes :

  • SUM : Somme, les valeurs de plusieurs lignes sont accumulées.

  • REPLACE : Remplacement, la valeur du prochain lot de données remplacera la valeur de la ligne précédemment importée.

  • REPLACE_IF_NOT_NULL : ne pas mettre à jour lorsqu'une valeur nulle est rencontrée.

  • MAX : Conserver la valeur maximale.

  • MIN : Conserver la valeur minimale.

Il existe le scénario suivant : un tableau doit être créé pour enregistrer toutes les informations sur le comportement de consommation de chaque utilisateur de l'entreprise, avec les champs suivants :

ID de l'utilisateur Date d'insertion des données Ville âge genre heure de l'entretien Montant de chaque consommation Durée du séjour de l’utilisateur
10000 2017/10/1 Pékin 20 0 01/10/2017 06:00:00 20 dix
10000 2017/10/1 Pékin 20 0 01/10/2017 07:00:00 15 2
10000 2017/10/1 Pékin 20 0 01/10/2017 08:00:00 30 15
10001 2017/10/1 Pékin 30 1 01/10/2017 17:05:45 2 22

D’ailleurs, l’entreprise est particulièrement préoccupée par ces données et un rapport

La dernière fois que chaque utilisateur a visité notre page, le montant total dépensé par l'utilisateur et la durée maximale et minimale pendant laquelle l'utilisateur est resté sur notre page.

ID de l'utilisateur Date d'insertion des données Ville âge genre heure de la dernière visite La consommation totale de cet utilisateur La durée maximale de séjour de cet utilisateur La durée minimale de séjour de l’usager
10000 2017/10/1 Pékin 20 0 01/10/2017 08:00:00 65 15 2
10001 2017/10/1 Pékin 30 1 01/10/2017 17:05:45 2 22 22

 Chaque fois que vous souhaitez voir ce rapport, vous devez exécuter un SQL statistique sur la "table des détails"

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

 Modèle d'agrégation

ID de l'utilisateur Date d'insertion des données Ville âge genre heure de la dernière visite La consommation totale de cet utilisateur La durée maximale de séjour de cet utilisateur La durée minimale de séjour de l’usager
10000 2017/10/1 Pékin 20 0 01/10/2017 08:00:00 65 15 2
10001 2017/10/1 Pékin 30 1 01/10/2017 17:05:45 2 22 22

 exemple 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;

 Insérez quelques données dans le tableau

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);

 Lors de la vérification des données, j'ai constaté qu'il ne restait que 6 éléments de données, car lorsque les clés sont les mêmes, les résultats suivants sont agrégés.

 Mise en œuvre du cas

 exemple

-- 数据
订单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);

 

Je suppose que tu aimes

Origine blog.csdn.net/m0_53400772/article/details/130892860
conseillé
Classement