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

Doris系列之基础使用

Doris系列之基础使用

  • 1 简介
    • 1.1 官方文档
  • 2 doris语法
    • 2.1 建表语法
  • 3 doris模型
    • 3.1 明细模型
      • 3.1.1 示例
    • 3.2 主键模型
      • 3.2.1 读时合并
      • 3.2.2 写时合并-默认
      • 3.2.3 示例
    • 3.3 聚合模型
      • 3.3.1 聚合方式
      • 3.3.2 示例

1 简介

Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析、即时查询、统一数仓构建、数据湖联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析、即时查询、统一数仓构建、数据湖联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。

1.1 官方文档

官方文档:https://doris.apache.org/zh-CN

2 doris语法

2.1 建表语法

CREATE TABLE [IF NOT EXISTS] [database.]table
(
    column_definition_list
    [, index_definition_list]
)
[engine_type]
[keys_type]
[table_comment]
[partition_info]
distribution_desc
[rollup_list]
[properties]
[extra_properties]
  • engine_type:包含olap、mysql、broker、hive 几种
  • key_type:
    • DUPLICATE KEY:(默认),其后指定的列为排序列
    • AGGREGATE KEY:其后指定的列为维度列
    • UNIQUE KEY:其后指定的列为主键列
  • partition_info:分区算法,可选
  • distributed:分桶算法,必选
    • hash 分桶语法:DISTRIBUTED BY HASH (k1[,k2 …]) [BUCKETS num|auto] 说明:使用指定的 key 列进行哈希分桶。
    • Random 分桶语法:DISTRIBUTED BY RANDOM [BUCKETS num|auto] 说明:使用随机数进行分桶。
  • properties:
    • replication_allocation:指定表的分区配置

3 doris模型

3.1 明细模型

在明细数据模型中,数据按照导入文件中的数据进行存储,不会有任何聚合。即使两行数据完全相同,也都会保留。而在建表语句中指定的 DUPLICATE KEY,只是用来指明数据存储按照哪些列进行排序。

3.1.1 示例

-- 建表语句
CREATE TABLE IF NOT EXISTS example_tbl_by_default
(
    `timestamp` DATETIME NOT NULL COMMENT "日志时间",
    `type` INT NOT NULL COMMENT "日志类型",
    `error_code` INT COMMENT "错误码",
    `error_msg` VARCHAR(1024) COMMENT "错误详细信息",
    `op_id` BIGINT COMMENT "负责人id",
    `op_time` DATETIME COMMENT "处理时间"
)
distributed BY HASH(`type`) BUCKETS 1
properties (
	"replication_allocation" = "tag.location.default: 1"
);
-- 插入数据
INSERT into example_tbl_by_default values(123,1,200,'测试错误',1,'2024-04-28 11:49:45');

在这里插入图片描述
提示:Doris的明细模型与ClickHouse的TinyLog引擎类似,都是记录明细数据。

3.2 主键模型

主键模型能够保证 Key(主键)的唯一性,当用户更新一条数据时,新写入的数据会覆盖具有相同 key(主键)的旧数据

3.2.1 读时合并

在读时合并实现中,用户在进行数据写入时不会触发任何数据去重相关的操作,所有数据去重的操作都在查询或者compaction时进行。因此,读时合并的写入性能较好,查询性能较差,同时内存消耗也较高;

3.2.2 写时合并-默认

在1.2版本中,我们引入了写时合并实现,该实现会在数据写入阶段完成所有数据去重的工作,因此能够提供非常好的查询性能。自2.0版本起,写时合并已经非常成熟稳定, 由于其优秀的查询性能,我们推荐大部分用户选择该实现。自2.1版本,写时合并成为Unique模型的默认实现

3.2.3 示例

-- 创建表
CREATE TABLE IF NOT EXISTS example_tbl_unique
(
    `user_id` LARGEINT NOT NULL COMMENT "用户id",
    `username` VARCHAR(50) NOT NULL COMMENT "用户昵称",
    `city` VARCHAR(20) COMMENT "用户所在城市",
    `age` SMALLINT COMMENT "用户年龄",
    `sex` TINYINT COMMENT "用户性别",
    `phone` LARGEINT COMMENT "用户电话",
    `address` VARCHAR(500) COMMENT "用户地址",
    `register_time` DATETIME COMMENT "用户注册时间"
)
UNIQUE KEY(`user_id`)
distributed BY HASH(`user_id`) BUCKETS 1
properties (
	"replication_allocation" = "tag.location.default: 1"
);
-- 插入数据
INSERT into example_tbl_unique VALUES(1,'张三','成都',22,1,'18478548754','四川省成都市','2024-04-28 11:05:10');
-- 再次插入数据,数据被覆盖更新
INSERT into example_tbl_unique VALUES(1,'张三1','成都1',23,2,'18478548754','四川省成都市1','2024-04-29 11:05:10');

