ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Presto Release 0.203 版本发布详解:核心查询引擎、安全认证与连接器修复全览

Presto Release 0.203 版本发布详解:核心查询引擎、安全认证与连接器修复全览 大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载本篇文章基于当前仓库中 Presto 官方版本发布说明release-0.203.rst整理而成逐条解读该版本在通用查询引擎、安全认证、Server RPM 打包、Hive/Thrift/Local File 连接器方面的修复与改进并结合仓库源码深入剖析关键修复背后的实现机制。读完本文你将完整掌握 Presto 0.203 版本变更的技术内涵、每个修复项的触发场景以及如何据此评估自身集群升级的必要性。版本概览Release 0.203 是 Presto 在 0.202 之后的一个维护型发布版本。整体来看该版本没有引入新的 SQL 语法或重大架构变更重点集中在三类工作上修复查询计划与执行阶段暴露的故障、补齐安全认证与传输层能力、修正多个连接器在特定边界条件下的数据处理错误。版本变更分为六个部分General Changes通用变更Security Changes安全变更Server RPM ChangesServer RPM 打包变更Hive Connector ChangesHive 连接器变更Thrift Connector ChangesThrift 连接器变更Local File Connector ChangesLocal File 连接器变更通用变更General Changes该版本在查询引擎层面共包含 9 项修复与改进下面逐条展开解读。修复map函数偶发的重复键报错发布说明指出该版本修复了:func:!map即map函数产生的虚假重复键错误spurious duplicate key errors。map(array(K), array(V))用于从两个数组构造 Map当输入键数组中出现重复值时Presto 会报出 duplicate keys 异常。此修复针对的是输入中本不存在重复键、却仍被误判为重复的场景属于键值去重校验逻辑的边界条件修正。修复EXISTS内带LIMIT的相关子查询规划失败对应 GitHub issue#10696该版本修复了当包含LIMIT子句的相关子查询correlated subquery被用在EXISTS中时出现的规划planning失败问题。相关子查询correlated subquery的去关联化decorrelation是 Presto 查询优化器的核心步骤之一其目标是把依赖外层变量的子查询改写为可并行执行的 Join 形式。从源码结构看该逻辑由 PlanNodeDecorrelator.java 实现其中visitLimit方法专门处理子查询中的LimitNode见第 161-178 行当子查询结果**至多单行atMostSingleRow**时直接复用子查询去关联结果无需额外改写当LIMIT 1时走rewriteLimitWithRowCountOne路径将 Limit 改写为对常量符号的聚合AggregationNode见第 194-223 行当LIMIT n (n 1)时走rewriteLimitWithRowCountGreaterThanOne路径若存在需要传播的变量则改写为按常量符号分区的RowNumberNode行号节点见第 225-261 行。本次修复即围绕上述visitLimit去关联路径与EXISTS组合使用时的规划失败场景展开。若你在 0.203 之前的版本执行类似SELECT ... WHERE EXISTS (SELECT ... FROM t WHERE t.x outer.x LIMIT 1)的查询时遇到规划期报错升级到 0.203 后即可消除。修复数据交换缺少反压检查导致的 OOM该版本修复了数据交换data exchange过程中因缺少 pushback回压检查而引发的内存溢出out of memory。在分布式执行中上游 Task 通过 Exchange 向下游算子输送数据页page若缺少对输出缓冲区的回压控制上游会持续向内存中写入数据直至 OOM。此项修复补上了交换路径上的回压检查点避免在大数据量、倾斜场景下内存被写爆。修复分桶执行下含交叉连接的查询执行失败当开启分桶执行bucketed execution时查询若包含交叉连接cross join在 0.203 之前的版本可能直接执行失败。该版本修复了分桶执行计划中 cross join 的处理逻辑使两类特性可以正确组合工作。修复DISTINCT聚合 高选择性聚合过滤的执行失败发布说明给出了具体触发示例sum(DISTINCT x) FILTER (WHERE y 0)即聚合函数带DISTINCT且同时带有**高选择性highly selective的聚合过滤aggregation filter**时查询执行会失败。此类组合会走聚合去重与过滤重写的特殊路径修复后该组合可以正常执行。修复SHOW PARTITIONS错误消息中的引号问题SHOW PARTITIONS的输出中包含分区信息当分区值本身含引号等特殊字符时错误/结果消息中的引号转义在 0.203 之前处理不当。该版本修复了错误消息中的**引号转义quoting**问题。消除列访问权限的冗余检查该版本消除eliminate了对列访问权限column access permissions的重复检查调用。原先查询规划过程中会对同一列多次调用权限校验在权限系统规模较大如通过 access control 插件管理大量用户/角色时产生明显开销。此改动属于性能优化项不影响权限语义。延迟查询启动直至客户端确认查询 ID提升长分析查询的创建可靠性这是一项针对查询创建可靠性的改进Presto 现在会延迟查询启动直到客户端通过获取第一个响应链接first response link确认查询 ID。其目的在于对于分析时间analyze很长的查询若查询在客户端确认之前就启动初始请求容易在客户端侧超时改为客户端确认后再启动后消除了这类初始请求超时问题。这对EXPLAIN开销大、元数据/统计信息收集耗时的复杂查询尤为关键。移除对旧版ORDER BY语义的支持该版本移除了遗留legacy的ORDER BY语义支持。Presto 早期版本对ORDER BY与LIMIT、聚合等组合的求值顺序存在历史语义在引入新语义后通过配置兼容了一段时间0.203 起正式删除旧语义。升级时若集群仍显式依赖旧ORDER BY行为例如在含有聚合的查询中对非分组列排序需要按新语义改写 SQL。区分 explain 计划中的内连接与左空间连接空间连接spatial join在 EXPLAIN 输出中现在会区分 inner spatial join 与 left spatial join。该改动使基于空间索引的 Geo 查询如 ST_Contains 类函数生成的 Join执行计划更可读便于排查空间连接选择的内/外连接类型。安全变更Security Changes修复多认证类型配置下的认证挑战发送当同时配置了KERBEROS、PASSWORD、JWT中的至少两种认证类型时0.203 之前版本的 HTTP 认证协商逻辑存在缺陷导致认证挑战authentication challenge无法正确发送给客户端进而使密码/JWT 认证流程卡死或失败。该版本修复了多认证类型并存时挑战头的生成与发送逻辑。如果你的集群在config.properties中配置了多个http-server.authentication.type此修复直接影响登录可用性。HTTP 服务端与内部通信客户端支持 PEMPKCS #8格式密钥库与信任库该版本为HTTP Server 以及用于内部通信internal communication的 HTTP Client增加了对PEM 编码PKCS #8格式 keystore 与 truststore的支持。此前该能力仅对 CLI 和 JDBC 驱动可用0.203 起扩展到服务端与节点间通信链路使依赖 PEM 证书的部署方式可以统一应用于全链路 TLS。Server RPM 变更Server RPM Changes该版本在 RPM 打包层面声明了对uuidgen工具的依赖。uuidgen通常由uuid-runtime软件包提供用于在Presto Server RPM 安装过程中生成唯一标识并写入配置文件。0.203 之前若目标机器缺少uuidgen安装脚本会因无法生成配置中的 node id 而产出无效的配置文件。此改动通过显式声明依赖保证 RPM 安装环境具备该工具。升级提示在基于 RPM 部署的节点上执行 0.203 的 RPM 安装前建议确认系统已安装提供uuidgen的软件包如 Debian/Ubuntu 的uuid-runtime、RHEL/CentOS 的util-linux避免安装中途生成无效配置。Hive Connector 变更Hive Connector Changes修复优化版 Parquet 读取器的复杂类型处理该版本修复了**优化版 Parquet readeroptimized Parquet reader**在处理复杂类型complex type如嵌套 struct、list、map时的缺陷。发布说明明确指出此前存在三类未正确处理的情况null 值null values可选字段optional fieldsParquet 向后兼容规则Parquet backward compatibility rules从源码结构看Parquet 读取的核心实现位于 ParquetReader.java其列读取逻辑会根据字段的 repetition/definition 级别处理嵌套与空值配合 ParquetTypeUtils.java 完成 Parquet 类型与 Presto 类型的映射。本次修复即针对嵌套复杂类型场景下 null、optional 语义以及旧版 Parquet 文件兼容规则的处理偏差。若你的 Hive 表以 Parquet 格式存储嵌套结构如struct...、arraymap...且查询结果曾出现空值错位或字段丢失可重点验证此项修复。修复优化版 ORC writer 的LazyBlock错误优化版 ORC writeroptimized ORC writer在特定输入下会抛出LazyBlock相关错误——LazyBlock是 Presto 中用于延迟物化数据块的内部结构写入路径若在 LazyBlock 尚未物化时直接访问其数据就会触发异常。该版本修复了 ORC 写入阶段对 LazyBlock 的处理避免写入失败。改进最大打开 writer 数量的错误消息Hive 写入时每个分区/桶对应一个 writer当同时打开的 writer 数量超过限制时0.203 之前的报错信息不够直观。该版本改进了max open writers超限时的错误消息使运维人员能更快定位是分区数过多还是hive.max-open-sort-files类配置不当。Thrift Connector 变更Thrift Connector Changes该版本修复了 Thrift 连接器的重试逻辑此前当远程 Thrift 服务端在响应中明确指示错误为**可重试retryable**时客户端并未按约定重发请求。0.203 修复后客户端会正确识别服务端返回的可重试标记并执行重试从而提升依赖 Thrift 连接器接入自定义数据服务的查询稳定性。Local File Connector 变更Local File Connector Changes对应 GitHub issue#9601该版本修复了JVM 时区为 UTC 时 Local File 连接器的时间戳解析错误。Local File 连接器用于查询节点本地文件如 HTTP server 访问日志中的结构化数据。从源码实现看其时间戳解析逻辑位于 LocalFileRecordCursor.javaFilesReader通过timestampOrdinalPosition定位时间戳列并调用Instant.from(ISO_FORMATTER.parse(...)).toEpochMilli()将 ISO 格式的日志时间戳转换为 epoch 毫秒见第 338-342 行。该转换以Instant表示瞬时时间点当 JVM 默认时区为 UTC 时0.203 之前的版本对部分时间戳的解析会产生偏差如本地时间与 UTC 的换算错位。修复后无论 JVM 时区如何设置Local File 连接器的时间戳过滤与转换结果都保持一致。升级建议与验证要点综合以上变更从 0.203 之前的版本升级时建议关注以下验证点SQL 兼容性确认业务查询不依赖已被移除的旧版ORDER BY语义重点回归EXISTS LIMIT相关子查询、DISTINCT聚合 FILTER组合这两类此前会失败的查询形态。安全认证若配置了多种认证类型Kerberos/Password/JWT 并存升级后需回归登录与认证挑战流程若使用 PEMPKCS #8格式证书可验证服务端 TLS 与节点间内部通信加密是否按预期工作。数据格式对 Parquet 嵌套复杂类型表与 ORC 写入任务做针对性回归验证 null 值、可选字段与旧文件兼容场景下的读写结果。部署链路RPM 安装前确认uuidgen可用启用分桶执行、含 cross join 的查询建议做冒烟测试。Local File 连接器在 JVM 时区为 UTC 的节点上验证基于时间戳的日志查询过滤结果是否准确。参考资源本文依据的版本发布说明原文release-0.203.rst相关子查询去关联实现PlanNodeDecorrelator.javaParquet 读取核心实现ParquetReader.java 与 ParquetTypeUtils.javaLocal File 连接器时间戳解析LocalFileRecordCursor.java后续版本0.204 及以后的变更说明同样收录于 presto-docs/src/main/sphinx/release 目录可作为持续跟踪 Presto 演进的一手资料。赞分享大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载相关推荐Presto Release 0.123 版本发布要点全解析连接器表属性、Hive 分区 DML 与查询引擎关键修复Presto Release 0.123 版本发布要点全解析连接器表属性、Hive 分区 DML 与查询引擎关键修复 本文以 Presto 官方仓库中的 re大数据数据库后端Presto 0.149 版本发布详解查询引擎修复、新 Web 界面与 Hive 连接器增强Presto 0.149 版本发布详解查询引擎修复、新 Web 界面与 Hive 连接器增强 Presto 0.149 是一次以「稳定性和配置体系重构」为核心大数据数据库后端Presto 0.167 版本发布解析查询引擎核心增强与安全模型演进Presto 0.167 版本发布解析查询引擎核心增强与安全模型演进 导读 Presto 0.167 是分布式 SQL 查询引擎发展历程中一个承上启下的重要版大数据数据库后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表