Doris-(六)-1.0 新特性

news/2025/1/11 7:59:05/

1、1.0 新特性

Doris 1.0 开始官网提供了编译好的二进制包,可以直接下载使用。如果老版本想滚动升
级新版本,可以参照官方说明:https://doris.apache.org/zh-CN/installing/upgrade.html
版本通告:https://mp.weixin.qq.com/s/Ju3K67jOrBdJ8BX-V1IIgw

1.1 向量化执行引擎

过去 Apache Doris 的 SQL 执行引擎是基于行式内存格式以及基于传统的火山模型进行设计的,在进行 SQL 算子与函数运算时存在非必要的开销,导致 Apache Doris 执行引擎的效率受限,并不适应现代 CPU 的体系结构。向量化执行引擎的目标是替换 Apache Doris 当前的行式 SQL 执行引擎,充分释放现代 CPU 的计算能力,突破在 SQL 执行引擎上的性能限制,发挥出极致的性能表现。

基于现代 CPU 的特点与火山模型的执行特点,向量化执行引擎重新设计了在列式存储系统的 SQL 执行引擎:
⚫ 重新组织内存的数据结构,用 Column 替换 Tuple,提高了计算时 Cache 亲和度,分支预测与预取内存的友好度
⚫ 分批进行类型判断,在本次批次中都使用类型判断时确定的类型,将每一行类型判断的虚函数开销分摊到批量级别。
⚫ 通过批级别的类型判断,消除了虚函数的调用,让编译器有函数内联以及 SIMD 优化的机会从而大大提高了 CPU 在 SQL 执行时的效率,提升了 SQL 查询的性能。
https://blog.csdn.net/qq_35423190/article/details/123129172
https://zhuanlan.zhihu.com/p/344706733

1.1.1 使用方式

set enable_vectorized_engine = true;
set batch_size = 4096;

batch_size 代表了 SQL 算子每次进行批量计算的行数。Doris 默认的配置为 1024,这个配
置的行数会影响向量化执行引擎的性能与 CPU 缓存预取的行为。官方推荐配置为 4096。

1.1.2 准备测试表

CREATE TABLE IF NOT EXISTS test_db.user
(`user_id` LARGEINT NOT NULL COMMENT "用户 id",`username` VARCHAR(50) NOT NULL COMMENT "用户昵称",`city` VARCHAR(20) NOT NULL COMMENT "用户所在城市",`age` SMALLINT NOT NULL COMMENT "用户年龄",`sex` TINYINT NOT NULL COMMENT "用户性别",`phone` LARGEINT NOT NULL COMMENT "用户电话",`address` VARCHAR(500) NOT NULL COMMENT "用户地址",`register_time` DATETIME NOT NULL COMMENT "用户注册时间"
)
UNIQUE KEY(`user_id`, `username`)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 10
PROPERTIES("replication_num" = "1");
insert into test_db.user values\
(10000,'wuyanzu',' 北 京 ',18,0,12345678910,' 北 京 朝 阳 区 ','2017-10-01 
07:00:00'),\
(20000,'wuyanzu',' 北 京 ',19,0,12345678910,' 北 京 朝 阳 区 ','2017-10-01 
07:00:00'),\
(30000,'zhangsan','北京',20,0,12345678910,'北京海淀区','2017-11-15 
06:10:20');

1.1.3 查看效果

explain select name from user where user_id > 20000

开启了向量化执行引擎之后,在 SQL 的执行计划之中会在 SQL 算子前添加一个 V 的
标识。

1.1.4 注意事项

1)NULL 值
由于 NULL 值在向量化执行引擎中会导致性能劣化。所以在建表时,将对应的列设置
为 NULL 通常会影响向量化执行引擎的性能。这里推荐使用一些特殊的列值表示 NULL 值,
并在建表时设置列为 NOT NULL 以充分发挥向量化执行引擎的性能。
2)与行存执行引擎的部分差异
在绝大多数场景之中,用户只需要默认打开 session 变量的开关,就可以透明地使用向
量化执行引擎,并且使 SQL 执行的性能得到提升。但是,目前的向量化执行引擎在下面一
些微小的细节上与原先的行存执行引擎存在不同,需要使用者知晓。这部分区别分为两类
(1)a 类 :行存执行引擎需要被废弃和不推荐使用或依赖的功能
⚫ Float 与 Double 类型计算可能产生精度误差,仅影响小数点后 5 位之后的数字。如
果对计算精度有特殊要求,请使用 Decimal 类型。
⚫ DateTime 类型不支持秒级别以下的计算或 format 等各种操作,向量化引擎会直接
丢弃秒级别以下毫秒的计算结果。同时也不支持 microseconds_add 等,对毫秒计算
的函数。
⚫ 有符号类型进行编码时,0 与-0 在 SQL 执行中被认为是相等的。这可能会影响
distinct,group by 等计算的结果。
⚫ bitmap/hll 类型在向量化执行引擎中:输入均为 NULL,则输出的结果为 NULL 而
不是 0。
(2)b 类: 短期没有在向量化执行引擎上得到支持,但后续会得到开发支持的功能
⚫ 不支持原有行存执行引擎的 UDF 与 UDAF。
⚫ string/text 类型最大长度支持为 1MB,而不是默认的 2GB。即当开启向量化引擎后,
将无法查询或导入大于 1MB 的字符串。但如果关闭向量化引擎,则依然可以正常
查询和导入。
⚫ 不支持 select … into outfile 的导出方式。
⚫ 不支持 external broker 外表。
10.2 Hive 外表
Hive External Table of Doris 提供了 Doris 直接访问 Hive 外部表的能力,外部表省去
了繁琐的数据导入工作,并借助 Doris 本身的 OLAP 的能力来解决 Hive 表的数据分析问
题:
⚫ 支持 Hive 数据源接入 Doris
⚫ 支持 Doris 与 Hive 数据源中的表联合查询,进行更加复杂的分析操作

