当前位置: 首页 > news >正文

Doris学习笔记

1. 三种表模型:明细模型、聚合模型、唯一模型

明细模型建表语句:

CREATE TABLE IF NOT EXISTS example_db.detail_log
(`user_id` INT NOT NULL COMMENT "用户ID",`event_time` DATETIME NOT NULL COMMENT "事件时间",`event_type` VARCHAR(32) COMMENT "事件类型",`city` VARCHAR(64) COMMENT "所在城市",`device` VARCHAR(64) COMMENT "设备型号"
)
ENGINE=OLAP
DUPLICATE KEY(`user_id`, `event_time`) -- 指定明细模型(通过DUPLICATE KEY)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`user_id`) BUCKETS 10; -- 分桶

适用场景:日志数据分析、用户行为分析、需要查询原始数据的场景

聚合模型建表语句:

CREATE TABLE IF NOT EXISTS example_db.aggregate_page_view
(`date` DATE NOT NULL COMMENT "日期",`page_id` INT NOT NULL COMMENT "页面ID",`user_id` BIGINT SUM DEFAULT "0" COMMENT "访问用户数,求SUM相当于PV",`city` VARCHAR(64) REPLACE DEFAULT "" COMMENT "城市,取最后一条",`pv` BIGINT SUM DEFAULT "0" COMMENT "总访问次数"
)
ENGINE=OLAP
AGGREGATE KEY(`date`, `page_id`, `user_id`) -- 指定聚合模型
COMMENT "OLAP"
DISTRIBUTED BY HASH(`page_id`) BUCKETS 10;
CREATE TABLE example_db.aggregate_uv
(`date` DATE NOT NULL,`page_id` INT NOT NULL,`user_id_bitmap` BITMAP BITMAP_UNION NOT NULL
)
ENGINE=OLAP
AGGREGATE KEY(`date`, `page_id`)
DISTRIBUTED BY HASH(`page_id`) BUCKETS 10;

  

数据导入

假设原始数据是这样的:

date       | page_id | user_id
2024-01-01 | 1       | 1001
2024-01-01 | 1       | 1002  
2024-01-01 | 1       | 1001  -- 用户1001重复访问
2024-01-01 | 2       | 1001

导入后,表中存储的是:

date       | page_id | user_id_bitmap (实际存储的是压缩位图)
2024-01-01 | 1       | {1001, 1002}    -- 自动去重,只有2个用户
2024-01-01 | 2       | {1001}          -- 1个用户

查询使用

-- 计算每个页面的独立访客数(UV)
SELECT date,page_id,BITMAP_UNION_COUNT(user_id_bitmap) as uv
FROM example_db.aggregate_uv
GROUP BY date, page_id;-- 结果:
-- date       | page_id | uv
-- 2024-01-01 | 1       | 2
-- 2024-01-01 | 2       | 1-- 计算总的独立访客数
SELECT BITMAP_UNION_COUNT(user_id_bitmap) as total_uv 
FROM example_db.aggregate_uv;-- 计算特定页面的UV
SELECT BITMAP_UNION_COUNT(user_id_bitmap) as uv
FROM example_db.aggregate_uv 
WHERE page_id = 1;

聚合模型适用场景:报表统计、实时看板(sum,max,min 等)

3、唯一模型建表语句:

create table update_orders(`order_id` bigint not null comment "订单ID",`order_status` int not null comment "订单状态",`user_id` int not null comment "用户ID",`amount` int comment "订单金额",`update_time` date not null comment "更新时间" 
)
ENGINE=OLAP
UNIQUE KEY(`order_id`) 
DISTRIBUTED KEY HASH(`order_id`) BUCKETS 10;

适用场景:状态频繁变更的业务表(如订单、用户信息)。

http://www.jsqmd.com/news/43894/

相关文章:

  • 人工智能之编程进阶 Python高级:第一章 栈和队列
  • Spring AI Alibaba 项目源码学习(十一)-Hook
  • linux c ini
  • Spring AI Alibaba 项目源码学习(十二)-完结:Tool
  • linux busybox
  • DS trick record 2
  • 详细介绍:MonkeyCode:开源AI编程助手的技术实践与应用价值
  • ftp,sftp,scp,tftp几种简单对比,以及python实现ftp功能
  • 实用指南:深入解析音频编解码器(Audio CODEC):硬件、接口与驱动开发
  • 福利MegaLLM–175刀免费额度建教程
  • C# 常用控件(学习笔记8)
  • 模拟赛记录 11/18
  • 代码随想录Day14_
  • 白嫖MegaLLM–175刀免费额度建教程
  • 如何找到适合好用的 AI 数据分析工具?Aloudata Agent 值得一试!
  • linux burpsuite
  • linux bug
  • linux broadcom
  • Duan.ai - 将长视频变成适合社交的短视频AI工具
  • DS trick record 1
  • 2025年11月成都房产律师,成都合同纠纷律师,成都刑事律师事务所推荐,实力律所解析委托无忧之选!
  • 2025年11月成都建设工程律师,成都执业律师,成都经济纠纷律师事务所推荐:聚焦办案实力与胜诉口碑!
  • 2025年11月成都合同律师,成都律师,成都婚姻律师事务所推荐,资深经验与品牌保障口碑之选!
  • (CF2166) Codeforces Round 1064 (Div. 2)
  • 详细介绍:【C++庖丁解牛】哈希表/散列表的设计原理 | 哈希函数
  • Balatro GBA - 在Game Boy Advance上体验扑克 Roguelike
  • 在线离线
  • 深入解析:专题:2025年医疗健康行业状况报告:投融资、脑机接口、AI担忧|附130+份报告PDF合集、图表下载
  • 【LVGL】线条部件
  • 2025年11月新疆电力电缆,高压电缆,特种电缆厂家权威推荐,低损耗稳定性强的行业优选线缆!