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

Apache Doris 使用指南:从入门到生产实践

目录

一、Doris 核心概念

1.1 架构组成

1.2 数据模型

二、Doris 部署方式

2.1 单机部署(测试环境)

2.2 集群部署(生产环境)

三、数据操作指南

3.1 数据库与表管理

3.2 数据导入方式

3.2.1 批量导入

3.2.2 实时导入

3.3 数据查询示例

四、性能优化实践

4.1 分区分桶策略

4.2 索引优化

4.3 查询优化技巧


Apache Doris 是一款高性能、实时的分析型数据库,广泛应用于大数据分析、实时报表等场景。本文将全面介绍 Doris 的核心概念、部署方式、数据操作及优化技巧。

下面附上官网地址:

Doris官网https://doris.apache.org/zh-CN/docs/dev/gettingStarted/what-is-apache-doris

一、Doris 核心概念

1.1 架构组成

  • FE (Frontend)​​:负责元数据管理、客户端连接和查询计划生成
  • BE (Backend)​​:负责数据存储和查询执行
  • Broker​:用于访问外部存储系统(如HDFS/S3)

1.2 数据模型

  • 明细模型(Duplicate Key)​​:适合原始数据存储
  • 聚合模型(Aggregate Key)​​:预聚合提高查询性能
  • 主键模型(Unique Key)​​:支持实时更新
  • 更新模型(Merge-on-Write)​​:2.0版本新增,更高性能更新

二、Doris 部署方式

2.1 单机部署(测试环境)

# 下载解压
wget https://apache-doris-releases.oss-accelerate.aliyuncs.com/doris-1.2.4-bin.tar.gz
tar -zxvf doris-1.2.4-bin.tar.gz# 启动FE
cd fe/bin/
./start_fe.sh --daemon# 启动BE
cd be/bin/
./start_be.sh --daemon

2.2 集群部署(生产环境)

-- 在FE节点添加BE节点
ALTER SYSTEM ADD BACKEND "be1:9050";
ALTER SYSTEM ADD BACKEND "be2:9050";
ALTER SYSTEM ADD BACKEND "be3:9050";-- 查看节点状态
SHOW PROC '/backends';

三、数据操作指南

3.1 数据库与表管理

-- 创建数据库
CREATE DATABASE demo_db;-- 创建明细表
CREATE TABLE demo_db.user_behavior (user_id LARGEINT NOT NULL,item_id LARGEINT NOT NULL,behavior_type VARCHAR(20),ts DATETIME NOT NULL
)
DUPLICATE KEY(user_id, item_id)
DISTRIBUTED BY HASH(user_id) BUCKETS 10
PROPERTIES ("replication_num" = "3","storage_medium" = "SSD"
);-- 创建聚合表
CREATE TABLE demo_db.sales_agg (dt DATE NOT NULL,product_id LARGEINT NOT NULL,user_region VARCHAR(50),SUM(sales_amount) BIGINT SUM,COUNT(sales_count) BIGINT COUNT
)
AGGREGATE KEY(dt, product_id, user_region)
DISTRIBUTED BY HASH(product_id) BUCKETS 10;

3.2 数据导入方式

3.2.1 批量导入
-- 本地文件导入
LOAD LABEL demo_db.label_20231101
(DATA INFILE("hdfs://path/to/file.parquet")
INTO TABLE user_behavior
FORMAT AS "parquet")
WITH BROKER "hdfs_broker";-- Stream Load(HTTP API)
curl --location-trusted -u user:passwd \
-H "column_separator:," \
-T data.csv \
http://fe_host:8030/api/demo_db/user_behavior/_stream_load
3.2.2 实时导入
-- Kafka实时接入
CREATE ROUTINE LOAD demo_db.kafka_load ON user_behavior
COLUMNS(user_id, item_id, behavior_type, ts)
PROPERTIES ("desired_concurrent_number" = "3","max_batch_interval" = "20","max_batch_rows" = "300000"
)
FROM KAFKA ("kafka_broker_list" = "broker1:9092,broker2:9092","kafka_topic" = "user_events","property.group.id" = "doris_consumer"
);

3.3 数据查询示例

