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

打印 上一主题 下一主题

主题 1950|帖子 1950|积分 5850

目次
一、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 单机部署(测试环境)

  1. # 下载解压
  2. wget https://apache-doris-releases.oss-accelerate.aliyuncs.com/doris-1.2.4-bin.tar.gz
  3. tar -zxvf doris-1.2.4-bin.tar.gz
  4. # 启动FE
  5. cd fe/bin/
  6. ./start_fe.sh --daemon
  7. # 启动BE
  8. cd be/bin/
  9. ./start_be.sh --daemon
复制代码
2.2 集群部署(生产环境)

  1. -- 在FE节点添加BE节点
  2. ALTER SYSTEM ADD BACKEND "be1:9050";
  3. ALTER SYSTEM ADD BACKEND "be2:9050";
  4. ALTER SYSTEM ADD BACKEND "be3:9050";
  5. -- 查看节点状态
  6. SHOW PROC '/backends';
复制代码
三、数据操纵指南

3.1 数据库与表管理

  1. -- 创建数据库
  2. CREATE DATABASE demo_db;
  3. -- 创建明细表
  4. CREATE TABLE demo_db.user_behavior (
  5.     user_id LARGEINT NOT NULL,
  6.     item_id LARGEINT NOT NULL,
  7.     behavior_type VARCHAR(20),
  8.     ts DATETIME NOT NULL
  9. )
  10. DUPLICATE KEY(user_id, item_id)
  11. DISTRIBUTED BY HASH(user_id) BUCKETS 10
  12. PROPERTIES (
  13.     "replication_num" = "3",
  14.     "storage_medium" = "SSD"
  15. );
  16. -- 创建聚合表
  17. CREATE TABLE demo_db.sales_agg (
  18.     dt DATE NOT NULL,
  19.     product_id LARGEINT NOT NULL,
  20.     user_region VARCHAR(50),
  21.     SUM(sales_amount) BIGINT SUM,
  22.     COUNT(sales_count) BIGINT COUNT
  23. )
  24. AGGREGATE KEY(dt, product_id, user_region)
  25. DISTRIBUTED BY HASH(product_id) BUCKETS 10;
复制代码
3.2 数据导入方式

3.2.1 批量导入

  1. -- 本地文件导入
  2. LOAD LABEL demo_db.label_20231101
  3. (DATA INFILE("hdfs://path/to/file.parquet")
  4. INTO TABLE user_behavior
  5. FORMAT AS "parquet")
  6. WITH BROKER "hdfs_broker";
  7. -- Stream Load(HTTP API)
  8. curl --location-trusted -u user:passwd \
  9. -H "column_separator:," \
  10. -T data.csv \
  11. http://fe_host:8030/api/demo_db/user_behavior/_stream_load
复制代码
3.2.2 实时导入

  1. -- Kafka实时接入
  2. CREATE ROUTINE LOAD demo_db.kafka_load ON user_behavior
  3. COLUMNS(user_id, item_id, behavior_type, ts)
  4. PROPERTIES (
  5.     "desired_concurrent_number" = "3",
  6.     "max_batch_interval" = "20",
  7.     "max_batch_rows" = "300000"
  8. )
  9. FROM KAFKA (
  10.     "kafka_broker_list" = "broker1:9092,broker2:9092",
  11.     "kafka_topic" = "user_events",
  12.     "property.group.id" = "doris_consumer"
  13. );
复制代码
3.3 数据查询示例

  1. -- 基础查询
  2. SELECT
  3.     user_region,
  4.     SUM(sales_amount) AS total_sales
  5. FROM sales_agg
  6. WHERE dt BETWEEN '2023-10-01' AND '2023-10-31'
  7. GROUP BY user_region
  8. ORDER BY total_sales DESC
  9. LIMIT 10;
  10. -- 窗口函数
  11. SELECT
  12.     user_id,
  13.     ts,
  14.     behavior_type,
  15.     COUNT(*) OVER (PARTITION BY user_id ORDER BY ts RANGE INTERVAL 1 HOUR PRECEDING) AS hourly_actions
  16. FROM user_behavior;
  17. -- 物化视图加速查询
  18. CREATE MATERIALIZED VIEW mv_user_behavior_hourly
  19. REFRESH EVERY INTERVAL 1 HOUR
  20. AS
  21. SELECT
  22.     user_id,
  23.     DATE_TRUNC('HOUR', ts) AS hour,
  24.     COUNT(*) AS action_count,
  25.     SUM(CASE WHEN behavior_type = 'buy' THEN 1 ELSE 0 END) AS buy_count
  26. FROM user_behavior
  27. GROUP BY user_id, DATE_TRUNC('HOUR', ts);
复制代码
四、性能优化实践

4.1 分区分桶计谋

  1. -- 按天分区+哈希分桶
  2. CREATE TABLE time_series_data (
  3.     ts DATETIME NOT NULL,
  4.     device_id LARGEINT NOT NULL,
  5.     metric_value DOUBLE
  6. )
  7. ENGINE=OLAP
  8. DUPLICATE KEY(ts, device_id)
  9. PARTITION BY RANGE(ts) (
  10.     PARTITION p202301 VALUES LESS THAN ('2023-02-01'),
  11.     PARTITION p202302 VALUES LESS THAN ('2023-03-01'),
  12.     PARTITION p202303 VALUES LESS THAN ('2023-04-01')
  13. )
  14. DISTRIBUTED BY HASH(device_id) BUCKETS 32
  15. PROPERTIES (
  16.     "replication_num" = "3",
  17.     "storage_medium" = "SSD",
  18.     "storage_cooldown_time" = "7 days"
  19. );
复制代码
4.2 索引优化

  1. -- 添加倒排索引
  2. ALTER TABLE user_behavior
  3. ADD INDEX idx_behavior_type (behavior_type) USING INVERTED;
  4. -- 添加Bloom Filter索引
  5. ALTER TABLE sales_agg
  6. ADD INDEX bf_product_id (product_id) USING BLOOM_FILTER;
复制代码
4.3 查询优化本事

  1. -- 使用分区裁剪
  2. SELECT * FROM time_series_data
  3. WHERE ts BETWEEN '2023-03-15' AND '2023-03-20';
  4. -- 使用Bucket裁剪
  5. SELECT * FROM user_behavior
  6. WHERE user_id = 10086;
  7. -- 使用Colocate Group
  8. CREATE TABLE colocate_table (
  9.     user_id BIGINT,
  10.     item_id BIGINT
  11. )
  12. DISTRIBUTED BY HASH(user_id) BUCKETS 10
  13. PROPERTIES (
  14.     "colocate_with" = "user_group"
  15. );
复制代码
  本文部门技术描述基于Apache Doris官方文档[1]及社区公认技术实践,相关SQL语法示例参考自开源项目文档。
[1] 官方文档链接:https://doris.apache.org/docs/ 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莱莱

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表