Doris-(六)-1.0 新特性

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有语忆语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值