-- 基础查询
SELECT user_region,SUM(sales_amount) AS total_sales
FROM sales_agg
WHERE dt BETWEEN '2023-10-01' AND '2023-10-31'
GROUP BY user_region
ORDER BY total_sales DESC
LIMIT 10;-- 窗口函数
SELECT user_id,ts,behavior_type,COUNT(*) OVER (PARTITION BY user_id ORDER BY ts RANGE INTERVAL 1 HOUR PRECEDING) AS hourly_actions
FROM user_behavior;-- 物化视图加速查询
CREATE MATERIALIZED VIEW mv_user_behavior_hourly
REFRESH EVERY INTERVAL 1 HOUR
AS
SELECT user_id,DATE_TRUNC('HOUR', ts) AS hour,COUNT(*) AS action_count,SUM(CASE WHEN behavior_type = 'buy' THEN 1 ELSE 0 END) AS buy_count
FROM user_behavior
GROUP BY user_id, DATE_TRUNC('HOUR', ts);

四、性能优化实践

4.1 分区分桶策略

-- 按天分区+哈希分桶
CREATE TABLE time_series_data (ts DATETIME NOT NULL,device_id LARGEINT NOT NULL,metric_value DOUBLE
)
ENGINE=OLAP
DUPLICATE KEY(ts, device_id)
PARTITION BY RANGE(ts) (PARTITION p202301 VALUES LESS THAN ('2023-02-01'),PARTITION p202302 VALUES LESS THAN ('2023-03-01'),PARTITION p202303 VALUES LESS THAN ('2023-04-01')
)
DISTRIBUTED BY HASH(device_id) BUCKETS 32
PROPERTIES ("replication_num" = "3","storage_medium" = "SSD","storage_cooldown_time" = "7 days"
);

4.2 索引优化

-- 添加倒排索引
ALTER TABLE user_behavior 
ADD INDEX idx_behavior_type (behavior_type) USING INVERTED;-- 添加Bloom Filter索引
ALTER TABLE sales_agg 
ADD INDEX bf_product_id (product_id) USING BLOOM_FILTER;

4.3 查询优化技巧

-- 使用分区裁剪
SELECT * FROM time_series_data 
WHERE ts BETWEEN '2023-03-15' AND '2023-03-20';-- 使用Bucket裁剪
SELECT * FROM user_behavior 
WHERE user_id = 10086;-- 使用Colocate Group
CREATE TABLE colocate_table (user_id BIGINT,item_id BIGINT
)
DISTRIBUTED BY HASH(user_id) BUCKETS 10
PROPERTIES ("colocate_with" = "user_group"
);

本文部分技术描述基于Apache Doris官方文档[1]及社区公认技术实践,相关SQL语法示例参考自开源项目文档。
[1] 官方文档链接:https://doris.apache.org/docs/ 

http://www.xdnf.cn/news/4334.html

相关文章:

  • SpringCloud入门教程合集(1)-SpringCloud简介与Eureka+Feign实现服务注册中心、服务提供与服务消费
  • LightGBM算法原理及Python实现
  • AWS WebRTC如何实现拉流?内部是这样实现的
  • chili3d调试笔记12 deepwiki viewport
  • 学习Python网络爬虫的实例
  • 双系统电脑中如何把ubuntu装进外接移动固态硬盘
  • 使用DevTools工具调试前端页面,便捷脚本,鸿蒙调试webView
  • 使用 ANSYS SIwave 求解器在 ANSYS AEDT 中预测串行通道性能并生成眼图
  • mysql-视图特性,用户管理和使用c连接
  • C++笔记
  • Web3 应用中常见的数据安全风险及防护措施
  • 使用AI应用开发平台搭建夸奖机器人,玩转AI【COZE入门案例-第1课】
  • 精益数据分析(43/126):媒体网站商业模式的盈利与指标解析
  • RAG框架搭建(基于Langchain+Ollama生成级RAG 聊天机器人)
  • Windows远程连接MySQL报错,本地navicat能连接MySQL
  • Docker安装使用
  • Android SDK 开发中的 AAR 与 JAR 区别详解
  • BUUCTF Pwn [ZJCTF 2019]Login WP
  • uv简单使用
  • Linux环境基础与开发工具使用
  • Linux——特殊权限管理
  • 用html+js+css实现的战略小游戏
  • C++内联函数
  • vue引入物理引擎matter.js
  • Transformer-LSTM混合模型在时序回归中的完整流程研究
  • 使用Unsloth微调DeepSeek-R1蒸馏模型:低显存高效训练实践
  • String 字符串基础和常用API
  • 钢厂首选,profinet转profibus在煤电项目中的协议转换解决方案
  • CAN报文中UDS部分的帧类型
  • ONLYOFFICE 文档 API :新的文档格式支持及配置方法