Presto Release 0.161 技术详解:ORDER BY 语义变更、EXCEPT 正确性修复与连接器增强

发布时间:2026/9/24 6:20:39

Presto Release 0.161 技术详解:ORDER BY 语义变更、EXCEPT 正确性修复与连接器增强 大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载导读本文基于 Presto 官方发布说明 release-0.161.rst系统梳理该版本在 SQL 语义、查询规划与执行、连接器Hive / JMX三方面带来的变更并结合当前仓库源码逐条剖析其底层实现与影响。读完本文你将掌握嵌套 EXCEPT 语义问题的根因、ORDER BY 列解析规则向 SQL 标准对齐带来的行为变化及其迁移开关deprecated.legacy-order-by/legacy_order_by、map_concat与map()函数实现的性能优化细节、SHOW COLUMNS/DESCRIBE新增 extra 信息列的用法以及jmx.dump-tables对转义逗号的支持方式。一、版本变更总览Release 0.161 是一个典型的正确性修复 语义对齐 性能优化组合版本变更集中在以下三个层面层面核心变更SQL 语义与查询处理嵌套 EXCEPT 正确性修复、ORDER BY 列解析对齐 SQL 标准破坏性变更、prepared statements 相关故障修复函数与性能map_concat空参性能优化、新增map()空 map 构造函数、连接条件表达式性能改进连接器Hive 列注释信息迁移到 extra 字段、JMXjmx.dump-tables支持转义逗号接口与运维移除/v1/executeHTTP 资源、403 FORBIDDEN 错误信息改进、SHOW COLUMNS/DESCRIBE新增列二、General Changes核心正确性修复与语义变更2.1 嵌套 EXCEPT 子句的正确性修复该版本修复了多个嵌套EXCEPT子句查询的正确性问题。SQL 集合运算具有结合律与优先级规则EXCEPT与UNION、INTERSECT的运算优先级不同且EXCEPT本身不可任意交换顺序。此前形如a EXCEPT (b EXCEPT c)的查询被错误地等价于a EXCEPT b EXCEPT c即括号被忽略导致求值顺序错误、返回结果不正确。0.161 修复了括号语义的解析与规划过程确保嵌套 EXCEPT 按标准集合运算语义求值。从当前仓库的分析器源码可以看到EXCEPT语句节点由 StatementAnalyzer.java 负责处理集合运算UNION / INTERSECT / EXCEPT在规划阶段会被转换为对应的 SetOperation 执行计划因此此类 bug 的修复位于解析与语义分析链路中。2.2 prepared statements 相关故障修复0.161 修复了三个与 prepared statements 相关的故障连接条件join criteria中包含参数的 prepared statements在执行时失败。参数占位符?在分析阶段需要被绑定到具体类型当参数出现在 join 条件中时类型推导与绑定链路此前存在缺陷。描述DESCRIBE包含聚合的 prepared statements 输出时失败。DESCRIBE OUTPUT需要推断结果列的类型聚合表达式参与时推断逻辑不完整。在聚合或子查询上下文中使用 lambda 表达式时出现规划失败planning failure。lambda 参数在聚合/子查询作用域内的符号解析与闭包捕获此前未覆盖完整导致计划生成阶段抛错。这三项修复都属于分析器analyzer与规划器planner对延迟绑定表达式的处理完善实质是让 prepared statements 的占位符参数与 lambda 在更复杂的表达式中也能正确完成类型推导与作用域解析。2.3 ORDER BY 列解析规则对齐 SQL 标准破坏性变更这是 0.161 中最重要的语义变更ORDER BY的列解析规则被修正为符合 SQL 标准的行为这是一次破坏向后兼容的语义变化。变更前的行为旧语义ORDER BY中出现的名称会先尝试解析为SELECT列表中的输出列别名再回退到源表的列这与部分数据库方言一致但不符合 SQL 标准。变更后的行为标准语义ORDER BY中的名称严格遵循 SQL 标准解析规则——优先解析为输入源表/子查询列输出列别名仅在限定场景下生效。这消除了别名遮蔽源列导致的歧义结果。为便于存量查询迁移0.161 提供了两个恢复开关配置项deprecated.legacy-order-by会话属性legacy_order_by# config.properties 中恢复旧行为 deprecated.legacy-order-bytrue-- 会话级恢复旧行为 SET SESSION legacy_order_by true;需要说明的是从当前仓库的视角看FeaturesConfig.java 已将deprecated.legacy-order-by列入DefunctConfig注解已废弃配置清单说明该配置项在后续版本中最终被移除——语义已彻底完成向 SQL 标准的迁移旧行为不再可恢复。同时在 release-0.179.rst 中仍可见legacy_order_by会话属性的踪迹修复了GROUPING()在该会话属性开启时的规划失败表明legacy_order_by会话属性在 0.161 之后的多个版本中依然被保留用于兼容旧语义。升级到 0.161 的团队应重点回归验证包含ORDER BY与输出列同名的查询。2.4 403 FORBIDDEN 错误信息改进与连接条件性能优化错误信息改进当协调节点coordinator对客户端请求返回403 FORBIDDEN时错误信息更加明确便于排查访问控制access control导致的拒绝问题。连接条件性能优化对于 join 条件中引用了连接一侧列的表达式如t1.a t2.a 1这类单侧表达式优化了执行性能。这类表达式此前可能在每行上重复计算或引入不必要的符号传播0.161 改进了其规划与执行路径。三、函数与性能map_concat 优化与新增 map() 构造器3.1 map_concat一个参数为空时的性能优化map_concat用于拼接多个 map该版本优化了其中一个参数为空 map时的执行性能。当前仓库中的实现 MapConcatFunction.java 清晰地印证了这一优化思路public static Block mapConcat(MapType mapType, Block[] maps) { int entries 0; int lastMapIndex maps.length - 1; int firstMapIndex lastMapIndex; for (int i 0; i maps.length; i) { entries maps[i].getPositionCount(); if (maps[i].getPositionCount() 0) { lastMapIndex i; firstMapIndex min(firstMapIndex, i); } } if (lastMapIndex firstMapIndex) { return maps[lastMapIndex]; } ... }实现逻辑是先遍历所有输入 map统计条目数并定位第一个与最后一个非空map如果只有一个非空 maplastMapIndex firstMapIndex则直接返回该 map跳过后续构建OptimizedTypedSet并逐键 union 的开销。也就是说map_concat(map1, MAP(ARRAY[], ARRAY[]))这类一个参数为空的调用现在可以零拷贝返回非空的那个参数无需做任何键合并工作。3.2 新增 map() 构造空 map0.161 新增了无参调用形式map()用于构造空 map其类型为map(unknown,unknown)。仓库中的实现位于 EmptyMapConstructor.java源码注解如下Description(Creates an empty map) ScalarFunction(map) public final class EmptyMapConstructor { private final Block emptyMap; public EmptyMapConstructor(TypeParameter(map(unknown,unknown)) Type mapType) { BlockBuilder mapBlockBuilder mapType.createBlockBuilder(null, 1); mapBlockBuilder.beginBlockEntry(); mapBlockBuilder.closeEntry(); emptyMap ((MapType) mapType).getObject(mapBlockBuilder.build(), 0); } SqlType(map(unknown,unknown)) public Block map() { return emptyMap; } }该函数在构造器阶段一次性构建空 map 块并缓存调用时直接返回零运行时开销。实际用法示例SELECT map(); -- 返回空 map SELECT map_concat(map(ARRAY[a], ARRAY[1]), map()); -- 空 map 参与拼接这一新函数与map_concat的空参优化形成组合使拼接空 map这一常见场景在语法和性能上都得到了完备支持。map(unknown,unknown)类型在参与运算如map_concat时会与具体类型的 map 进行类型统一。四、元数据增强SHOW COLUMNS 与 DESCRIBE 新增 extra 信息列0.161 为SHOW COLUMNS及其别名命令DESCRIBE新增了一个列用于展示连接器提供的额外信息extra information。当前仓库的文档 show-columns.rst 描述如下List the columns intablealong with their data type and other attributes such as Extra, Comment, Precision, Scale, and Length.即SHOW COLUMNS FROM table的输出列包括列名、数据类型以及Extra、Comment、Precision、Scale、Length等属性。新增的Extra列正是连接器扩展信息的载体describe.rst 中明确了DESCRIBE是SHOW COLUMNS的别名因此两条命令同步获得该列。SHOW COLUMNS FROM hive.default.orders; -- 或等价写法 DESCRIBE hive.default.orders;该列的意义在于此前连接器只能把补充信息拼进列注释Comment现在有了结构化的 extra 字段元数据展示更规范、更易于客户端程序化解析。五、Hive 连接器列注释信息迁移伴随上述SHOW COLUMNS新列Hive 连接器做了对应的行为调整RemovePartition Key: prefix from column comments and replace it with the new extra information field.具体变化是分区键列partition key columns的注释中不再附加Partition Key: 前缀该信息迁移到SHOW COLUMNS/DESCRIBE新增的Extra 列中。这是元数据展示规范化的收尾动作——注释回归纯文本描述结构化信息交给结构化字段。对于依赖解析列注释中Partition Key: 前缀的下游工具升级后需改为读取Extra列对于直接使用SHOW COLUMNS查询分区键信息的用户则获得了更可靠的解析途径。六、JMX 连接器jmx.dump-tables 支持转义逗号JMX 连接器在 0.161 中为jmx.dump-tables配置属性增加了转义逗号支持。此前该属性以逗号分隔表名列表但 JMX 表名MBean 名本身可能包含逗号导致无法表示这类表现在可以用\,转义逗号。当前仓库 JmxConnectorConfig.java 中的解析实现完整地体现了这一行为Config(jmx.dump-tables) public JmxConnectorConfig setDumpTables(String tableNames) { this.dumpTables Splitter.on(Pattern.compile((?!\\\\),)) // match , not preceded by \ .omitEmptyStrings() .splitToList(tableNames) .stream() .map(part - part.replace(\\,, ,)) // unescape all escaped commas .collect(Collectors.toSet()); return this; }解析逻辑分两步使用负向回顾断言正则(?!\\,匹配前面没有反斜杠的逗号作为分隔符切分表名列表对每个片段执行part.replace(\\,, ,)将\,还原为字面逗号。因此在etc/catalog/jmx.properties中可这样配置# 表名 com.example:namefoo,bar 中的逗号用反斜杠转义 jmx.dump-tablesjava.lang:typeMemory,com.example:namefoo\,bar切分结果将是两个表java.lang:typeMemory与com.example:namefoo,bar。jmx.dump-tables用于指定需要周期性采样并保留历史数据的 JMX 表配合jmx.dump-period与jmx.max-entries使用默认采样周期为 10 秒、最大条目数为一天内采样数转义支持使含逗号的 MBean 名也能被纳入采样范围。七、接口变更与升级注意事项7.1 移除 /v1/execute 资源0.161 移除了/v1/executeHTTP 资源。该端点此前用于执行原始语句raw statement execution其职责已被POST /v1/statement完备覆盖。依赖/v1/execute的客户端程序需在升级前切换到/v1/statement接口。7.2 升级回归清单综合上述变更从 0.161 升级或向 0.161 迁移时建议按以下清单回归验证ORDER BY 语义审查所有在ORDER BY中使用输出列别名、且存在同名源列的查询确认标准语义下的结果符合预期必要时在迁移期通过legacy_order_by会话属性临时恢复旧行为注意该配置在当前版本已废弃应尽快完成语义修正。嵌套 EXCEPT回归包含多层括号嵌套的EXCEPT查询对比括号移除前后的结果差异。分区键元数据检查依赖 Hive 分区键列注释中Partition Key: 前缀的下游系统改为解析SHOW COLUMNS的 Extra 列。prepared statements验证含 join 参数、聚合输出的 prepare/execute/describe 流程。API 调用确认无代码依赖/v1/execute端点。八、相关文档与源码索引发布说明原文release-0.161.rst配置项废弃清单含deprecated.legacy-order-byFeaturesConfig.javamap_concat空参优化实现MapConcatFunction.java新增map()空 map 构造器EmptyMapConstructor.javaSHOW COLUMNS语法与输出列说明show-columns.rstDESCRIBE别名说明describe.rstjmx.dump-tables转义逗号解析实现JmxConnectorConfig.java后续版本对legacy_order_by的兼容修复记录release-0.179.rst赞分享大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载相关推荐Presto 0.192 版本技术解析核心修复、配置变更与连接器增强Presto 0.192 版本技术解析核心修复、配置变更与连接器增强 Presto 0.192 是一个以稳定性与正确性修复为主的版本涵盖查询调度、地理空间函大数据数据库后端Presto Release 0.105 变更解读连接修复、等值连接隐式类型转换与 SPI 破坏性变更Presto Release 0.105 变更解读连接修复、等值连接隐式类型转换与 SPI 破坏性变更 本文以当前仓库中的版本发布说明 release 0.1大数据数据库后端Presto Release 0.255 技术解读正则中断机制、array_normalize 新函数与多连接器增强Presto Release 0.255 技术解读正则中断机制、array_normalize 新函数与多连接器增强 PrestoFacebook 开源版大数据数据库后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/24 6:20:38