1.2.1 基本语法

CREATE [EXTERNAL] TABLE table_name (col_name col_type [NULL | NOT NULL] [COMMENT "comment"]
) ENGINE=HIVE
[COMMENT "comment"]
PROPERTIES ('property_name'='property_value',...
);

参数说明:
(1)外表列
⚫ 列名要与 Hive 表一一对应
⚫ 列的顺序需要与 Hive 表一致
⚫ 必须包含 Hive 表中的全部列
⚫ Hive 表分区列无需指定,与普通列一样定义即可。
(2)ENGINE 需要指定为 HIVE
(3)PROPERTIES 属性:
⚫ hive.metastore.uris:Hive Metastore 服务地址
⚫ database:挂载 Hive 对应的数据库名
⚫ table:挂载 Hive 对应的表名

1.2.2 类型匹配

支持的 Hive 列类型与 Doris 对应关系如下表:

HiveDoris描述
BOOLEANBOOLEAN
CHARCHAR当前仅支持 UTF8 编码
VARCHARVARCHAR当前仅支持 UTF8 编码
TINYINTTINYINT
SMALLINTSMALLINT
INTINT
BIGINTBIGINT
FLOATFLOAT
DOUBLEDOUBLE
DECIMALDECIMAL
DATEDATE
TIMESTAMPDATETIMETimestamp 转 成 Datetime会损失精度

注意:
⚫ Hive 表 Schema 变更不会自动同步,需要在 Doris 中重建 Hive 外表。
⚫ 当前 Hive 的存储格式仅支持 Text,Parquet 和 ORC 类型
⚫ 当前默认支持的 Hive 版本为 2.3.7、3.1.2,未在其他版本进行测试。后续后支持
更多版本。

1.2.3 使用示例

完成在 Doris 中建立 Hive 外表后,除了无法使用 Doris 中的数据模型(rollup、预聚合、
物化视图等)外,与普通的 Doris OLAP 表并无区别
1)Hive 中创建测试表:

CREATE TABLE `test11` (`k1` int NOT NULL COMMENT "",`k2` char(10) NOT NULL COMMENT "",`k3` timestamp NOT NULL COMMENT "",`k5` varchar(20) NOT NULL COMMENT "",`k6` double NOT NULL COMMENT ""
)
insert into test11 values (1,'a',unix_timestamp(),'haha',1.0);

2)Doris 中创建外表

CREATE TABLE `t_hive` (`k1` int NOT NULL COMMENT "",`k2` char(10) NOT NULL COMMENT "",`k3` datetime NOT NULL COMMENT "",`k5` varchar(20) NOT NULL COMMENT "",`k6` double NOT NULL COMMENT ""
) ENGINE=HIVE
COMMENT "HIVE"
PROPERTIES (
'hive.metastore.uris' = 'thrift://hadoop1:9083',
'database' = 'test',
'table' = 'test11'
);

3)查询外表

select * from t_hive;

1.3 Laterval view 语法

通 过 Lateral View 语 法 , 我 们 可 以 使 用 explod_bitmap 、 explode_split 、
explode_jaon_array 等 Table Function 表函数,将 bitmap、String 或 Json Array 由一列展
开成多行,以便后续可以对展开的数据进行进一步处理(如 Filter、Join 等)。
1)创建测试表:

CREATE TABLE test3 (k1 INT,k2 varchar(30)) 
DISTRIBUTED BY HASH (k1) BUCKETS 2 
PROPERTIES("replication_num" = "1");
INSERT INTO test3 VALUES (1,''), (2,null), (3,','), 
(4,'1'),(5,'1,2,3'),(6,'a,b,c');