在这里插入图片描述
提示:Doris的主键模型与ClickHouse的ReplacingMergeTree效果一致,只是ClickHouse合并不是实时的,而Doris可以选择配置为写时合并还是读时合并,可参考【ClickHouse系列之ClickHouse使用】

3.3 聚合模型

3.3.1 聚合方式

  • SUM求和,多行的 Value 进行累加
  • 3.3.1.2 REPLACE:替代,下一批数据中的 Value 会替换之前导入过的行中的 Value
  • MAX:保留最大值
  • MIN:保留最小值
  • REPLACE_IF_NOT_NULL:非空值替换,和 REPLACE 的区别在于对于 null 值,不做替换
  • HLL_UNION:HLL 类型的列的聚合方式,通过 HyperLogLog 算法聚合
  • BITMAP_UNION:BIMTAP 类型的列的聚合方式,进行位图的并集聚合

3.3.2 示例

-- 创建表
CREATE TABLE IF NOT EXISTS example_tbl_agg1
(
    `user_id` LARGEINT NOT NULL COMMENT "用户id",
    `date` DATE NOT NULL COMMENT "数据灌入日期时间",
    `city` VARCHAR(20) COMMENT "用户所在城市",
    `age` SMALLINT COMMENT "用户年龄",
    `sex` TINYINT REPLACE_IF_NOT_NULL 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`)
distributed BY HASH(`user_id`) BUCKETS 1
properties (
"replication_allocation" = "tag.location.default: 1"
);
-- 插入第一次数据
INSERT into example_tbl_agg1 VALUES(1,'2024-04-28 14:33:24','四川',15,1,'2024-04-28 14:33:51',1,10,20);
-- 插入第二次数据 性别、时间、消费等信息变更
INSERT into example_tbl_agg1 VALUES(1,'2024-04-28 14:33:24','四川',15,null,null,2,20,10);
-- 插入第三次数据  所在城市变更
INSERT into example_tbl_agg1 VALUES(1,'2024-04-28 14:33:24','四川省',15,null,null,2,20,10);

在这里插入图片描述
提示:Doris的聚合模型与ClickHouse的AggregatingMergeTree相似,都可以针对对应的列选择指定的合并方法。

相关文章:

  • Magma:多模态 AI 智体的基础模型
  • DeepSeek 助力 Vue3 开发:打造丝滑的下拉选择框(Dropdown Select)
  • 数据结构——基于单链表创建通讯录
  • LangChain教程 - RAG - PDF问答
  • HarmonyOS+Django实现图片上传
  • AVFormatContext
  • Node.js v16 版本安装
  • 排序(数据结构篇)
  • YOLOv12 ——基于卷积神经网络的快速推理速度与注意力机制带来的增强性能结合
  • 百度觉醒,李彦宏渴望光荣
  • 浅析 Redis 分片集群 Cluster 原理、手动搭建、动态伸缩集群、故障转移
  • 《Spring Boot + MySQL高性能应用实战:性能优化技巧与最佳实践》
  • CMake小结2(PICO为例)
  • 【目标检测旋转框xml2txt】rolabelimg标注的xml格式label转YOLO格式txt文件
  • 【Java项目】基于Spring Boot的旅游管理系统
  • Blueprint —— Events
  • vue3-07模拟vue3的响应式原理Proxy (代理对象)与Reflect (反射对象)
  • NNP_test_cpp
  • 深度强化学习落地调参技巧
  • 企业之IT安全管控概览和实践案例
  • 做网站的心得/营销网站建设大概费用
  • android studio官网/网络seo排名
  • 手机怎样制作个人网站/快速提高网站关键词排名优化
  • 郑州网站推广费用/谷歌浏览器安卓版下载
  • 福州做网站的公司多少钱/互联网舆情监测系统
  • 机场建设管理投资有限责任公司网站/微信管理工具