亲爱的社区小伙伴们,Apache Doris 3.0.1 版本已于 2024 年 8 月 23 日正式发布。从 3.0 系列版本开始,Apache Doris 开始支持存算分离模式,用户可以在集群部署时选择采用存算一体模式或存算分离模式。同时在 3.0.1 版本中,Apache Doris 在存算分离、湖仓一体、半结构化数据分析、异步物化视图等方面进行了全面更新与改进,欢迎大家下载使用。
官网下载: https://doris.apache.org/download/
GitHub 下载: https://github.com/apache/doris/releases
行为变更
查询优化器
新增变量
use_max_length_of_varchar_in_ctas
,用于控制在执行CREATE TABLE AS SELECT
(CTAS)操作时 VARCHAR 类型的长度行为。此变量默认设置为 true。当设置为 true 时,如果 VARCHAR 类型的列源自一个表,则采用推导长度;否则,使用最大长度。当设置为 false 时,VARCHAR 类型将始终使用推导出的长度。#37069所有的数据类型将以小写形式展示,以保持与 MySQL 格式的兼容性。#38012
同一查询请求中的多条查询语句现在必须使用分号分隔。#38670
查询执行
- 将集群在执行 Shuffle 操作后默认的并行任务数设置为 100,这将提高大型集群中查询的稳定性和并发处理能力。#38196
存储
trash_file_expire_time_sec
的默认值已从 86400 秒更改为 0 秒,这意味着如果误删除文件并清空了 FE 回收站,数据将无法恢复。表属性
enable_mow_delete_on_delete_predicate
(在版本 3.0.0 中引入)已更名为enable_mow_light_delete
。显式事务现在被禁止对已写入数据的表执行 Delete 操作。
禁止对含有自增字段的表进行重量级的 Schema Change 操作。
新特性
任务调度
- 优化内部调度作业的执行逻辑,取消开始时间和立即执行参数之间的强关联。现在任务在创建时可以指定开始时间或选择立即执行,两者不再冲突,从而提高了调度的灵活性。#36805
存算分离
Lakehouse
新增会话变量
serde_dialect
,可以设置复杂类型的输出格式。#37039SQL 拦截功能现在支持外部表
- 更多内容,参考文档SQL 拦截
- Insert Overwrite 现在支持 Iceberg 表。#37191
异步物化视图
查询执行
- Group Concat 函数现在支持 DISTINCT 和 ORDER BY 选项。#38744
半结构化数据管理
ES Catalog 现在将 Elasticsearch 中的
nested
或object
类型映射为 Doris 的 JSON 类型。#37101新增
MULTI_MATCH
函数,支持在多个字段中匹配关键词,并能利用倒排索引加速搜索。#37722新增
explode_json_object
函数,可以将 JSON 数据中的 Object 展开为多行。#36887倒排索引现在支持 Memtable 前移,在多副本写入时只需构建一次索引,减少 CPU 消耗并提升性能。#35891
新增
MATCH_PHRASE
支持正向词距(slop),例如msg MATCH_PHRASE 'a b 2+'
可以匹配包含词 a 和 b,它们之间的词距不超过两个,并且 a 在 b 的前面;而普通的词距(slop)如果没有最后的加号+
,则不保证 a 在 b 的前面。#36356
其他
改进
存储
降低单个 BE 内磁盘间均衡导致写失败的可能性。#38000
降低 Memtable Limiter 的内存消耗。#37511
在替换分区操作时,将旧分区移动到 FE 回收站。#36361
优化了 Compaction 的内存消耗。#37099
增加了会话变量以控制 JDBC PreparedStatement 的审计日志,默认不打印。#38419
优化了 Group Commit 选择 BE 的逻辑。#35558
优化了列更新的性能。#38487
优化了
delete bitmap cache
的使用。#38761添加了配置以控制冷热分层时查询的亲和性。#37492
存算分离
遇到对象存储服务端限速时,现在会自动重试。#37199
适应存算分离模式下 Memtable Flush 的线程数。#38789
将 Azure 作为编译选项,以便支持在不支持 Azure 的环境中编译。
优化了对象存储访问限速的可观测性。#38294
允许 File Cache TTL 队列进行 LRU 淘汰,增加了 TTL 队列的可用性。#37312
优化了存算分离模式下 Balance Writeeditlog IO 次数。#37787
优化了存算分离模式下建表的速度,批量发送创建 Tablet 的请求。#36786
通过退避重试的方式,优化了本地 File Cache 可能不一致时导致的读取失败问题。#38645
Lakehouse
优化了 Parquet/ORC 格式读写操作的内存统计。#37234
Trino Connector Catalog 现在支持谓词下推。#37874
新增会话变量
enable_count_push_down_for_external_table
,用于控制是否开启外部表的count(*)
下推优化。#37046优化了 Hudi 快照读的读取逻辑,当快照为空时返回空集,与 Spark 行为保持一致。#37702
优化了 Hive 表分区列的读取性能。#37377
异步物化视图
透明改写计划速度提升了 20%。#37197
如果 Group Key 满足数据唯一性,在透明改写时不再进行上卷,以更好地进行嵌套匹配。#38387
透明改写现在可以更好地进行聚合消除,以提高嵌套物化视图的匹配成功率。#36888
MySQL 兼容性
查询优化器
显著提升了复杂查询的计划速度。#38317
根据数据分桶数量,自适应选择是否进行 Bucket Shuffle,以避免极端情况下的性能劣化。#36784
支持将 Limit 下推到第一阶段聚合,以提升性能。#34853
SQL 缓存现在支持包含用户变量的查询场景。#37915
优化了聚合语义不合法时的错误信息。#38122
查询执行
适配了 AggState 的 2.1 到 3.x 兼容性,并修复了 Coredump 问题。#37104
重构了不带 Join 时 Local Shuffle 的策略选择。#37282
将内部表查询的 Scanner 修改为异步方式,以防止查询内部表时卡住。#38403
优化了 Join 算子构建 Hash 表时的 Block Merge 过程。#37471
优化了 MultiCast 持有锁的时间。#37462
优化了 gRPC 的 keepAliveTime 并增加了链接监测机制,降低了查询过程中因 RPC 错误导致查询失败的概率。#37304
当内存超限时,清理 Jemalloc 中的所有 Dirty Pages。#37164
优化了
aes_encrypt
/decrypt
函数对常量类型的处理性能。#37194优化了
json_extract
函数对常量数据的处理性能。#36927优化了
ParseUrl
函数对常量数据的处理性能。#36882
半结构化数据管理
Bitmap 索引现在默认使用反向索引,
enable_create_bitmap_index_as_inverted_index
默认设置为 true。#36692在存算分离模式下,DESC 现在可以查看 VARIANT 类型的子列。#38143
移除了倒排索引查询时检查文件是否存在的步骤,以降低远程存储的访问延迟。#36945
ARRAY / MAP / STRUCT 复杂类型现在支持 AGG 表的
replace_if_not_null
。#38304倒排索引查询现在在 MOW 表上与 Duplicate 表一致。#37428
优化了倒排索引加速 IN 查询的性能。#37395
TOPN 查询时减少了多余的内存分配,以提升性能。#37429
当创建带分词的倒排索引时,现在自动开启
support_phrase
选项,以加速match_phrase
系列短语查询。#37949
其他
Audit Log 现在可以记录 SQL 类型。#37790
增加对
information_schema.processlist
Show All FE 的支持。#38701缓存 Ranger 的
atamask
和rowpolicy
,以加速查询效率。#37723优化 Job Manager 的元数据管理,在修改元数据后立即释放锁,以减少锁持有时间。#38162
缺陷修复
升级
修复从 2.1 版本升级时 mtmv load 失败的问题。#38799
修复在 2.1 版本升级时找不到
null_type
的问题。#39373修复从 2.1 版本升级到 3.0 版本时权限持久化的兼容性问题。#39288
导入
修复 CSV 格式解析中,换行符被包围符包围时解析失败的问题。#38347
Group Commit 现在支持新优化器。#37002
修复 JDBC setNull 时 Group Commit 报告数据错误的问题。#38262
优化 Group Commit 遇到
delete bitmap lock
错误时的重试逻辑。#37600修复 Routine Load 不能使用 CSV 包围符和转义符的问题。#38402
修复 Routine Load Job 名字大小写混用时无法显示的问题。#38523
优化 FE 主从切换时主动恢复 Routine Load 的逻辑。#37876
修复 Kafka 中数据全部过期时 Routine Load 暂停的问题。#37288
修复
show routine load
返回空结果的问题。#38199修复 Routine Load 多表流式导入时的内存泄露问题。#38255
修复 Stream Load 不返回 Error URL 的问题。#38325
修复导入少于预期的 Segment 时可能不报错的问题。#36753
修复 Load Stream 泄露的问题。#38912
优化下线节点对导入操作的影响。#38198
修复 Insert Into 空数据情况下事务不结束的问题。#38991
存储
01 备份与恢复
02 Compaction(压缩)
修复有序数据压缩时 Cumu Compaction 处理 Delete 错误的的问题。#38742
修复顺序压缩优化导致的聚合表重复 Key 问题。#38224
修复大宽表下压缩操作导致 Coredump 的问题。#37960
修复压缩任务并发统计不准确导致的压缩饥饿问题。#37318
03 MOW Unique Key(MOW 唯一键)
解决累计压缩删除 Delete Sign 导致的副本间数据不一致问题。#37950
在新的优化器下,MOW Delete 表现在使用部分列更新。#38751
修复存算分离下 MOW 表可能出现的重复 Key 问题。#39018
修复 MOW Unique 和 Duplicate 表不能修改列顺序的问题。#37067
修复 Segcompaction 可能导致的数据正确性问题。#37760
修复列更新可能出现的内存泄露问题。#37706
04 其他
修复 FE 重启时自增 ID 可能重复的问题。#37306
修复 Delete 操作优先级队列可能的排队问题。#37169
优化 Delete 重试逻辑。#37363
修复新优化器下建表语句中
bucket = 0
的问题。#38971修复 FE 生成 Image 失败时错误地报告成功的问题。#37508
修复 FE 下线节点时使用错误 nodename 可能导致的 FE 成员不一致问题。#37987
修复 CCR 增加分区可能失败的问题。#37295
修复倒排索引文件中
int32
溢出的问题。#38891修复 TRUNCATE TABLE 失败可能导致 BE 不能下线的问题。#37334
修复手动触发磁盘迁移时可能出现的 Coredump 问题。#37712
存算分离
修复
show create table
可能会展示两次file_cache_ttl_seconds
属性的问题。#38052修复设置 File Cache TTL 后,Segment Footer TTL 未正确设置的问题。#37485
修复 File Cache 因大量转换 Cache 类型可能会导致 Coredump 的问题。#38518
修复 File Cache 可能会泄漏 fd 的问题。#38051
修复 Schema Change Job 覆盖 Compaction Job 导致 Base Tablet Compaction 不能正常完成的问题。#38210
修复 Base Compaction Score 因 Data Race 可能会不准确的问题。#38006
修复导入返回的错误信息可能不能正确上传到对象存储的问题。#38359
修复存算分离模式和存算一体模式 2PC 导入返回信息不一致的问题。#38076
修复 File Cache 预热未正确设置 File Size 导致 Coredump 的问题。#38939
修复部分列更新没有正确出列 Delete 的问题。#37151
修复 Observer 遇到
-230
错误没有进行正确重试的问题。#37625修复
show load
带条件时没有正确 analyze 的问题。#37656修复存算分离模式下
show streamload
导致 BE Coredump 的问题。#37903修复
copy into
在严格模式下未正确校验列名的问题。#37650修复一表多流导入没有权限的问题。#38878
修复 getVersionUpdateTimeMs 可能会越界的问题。#38074
修复 FE Azure Blob List 没有实现正确的问题。#37986
修复 Azure Blob 回收时间计算不准确导致不触发回收的问题。#37535
修复存算分离模式下倒排索引文件漏删的问题。#38306
Lakehouse
修复 Oracle Catalog 读取二进制数据的问题。#37078
修复多 FE 情况下,获取外表元数据可能导致的死锁问题。#37756
修复 JNI Scanner 打开失败导致 BE 节点宕机的问题。#37697
修复 Trino Connector Catalog 读取 Date 类型慢的问题。#37266
优化 Hive Catalog 的 Kerberos 认证逻辑。#37301
修复解析 MinIO 属性时,Region 属性可能解析错误的问题。#37249
修复 FE 创建过多的 FileSystem 导致内存泄漏的问题。#36954
修复读取 Paimon 时区信息错误的问题。#37716
修复 Hive 写回操作可能导致的线程泄漏问题。#36990
修复开启 Hive Metastore Event 同步功能导致的空指针问题。#38421
修复创建 Catalog 时报错信息不清晰或卡死的情况。#37551
修复读取 Hive Text 格式表时与 Hive 行为不一致的问题。#37638
修复切换 Catalog 和 Database 逻辑错误的问题。#37828
MySQL 兼容性
- 修复开启 SSL 后,MySQL 协议中某些 Flag 设置不正确的问题。#38086
异步物化视图
修复基表分区数量非常多时可能导致的构建失败问题。#37589
修复构建嵌套物化视图时,即使可以进行分区刷新,也错误地进行了全表刷新的问题。#38698
修复分区刷新在分析分区依赖时,不能处理同时存在合法和不合法依赖关系的问题。#38367
修复最终返回结果包含 NULL Type 导致异步物化视图可能构建失败的问题。#37019
当包含同名的同步物化视图和异步物化视图时,透明改写可能出现规划错误。#37311
同步物化视图
查询优化器
修复查询和 Delete 等操作同时进行可能导致的死锁问题。#38660
修复分桶裁剪在 Decimal 列分桶上可能错误裁剪的问题。#37889
修复当 Mark Join 参与 Join Reorder 时,规划可能出现错误的问题。#39152
修复关联子查询关联条件不是简单列时,结果错误的问题。#37644
修复分区裁剪不能正确处理 or 表达式的问题。#38897
修复当进行 JOIN 和 AGG 交换执行顺序的优化时,可能导致的规划报错问题。#37343
修复
str_to_date
在 DATEV1 类型上进行常量折叠计算错误的问题。#37360修复 ACOS 函数常量折叠返回非 NaN 的问题。#37932
修复偶尔出现的规划报错 “The children format needs to be [WhenClause+, DefaultValue?]“ 的问题。#38491
修复当投影中包含窗口函数,且同时存在一个列的原始列和其别名时,规划可能出现错误的问题。#38166
修复当聚合参数中含有 Lambda 表达式,可能导致规划报错的问题。#37109
修复在极端情况下可能出现的 Insert 报错:”MultiCastDataSink cannot be cast to DataStreamSink” 的问题。#38526
修复创建表时,新优化器对于传入的
char(0)/varchar(0)
没有正确处理的问题。#38427修复
char(255) toSql
行为不正确的问题。#37340修复
agg_state
类型内部的 nullable 属性可能规划错误的问题。#37489修复 Mark Join 时行数统计不准确的问题。#38270
查询执行
修复多个场景下,Pipeline 执行引擎被卡住导致查询不结束的问题。#38657 #38206 #38885 #38151 #37297
修复 NULL 和非 NULL 列在差集计算时导致的 Coredump 问题。#38750
修复 Delete 语句中 DECIMAL 类型为纯小数时报错的问题。#37801
修复
width_bucket
函数结果错误的问题。#37892修复当单行数据很大且返回结果集也很大时(超过 2GB)查询报错的问题。#37990
修复单副本导入时 rpc 链接没有正确释放导致的 Coredump 问题。#38087
修复
foreach
函数处理 NULL 导致的 Coredump 问题。#37349修复 stddev 在 DecimalV2 类型下结果错误的问题。#38731
修复
bitmap union
计算性能慢的问题。#37816修复 Profile 中聚合算子的 RowsProduced 没有设置的问题。#38271
修复
jemalloc cache memory tracker
记录不准确的问题。#37464增加配置项
enable_stacktrace
,用户可以通过设置此选项来控制 BE 日志中是否输出异常栈。#37713修复 Arrow Flight SQL 在设置
enable_parallel_result_sink
为 false 时不能正常工作的问题。#37779修复
sleep
函数传参 const 字符串时的 Coredump 问题。#37681增加审计日志的队列长度,解决了数千并发场景下审计日志不能正常记录的问题。#37786
修复创建 Workload Group 导致的线程数过多,导致 BE Coredump 的问题。#38096
修复 MULTI_MATCH_ANY 函数导致的 Coredump 问题。#37959
修复
insert overwrite auto partition
导致事务回滚的问题。#38103修复 TimeUtils formatter 没有使用正确时区的问题。#37465
修复 week/yearweek 常量折叠场景下结果错误的问题。#37376
修复
collect_set
函数结合窗口函数使用时 Coredump 的问题。#38234修复
percentile_approx
在滚动升级过程中导致的 Coredump 问题。#39321修复
mod
函数在异常输入时导致的 Coredump 问题。#37999修复 Broadcast Join 在 probe 开始运行时 Hash Table 构建未完成的问题。#37643
修复多线程下执行相同表达式可能导致 Java UDF 结果错误的问题。#38612
修复
conv
函数返回类型错误导致的溢出问题。#38001修复
json_replace
函数返回类型不正确的问题。#3701修复
percentile
聚合函数 Nullable 属性设置不合理的问题。#37330修复
histogram
函数结果不稳定的问题。#38608修复 Profile 中 Task State 显示不正确的问题。#38082
修复系统刚启动时部分 query 被错误取消的问题。#37662
半结构化数据管理
修复压缩过程中索引大小统计错误的问题。#37232
修复
array_range
和array_with_const
函数在大数据量下内存占用高的问题。#38284 #37495修复选择 ARRAY / MAP / STRUCT 类型的列时可能出现的 Coredump 问题。#37936
修复 Stream Load 指定 jsonpath 时 simdjson 解析错误导致导入失败的问题。#38490
修复 JSON 数据中有重复 Key 时处理异常的问题。#38146
修复 DROP INDEX 后可能出现查询报错的问题。#37646
修复索引压缩时在合并行检查中的错误返回问题。#38732
倒排索引 v2 格式现在支持修改列名。#38079
修复没有索引时 MATCH 函数匹配空字符串时 Coredump 的问题。#37947
修复 FE 重启后
row_store_page_size
不正确的问题。#38240
其他
修复时区配置问题,现在默认时区不再固定为 UTC+8,而是从系统配置中获取。#37294
修复由于存在多个 JSR 规范实现导致使用 Ranger 时出现的类冲突问题。#37575
修复部分 BE 代码中字段可能未初始化的问题。#37403
修复 Random Distributed 表 Delete 语句报错的问题。#37985
修复创建同步物化视图时错误地需要基表的
alter_priv
权限问题。#38011修复当 TVF 中使用了 Resource 时未对 Resource 鉴权的问题。#36928
致谢
@133tosakarin、 @924060929、 @AshinGau、 @Baymine、 @BePPPower、 @BiteTheDDDDt、 @ByteYue、 @CalvinKirs、 @Ceng23333、 @DarvenDuan、 @FreeOnePlus、 @Gabriel39、 @HappenLee、 @JNSimba、 @Jibing-Li、 @KassieZ、 @Lchangliang、 @LiBinfeng-01、 @Mryange、 @SWJTU-ZhangLei、 @TangSiyang2001、 @Tech-Circle-48、 @Vallishp、 @Yukang-Lian、 @Yulei-Yang、 @airborne12、 @amorynan、 @bobhan1、 @cambyzju、 @cjj2010、 @csun5285、 @dataroaring、 @deardeng、 @eldenmoon、 @englefly、 @feiniaofeiafei、 @felixwluo、 @freemandealer、 @gavinchou、 @ghkang98、 @hello-stephen、 @hubgeter、 @hust-hhb、 @jacktengg、 @kaijchen、 @kaka11chen、 @keanji-x、 @liaoxin01、 @liutang123、 @luwei16、 @luzhijing、 @lxr599、 @morningman、 @morrySnow、 @mrhhsg、 @mymeiyi、 @platoneko、 @qidaye、 @qzsee、 @seawinde、 @shuke987、 @sollhui、 @starocean999、 @suxiaogang223、 @w41ter、 @wangbo、 @wangshuo128、 @whutpencil、 @wsjz、 @wuwenchi、 @wyxxxcat、 @xiaokang、 @xiedeyantu、 @xinyiZzz、 @xy720、 @xzj7019、 @yagagagaga、 @yiguolei、 @yujun777、 @z404289981、 @zclllyybb、 @zddr、 @zfr9527、 @zhangbutao、 @zhangstar333、 @zhannngchen、 @zhiqiang-hhhh、 @zjj、 @zy-kkk、 @zzzxl1993