2)设置参数开启

set enable_lateral_view=true;

3)explode_bitmap:展开一个 bitmap 类型

select k1, e1 from test3 lateral view 
explode_bitmap(bitmap_from_string("1")) tmp1 as e1 order by k1, e1;

4)explode_split:将一个字符串按指定的分隔符分割成多个子串

select k1, e1 from test3 lateral view explode_split(k2, ',') tmp1 
as e1 order by k1, e1;

5)explode_json_array:展开一个 json 数组

select k1, e1 from test3 lateral view 
explode_json_array_int('[1,2,3]') tmp1 as e1 order by k1, e1;
select k1, e1 from test3 lateral view 
explode_json_array_double('[1.0,2.0,3.0]') tmp1 as e1 order by k1, 
e1;
select k1, e1 from test3 lateral view 
explode_json_array_string('[1,"b",3]') tmp1 as e1 order by k1, e1;

1.4 mysqldump 导出

Doris 1.0 支持通过 mysqldump 工具导出数据或者表结构,下面几种操作:
1)导出 test 数据库中的 user 表:

mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces --databases 
test_db --tables user > dump1.sql

2)导出 test_db 数据库中的 user 表结构:

mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces --databases 
test_db --tables user --no-data > dump2.sql

3)导出 test_db 数据库中所有表:

mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces --databases 
test_db

4)导出所有数据库和表

mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces --all-databases 

5)导出的结果可以重定向到文件中,之后可以通过 source 命令导入到 Doris 中

source /opt/module/doris-1.0.0/dump1.sql

http://www.ppmy.cn/news/7268.html

相关文章

HTTP协议及Servlet详解

目录 HTTP协议 1、HTTP协议简介 2、HTTP协议特点 3、HTTP协议通信流程(工作原理) 4、HTTP报文格式 4.1、HTTP请求报文 4.2、HTTP响应报文 4.3、HTTP状态消息 Servlet详解 1、Servlet核心接口和类 1.1、Servlet接口 1.2、GenericServlet抽象类 …

推荐系统从入门到入门(1)——推荐系统综述与协同过滤

本系列博客总结了不同框架、不同算法、不同界面的推荐系统,完整阅读需要大量时间(又臭又长),建议根据目录选择需要的内容查看,欢迎讨论与指出问题。 目录 系列文章梗概 系列文章目录 一、问题背景介绍 1.推荐算法与…

SpringBoot常用注解

目录1 SpringBootApplication2 Spring Bean相关2.1 Autowired2.2 Component/Controller/Service/Repository2.3 RestController2.4 Scope2.5 Configuration3 处理常见的 HTTP 请求类型3.1 GetMapping3.2 PostMapping3.3 PutMapping3.3 DeleteMapping4 前后端传值4.1 PathVariab…

全志 Tina Linux 系统调试 使用指南 GDB gdbserver coredump perf strace valgind

文章目录Tina_Linux_系统调试_使用指南1 概述2 调试方法及工具2.1 内核日志2.2 GDB2.2.1 介绍2.2.2 配置2.2.3 使用2.2.4 更多用法2.2.5 注意事项2.3 gdbserver.2.3.1 介绍2.3.2 配置2.3.3 使用2.4 coredump.2.4.1 介绍2.4.2 配置2.4.3 配置生成coredump文件.2.4.4 通过gdb定位…

MergeTree写入查询流程分析

基础概念回顾 前面几节我们分别详细分析了分区,索引,数据存储相关原理,这些组件配合在一起给Clickhouse数据库带来非常高效的查询性能。前面的文章也单独介绍了这几个组件。接下来,就分别从写入过程、查询过程,以及数…

好几张图片合成一个PDF,不能错过的小技巧!

图片可以说是我们日常生活中就经常接触的文件啦,我们只要拥有摄像设备,在很多不同场景下都可以实现拍照自由。可是随着我们的图片文件的增多,我们会更多使用一些方法来更好保存这些比较珍贵的图像。比较常用的有把图片转换成一个PDF文件进行保…

rocketmq搭建启动集成springboot落地并监控

目录 一、rocketmq服务器搭建启动: 二、springboot 集成rocketmq落地: 三、可视化页面集成: rocketmq是最近很流行的消息中间件,有很多的优点,比如多个topic也不会引起性能问题;今天我们开始搭建启动集成…

专利申请与专利转让有什么区别?

专利申请与专利转让有什么区别? 一、专利转让和专利申请的流程不同 专利转让的流程: (1)找到合适的转让途径; (2)专利转让人和专利受让人进行签署专利权转让合同; (3)填写专利转让相关文件,需要严格按照国家规定形式进行填写&#…