码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Apache Doris 快速学习大纲


    1. 介绍

    Doris是一种MPP架构的分析型数据库,主要面向多维分析、数据报表、用户画像分析等场景。自带分析引擎和存储引擎,支持向量化执行引擎,不依赖其他组件,兼容MySQL协议。

    Doris整体架构如下图所示,Doris 架构非常简单,只有两类进程

    1. Frontend(FE),主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。
    2. Backend(BE),主要负责数据存储、查询计划的执行。
      在这里插入图片描述

    入门

    • Doris 采用 MySQL 协议,高度兼容 MySQL 语法,支持标准 SQL,用户可以通过各类客户端工具来访问 Doris,并支持与 BI 工具的无缝对接。

    • 在存储引擎方面,Doris 采用列式存储,按列进行数据的编码压缩和读取,能够实现极高的压缩比,同时减少大量非相关数据的扫描,从而更加有效利用 IO 和 CPU 资源。

    实例名称端口名称默认端口通讯方向说明
    BEbe_port9060FE --> BEBE 上 thrift server 的端口,用于接收来自 FE 的请求
    BEwebserver_port8040BE <–> BEBE 上的 http server 的端口
    BEheartbeat_service_port9050FE --> BEBE 上心跳服务端口(thrift),用于接收来自 FE 的心跳
    BEbrpc_port8060FE <–> BE, BE <–> BEBE 上的 brpc 端口,用于 BE 之间通讯
    FEhttp_port8030FE <–> FE,用户 <–> FEFE 上的 http server 端口
    FErpc_port9020BE --> FE, FE <–> FEFE 上的 thrift server 端口,每个fe的配置需要保持一致
    FEquery_port9030用户 <–> FEFE 上的 mysql server 端口
    FEedit_log_port9010FE <–> FEFE 上的 bdbje 之间通信用的端口
    Brokerbroker_ipc_port8000FE --> Broker, BE --> BrokerBroker 上的 thrift server,用于接收请求
    1.查看BE,创建账号,数据库 ,赋予用户权限
    SHOW BACKENDS;
    create user 'test' identified by 'test';
    create database test_db;
    grant all  on test_dn to test;
    
    • 1
    • 2
    • 3
    • 4
    2.表分区分区

    第一级称为Partition,即分区。用户指定某一维度列做为分区列(当前只支持整型和时间类型的列),并指定每个分区的取值范围。
    第二级称为Distribution,即分桶。用户可以指定一个或多个维度列以及桶数进行HASH分布。

    1. 有时间维或类似带有有序值的维度,可以以这类维度列作为分区列。分区粒度可以根据导入频次、分区数据量等进行评估。
    2. 历史数据删除需求:如有删除历史数据的需求(比如仅保留最近N天的数据)。使用复合分区,可以通过删除历史分区来达到目的。也可以通过在指定分区内发送DELETE于禁进行删除。
    3. 解决数据倾斜的问题:每个分区可以单独指定分桶数量。如按天分区,当每天的数据量差异很大的时,可以通过指定分区的分桶数,合理规划不同分区的数据,分桶列建议选择区分度大的列。
    # 带分区 建表
    CREATE TABLE student2
    (
    	dt DATE,
    	id INT,
    	name VARCHAR(50),
    	age INT,
    	count  BIGINT SUM DEFAULT '0'
    )
    AGGREGATE KEY (dt,id,name,age)
    PARTITION BY RANGE(dt)
    (
      PARTITION p202007 VALUES LESS THAN ('2020-08-01'),
      PARTITION p202008 VALUES LESS THAN ('2020-09-01'),
      PARTITION p202009 VALUES LESS THAN ('2020-10-01')
    )
    DISTRIBUTED BY HASH(id) buckets 10
    PROPERTIES("replication_num" = "1");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    3.数据模型
    1. AGGREGATE KEY 相同时,新旧记录将会进行聚合操作,目前支持SUM,MIN,MAX,REPLACE。
    2. UNIQUE KEY 新记录覆盖旧记录。
    3. DUPLICATE KEY 只指定排序列,相同的行并不会合并。适用于数据无需提前聚合的分析业务。

    1例子

    CREATE TABLE sales_order
    (
        orderid     BIGINT,
        status      TINYINT,
        username    VARCHAR(32),
        amount      BIGINT DEFAULT '0'
    )
    UNIQUE KEY(orderid)
    DISTRIBUTED BY HASH(orderid) BUCKETS 10;
    
    insert into sales_order values(1,1,'name1',100);
    insert into sales_order values(1,1,'name1',200);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述


    2例子

    CREATE TABLE sales_order
    (
        orderid     BIGINT,
        status      TINYINT,
        username    VARCHAR(32),
        amount      BIGINT DEFAULT '0'
    )
    UNIQUE KEY(orderid)
    DISTRIBUTED BY HASH(orderid) BUCKETS 10;
    
    insert into sales_order values(1,1,'name1',100);
    insert into sales_order values(1,1,'name1',200);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述


    3例子

    CREATE TABLE session_data
    (
        visitorid   SMALLINT,
        sessionid   BIGINT,
        city        CHAR(20),
        ip          varchar(32)
    )
    DUPLICATE KEY(visitorid, sessionid)
    DISTRIBUTED BY HASH(sessionid, visitorid) BUCKETS 10;
    
    insert into session_data values(1,1,'shanghai','www.111.com');
    insert into session_data values(1,1,'shanghai','www.111.com');
    insert into session_data values(3,2,'shanghai','www.111.com');
    insert into session_data values(2,2,'shanghai','www.111.com');
    insert into session_data values(2,1,'shanghai','www.111.com');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    4.Rollup

    Rollup可以理解为表的一个物化索引结构。Rollup可以调整列的顺序以增加前缀索引的命中率,也可以减少key列以增加数据的聚合度。

    以上面 3例子 为例子

    DESC expamle_tbl ALL;
    
    • 1

    在这里插入图片描述
    如果我们经常需要看某个城市的ip数,那么可以建立一个只有ip和city的rollup

    alter table session_data add rollup rollup_city_ip(city,ip);
    
    • 1

    在这里插入图片描述
    通过explain查看执行计划,是否使用到了rollup

    explain select ip from session_data where city= 'shanghai' ;
    
    • 1

    在这里插入图片描述

    5.数据导入
    1. Broker load (通过Broker进程访问并读取外部数据源(HDFS)导入Doris。用户通过MySql协议提交导入作业后,异步执行。通过show load命令查看导入结果。)
    2. Stream load (用户通过HTTP协议提交请求并携带原始数据创建导入。主要用于快速将本地文件或数据流中的数据导入到Doris。导入命令同步返回导入结果。)
    3. Insert (类似MySql中的insert语句,Doris提供insert into tbl select …;的方式从Doris的表中读取数据并导入到另一张表。或者通过insert into tbl values(…);的方式插入单条数据) 官方生产不建议
    4. Multi load (用户可以通过HTTP协议提交多个导入作业。Multi Load可以保证多个导入作业的原子生效)
    5. Routine load (用户通过MySql协议提交例行导入作业,生成一个常住线程,不间断的从数据源(如Kafka)中读取数据并导入Doris中)
    数据源导入方式
    对象存储(s3),HDFS使用Broker导入数据
    本地文件导入本地数据
    Kafka订阅Kafka数据
    Mysql、PostgreSQL,Oracle,SQLServer通过外部表同步数据
    通过JDBC导入使用JDBC同步数据
    导入JSON格式数据JSON格式数据导入
    MySQL BinlogBinlog Load
    6.数据导出

    我们不常用 详细操作请看 官方文档 这里

    7.SQL函数

    查看函数名

    7.删除数据
     delete from test_tbl PARTITION p1 where k1 = 1;
    
    • 1
    show builtin functions in test_db;
    
    • 1

    进阶使用

    1.表结构变更

    执行表结构 变更的基本过程,是通过原 Index 的数据,生成一份新 表结构 的 Index 的数据。其中主要需要进行两部分数据转换,一是已存在的历史数据的转换,二是在表结构 变更 执行过程中,新到达的导入数据的转换。

    ALTER TABLE tbl1
    ADD COLUMN k4 INT default "1" to rollup1,
    
    • 1
    • 2

    查看作业 ,取消作业

    SHOW ALTER TABLE COLUMN;
    CANCEL ALTER TABLE COLUMN FROM tbl_name;
    
    • 1
    • 2

    详细操作请看 官方文档 这里

    2. 表分区

    支持 根据 特定条件 进行 动态分区 也可以 创建 临时分区

    例子 创建一张调度单位为天,不删除历史分区的动态分区表

    create table student_dynamic_partition1
    (id int,
    time date,
    name varchar(50),
    age int
    )
    duplicate key(id,time)
    PARTITION BY RANGE(time)()
    DISTRIBUTED BY HASH(id) buckets 10
    PROPERTIES(
    "dynamic_partition.enable" = "true",
    "dynamic_partition.time_unit" = "DAY",
    "dynamic_partition.end" = "3",
    "dynamic_partition.prefix" = "p",
    "dynamic_partition.buckets" = "10",
     "replication_num" = "1"
     );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    查看分区表情况
    show partitions from student_dynamic_partition1;
    查看表下的所有分区
    show partitions from student_dynamic_partition1;
    
    • 1
    • 2
    • 3
    • 4
    3.分区缓存

    历史数据 写少读多 例如订单数据 15日自动签收 ,订单完成之后就相当于 历史固定数据 争对固定数据的 聚合操作 我们就可以开启分区缓存

    详细操作请看 官方文档 这里

    4.Join 优化
    5.物化视图

    物化视图其实是 Rollup 的一个超集 ,Rollup 具有一定的局限性,它不能基于明细模型做预聚合。

    详细操作请看 官方文档 这里

    6.Broker进阶
    7. 生态扩展
    1. 扩展表 (例如 odbc mysql 外表)
    2. Mysql to Doris ( 自动化全库创建doris odbc 表)
    3. Flink Doris cdc (flink 生态,cdc)

    学习资料

    技术解析:

    Apache Doris 向量化技术实现与后续规划

    Doris 存储层设计介绍 1—— 存储结构设计解析

    Doris 存储层设计介绍 2—— 写入流程、删除流程分析

    Doris 存储层设计介绍 3—— 读取流程、Compaction 分析

    Doris全面解析|Doris SQL 原理解析

    Doris全面解析|Doris Compaction机制解析

    Doris全面解析|Doris Stream Load原理解析

    Doris全面解析|Apache Doris 索引机制解析

    Doris 功能介绍-查询分析

    Doris 功能介绍-导入分析

    Doris 功能介绍-Proc 系统

    Doris 功能介绍-Proc 系统-/dbs

    Doris 功能介绍-Proc 系统-/statistic

    Doris 功能介绍-List Partition

    浅谈 Apache Doris FE 处理查询 SQL 源码解析

    Doris FE源码解读系列之源码编译

    【万字长文】Doris FE启动流程源码详细解析

    实战系列:

    聊聊 Apache Doris 的性能优化实战技巧

    Apache Doris ARM 架构编译

    Apache Doris Spark-Connecter实战

    使用Doris HyperLogLog近似去重

    基于Ansible实现Apache Doris快速部署运维指南

    通过Nginx TCP反向代理实现Apache Doris负载均衡

    Flink CDC 系列 - Flink CDC 如何简化实时数据入湖入仓

    Apache Doris Oracle ODBC外表使用指南

    Apache Doris Grafana监控指标介绍

    Apache Doris 元数据运维

    Apache Doris Bucket Shuffle Join 原理及使用

    Apache Doris Colocate Join 原理及使用

    Apache Doris SQL 日志审计

    使用 Grafana + Promethus 监控Apache Doris

    Flink 消费 Kafka实时写入 Apache doris(KFD)

    基于Apache doris的元数据管理系统

    ProxySQL实现Apache Doris FE高可用

    Doris 最佳实践-Compaction调优(1)

    Doris 最佳实践-Compaction调优(2)

    Doris 最佳实践-Compaction调优(3)

    用户案例:

    应用实践|Lifewit 数据平台基于Apache Doris的建设实践

    应用实践 | 物易云通基于 Apache Doris 的实时数据仓库建设

    应用实践 | Apache Doris 在网易互娱的应用实践

    特步集团基于 Apache Doris 的零售数据仓库项目实践

    Apache Doris 在京东广告平台的应用

    Apache Doris在京东双十一大促中的实践

    京东物流基于 Doris 的亿级数据自助探索应用

    Apache Doris物化视图与索引在京东的典型应用

    Apache Doris 在京东客服 OLAP 中的应用实践

    京东搜索实时 OLAP 探索与实践

    《Apache Doris 在百度商业大规模微服务全链路监控的实践》

    Doris在用户画像人群业务的应用

    基于Doris构建的小程序私域流量增长

    知乎用户画像与实时数据的架构与实践

    基于Apache Doris的小米增长分析平台实践

    Apache Doris 在小米集团的运维实践

    美团外卖实时数仓建设实践

    搜狐智能媒体数据仓库体系建设实践

    Doris on ES在快手商业化的最佳实践

    Apache Doris 在中仑网络的应用实践

    Apache Doris在一点资讯自媒体平台的应用

    新东方在线教育实时数仓的落地实践

    Doris在作业帮实时数仓中的应用&实践

    基于Doris的有道精品课数据中台建设实践

    Apache Doris 在 WeLab实时大数据平台的应用实践

    Apache Doris 在韵达物流领域的应用实践

    Apache Doris在蜀海供应链的实践

    教程手册:

    Doris使用手册重磅来袭!(八万字纯干货,建议收藏)——上篇

    Doris使用手册重磅来袭!(八万字纯干货,建议收藏)——下篇

    源码阅读与解析系列课程配套课件(提取码 ku45)

    视频资料

    Apache Doris 官方B站: https://space.bilibili.com/362350065/

    Apache Doris 总体介绍

    Apache Doris 基础概念入门

    Apache Doris 1.0版本特性解析

    Apache Doris 源码阅读与解析系列课程

    Apache PMC Chair 陈明雨专访

    Apache Doris存储层向量化改造设计与实现

    Apache Doris 向量化技术实现与后续规划

    Doris on ES的设计原理、技术实现与未来规划

    Doris核心功能介绍—预聚合引擎和物化视图

    Doris基于Hive表的全局字典设计与实现

    Doris的数据导入机制以及原子性保证

    Doris在韵达物流领域应用实践

    Apache Doris 0.15 新特性解读和RoadMap

    基于Iceberg拓展Doris数据湖能力的实践

    精品教程

    尚硅谷与 Apache Doris 联合出品教程

    黑马程序员与 Apache Doris 联合出品教程

  • 相关阅读:
    OpenGL 灰度图
    从产品角度分析羊了个羊为何能爆火
    postgresql-备份与恢复
    ZooKeeper的典型应用场景及实现
    java计算机毕业设计健身俱乐部管理系统源码+mysql数据库+系统+lw文档+部署
    Pytorch 基于LeNet的手写数字识别
    vue2组件库-上传组件
    混合 MPC:ABY 架构
    计算机毕业设计 基于SpringBoot的图书馆管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
    实例分割最全综述(入坑一载半,退坑止于此)
  • 原文地址:https://blog.csdn.net/u010020726/article/details/126662077
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号