Doris系列之基础使用

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相似,都可以针对对应的列选择指定的合并方法。

### Doris仪表板安装、配置、教程与故障排除 #### 安装过程 对于Doris仪表板的安装,通常建议先确认环境准备情况。确保操作系统支持并已正确设置Java运行环境,因为Doris依赖于JVM来执行其功能[^1]。下载适合版本的Apache Doris软件包后,解压至指定目录,并按照官方文档中的指导完成必要的初始化操作。 #### 配置指南 关于配置方面,在`fe.conf`文件中可以调整前端服务的各项参数;而在`be.conf`里则定义了后端节点的行为准则。合理规划这些配置项有助于优化性能表现以及满足特定业务需求。例如,可以通过修改内存分配比例、数据存储路径等选项实现更高效的资源利用[^2]。 #### 使用教程 为了帮助新用户快速上手,官方提供了详尽的操作手册,涵盖了从基础查询语句到复杂分析模型构建等多个层面的内容。通过学习这部分材料,能够掌握如何创建表结构、导入外部数据源、编写SQL脚本等一系列核心技能[^3]。 ```sql CREATE TABLE example_table ( id INT, name STRING, age TINYINT ) DISTRIBUTED BY HASH(id); ``` #### 故障排查技巧 当遇到问题时,查看日志是最基本也是最有效的方法之一。FE和BE各自拥有独立的日志记录机制,分别位于各自的部署位置下。如果发现异常现象,应该仔细阅读最近时间段内的错误提示信息,尝试从中找出线索解决问题。另外,社区论坛也是一个很好的求助渠道,许多常见难题都可以在这里找到现成的答案或者得到其他开发者的及时响应和支持[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值