电流检测电路六种方案详解:原理、对比与选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:20:38

PHPStan 错误指南:如何理解并修复 “Unsafe usage of new static()“

开发工具代码质量静态分析 【免费下载链接】phpstan PHP Static Analysis Tool - discover bugs in your code without running it! 项目地址: https://gitcode.com/gh_mirrors/ph/phpstan 点击查看 免费下载 本篇技术指南围绕 PHPStan 错误标识符 new.static 展开…

2026/9/24 7:10:40

阿里云ACK智算升级:从GPU调度到弹性伸缩的云原生实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 7:10:40

ethers.js v6 实战:合约事件监听、多签与签名验证踩坑全解析

ethers.js 是从前端接以太坊/合约的核心库,但很多人在 v6 升级后踩坑:BigNumber 没了、事件监听收不到、getEvent 拼错哈希、签名验证总是失败。本文用完整可跑代码带你解决事件监听、批量操作、签名 EIP-712 这几个高频场景,全部基于 ethers.js v6。## 适用场景- 前端要实时…

2026/9/24 7:10:40

零信脱敏携手公益机构,助力未成年人隐私保护

近日,零信脱敏与一家公益机构达成合作,为其未成年人社会工作中的文书处理提供脱敏支持。 在日常工作中,社工需要整理涉及未成年人成长经历、家庭情况和实际需求的业务文书。这些资料为专业服务提供依据,也承载着未成年人及其家庭的…

2026/9/24 7:10:40

江门蓬江食材配送

在江门蓬江地区,食材配送行业正日益兴起,为人们的生活带来了诸多便利。食材配送不仅关系到人们日常饮食的质量和安全,也对当地的餐饮行业和居民生活有着重要的影响。一、江门蓬江食材配送的现状随着人们生活节奏的加快和对食品安全的重视&…

2026/9/23 12:07:00

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/24 0:00:21

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:21

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:21

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码