ARTICLE DETAIL

资讯详情

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

Presto 0.198 版本特性全解析:SQL 语义优化、资源组演进与连接器增强

Presto 0.198 版本特性全解析:SQL 语义优化、资源组演进与连接器增强 大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载本技术指南以 Presto 官方发布说明 release-0.198文档路径release-0.198.rst为核心骨架逐条解读该版本在 SQL 分析、资源管理、CLI 认证、Hive 连接器与 SPI 层的关键变更并结合当前仓库0.300-SNAPSHOT的源码实现进行交叉印证。读完本文你将掌握这些特性的配置方法、使用场景及其在后续版本中的演进脉络可直接用于日常查询调优与集群运维排障。一、版本定位与变更总览Release 0.198 是 Presto 演进历程中的一个重要里程碑版本其变更横跨查询引擎内核、资源调度、命令行客户端与多个连接器。总体来看本版本的核心主题可概括为三点SQL 语义与解析行为的收紧与增强包括查询入队前先做语义分析、DECIMAL 字面量默认解析策略变更、FILTERDISTINCT组合聚合的支持以及LIKE ... ESCAPE在元数据查询中的支持。资源管理架构的收敛正式移除 Query Queues资源组Resource Groups成为唯一且默认启用的调度机制。连接器与 SPI 的实用化改进Hive 新增 AWS Glue 作为 metastore 后端JMX 连接器支持通配符查询SPI 层对Page的 API 进行了精简。下文将沿发布说明的原始章节结构General Changes / Resource Groups Changes / CLI Changes / Hive Changes / JMX Changes / SPI Changes展开深度解读。二、General Changes查询引擎核心改进2.1 语义分析前置查询入队前先做语法与语义校验本版本将语义分析semantic analysis的执行时机提前到查询入队enqueuing之前。这意味着一个包含非法列引用、类型不匹配或未解析函数名的查询会在进入队列等待资源之前就被拒绝从而避免无效查询长时间占据队列资源、浪费调度器的处理能力。从源码结构看语义分析由 presto-main-base 模块中的sql/analyzer包承担负责将语法树AST转换为可执行的逻辑计划并对表、列、函数、类型进行解析校验。该变更的实际收益是被拒绝的查询不会消耗队列中的等待时间整体集群的查询吞吐与资源利用率得到改善。2.2 DECIMAL 字面量解析策略变更42.0 不再是 DOUBLE这是本版本对用户影响最直接的语义变更之一变更前形如42.0的小数字面量在 SQL 解析阶段被解析为DOUBLE类型。变更后默认带小数点的数字字面量按DECIMAL类型解析更符合 SQL 标准中对精确数值类型的预期避免了浮点表示带来的精度损失。对于依赖旧行为字面量作为 DOUBLE 参与运算的用户本版本提供了两个逃生通道生效范围配置项说明集群级config.propertiesparse-decimal-literals-as-doubletrue恢复将小数字面量解析为 DOUBLE 的旧行为会话级Sessionparse_decimal_literals_as_double按会话粒度覆盖集群配置该配置项在当前仓库中依然保留定义于 FunctionsConfig.java字段private boolean parseDecimalLiteralsAsDouble;并提供对应的 setter/getter 用于配置绑定说明这一语义开关在后续版本中持续有效是部署升级时评估兼容性的重要关注点。2.3 聚合函数增强FILTER 与 DISTINCT 的组合本版本为聚合函数新增了对FILTER (WHERE ...)与DISTINCT限定符组合使用的支持例如SELECT regionkey, count(DISTINCT orderkey) FILTER (WHERE totalprice 1000) FROM orders GROUP BY regionkey;同时min和max聚合函数现在支持在输入类型在查询分析阶段未知如直接作用于NULL字面量时正常工作进一步放宽了类型推导的限制。2.4 LIKE 谓词SHOW SCHEMAS / SHOW TABLES 支持 ESCAPELIKE谓词在SHOW SCHEMAS和SHOW TABLES查询中新增了对ESCAPE子句的支持使得元数据过滤查询可以正确处理包含通配符%、_特殊语义的场景SHOW TABLES FROM tpch.sf1 LIKE orders\_% ESCAPE \;这在表名或模式名本身包含%、_字符时尤为重要配合 ESCAPE 字符即可精确匹配。2.5 新增与增强的 SQL 函数本版本函数层级的变更包括sequence函数新增 DATE 变体支持隐式以 1 天为步长生成日期序列例如SELECT sequence(DATE 2026-01-01, DATE 2026-01-05)生成[2026-01-01, 2026-01-02, 2026-01-03, 2026-01-04, 2026-01-05]。zip函数参数上限提升由最多 4 个参数提升为最多 5 个支持对更多数组并行打包。新增四个地理空间函数ST_IsValid判断几何对象是否有效geometry_invalid_reason返回几何对象无效的原因simplify_geometry对几何对象进行简化抽稀great_circle_distance计算两个地理坐标点之间的大圆距离。2.6 执行引擎与性能优化trace token请求链路追踪能力调度器scheduler与 exchange HTTP 客户端现在支持trace token机制每个发出的 HTTP 请求头部都会携带一个唯一 IDtrace token该 ID 同时被记录到 HTTP 请求日志中。调试时可以通过该 ID 将请求与响应一一关联快速定位分布式执行中跨节点通信的问题。从当前仓库源码看trace token 已内化为会话级属性定义于 Session.javaprivate final OptionalString traceToken;并通过 FullConnectorSession.java 暴露给连接器侧说明该能力在后续版本中持续演进并深度集成于会话模型。本地 exchange 缓冲区大小可配置新增配置属性task.max-local-exchange-buffer-size用于设置本地 exchange算子间数据交换的缓冲区大小默认值为 32MB定义于 TaskManagerConfig.javaprivate DataSize maxLocalExchangeBufferSize new DataSize(32, Unit.MEGABYTE);。该值由 LocalExecutionPlanner.java 注入使用。当单个 Task 内算子间数据吞吐较大、出现本地 shuffle 瓶颈时可适当调大该参数task.max-local-exchange-buffer-size64MB其余性能类改进一览动态 writer 缩放dynamic writer scaling场景下的查询性能提升适用于 Hive 等以分区/分桶输出为目标的写入场景ST_Intersects与ST_Distance性能优化涉及 join 的几何运算查询吞吐提升空表快速短路当查询规划阶段即可判定表为空时跳过实际执行以降低查询延迟array_agg对象开销优化减少 G1 GC 下的对象分配与 native memory 占用高基数 DISTINCT 聚合优化通过use_mark_distinct会话属性默认开启控制属于实验性优化可关闭以回退旧执行路径会话属性use_mark_distinct配置项optimizer.use-mark-distinct该开关在 FeaturesConfig.java 中默认值为trueprivate boolean useMarkDistinct true;并由 SystemSessionProperties.java 暴露给会话使用。关闭方式SET SESSION use_mark_distinct false;或集群级配置optimizer.use-mark-distinctfalse空分组集empty grouping set查询的并行度提升例如GROUP BY ()或同时包含空与普通分组集的查询。时区缺陷修复修复了会话时区在1970-01-01 00:00:00存在时间缺口gap时current_date计算失败的问题America/Bahia_Banderas即为典型受影响时区。该修复保证在任意合法时区配置下current_date均能正确求值。三、Resource Groups ChangesQuery Queues 谢幕本版本完成了资源管理机制的架构收敛Query Queues 被正式移除资源组Resource Groups成为唯一、且默认启用的调度机制。旧的配置项experimental.resource-groups-enabled已被删除——此前它用于显式开启资源组功能现在该功能始终开启无需任何配置。WEIGHTED_FAIR调度策略行为修正当多个子组的资源利用率utilization与份额share完全相同时调度器现在会选择最老的oldest符合条件的子组进行调度使公平调度在完全对称场景下具备确定性的选择顺序避免随机选择带来的调度抖动。对运维人员而言升级到该版本后应检查集群配置移除对experimental.resource-groups-enabled的引用并将全部队列配置迁移到资源组配置文件中Resource Groups 通过resource-groups.properties引入 JSON 配置。四、CLI ChangesKerberos 认证简化与加固命令行客户端presto-cli在本版本中的变更聚焦于 Kerberos 认证的易用性与安全性移除--enable-authentication选项此前需要显式开启认证开关。现在只要指定了--krb5-remote-service-nameKerberos 认证即自动启用少一个开关、少一类配置错误。Kerberos 认证强制要求 HTTPS出于安全考虑使用 Kerberos 认证的 CLI 连接必须走 HTTPS 加密通道防止凭据与票据在传输层被窃听。部署时需确保协调节点Coordinator配置了有效的 TLS 证书http-server.https.*相关配置。五、Hive ChangesAWS Glue 成为一等公民 metastore本版本为 Hive 连接器新增了AWS Glue作为 metastore 后端的能力与既有的 Hive MetastoreThrift并列。启用方式只需将hive.metastore配置属性设置为glueconnector.namehive-hadoop2 hive.metastoreglue hive.metastore.glue.regionus-east-1 hive.metastore.glue.endpoint-urlhttps://glue.us-east-1.amazonaws.com hive.metastore.glue.aws-access-key... hive.metastore.glue.aws-secret-key...该能力在后续版本中持续演进当前仓库的 HiveMetastoreModule.java 中依然保留着bindMetastoreModule(glue, new GlueMetastoreModule(connectorId))的绑定逻辑Glue 相关实现位于 presto-hive-metastore/src/main/java/com/facebook/presto/hive/metastore/glue 包下含GlueMetastoreModule、DefaultGlueColumnStatisticsClient等类说明 Glue 模式自 0.198 引入后已成为 Hive 元数据管理的重要选项。此外本版本修复了 ORC writer 的一个数据正确性缺陷该 bug 会导致VARCHAR或VARBINARY类型的数据被错误写入文件。对于使用 ORC 格式写入 Hive 表的用户建议升级后对历史写入数据进行抽检。六、JMX Changes通配符查询 MBeanJMX 连接器新增通配符字符*允许使用一条查询同时检索多个 MBean。例如要查看所有 Hive 连接器的文件系统缓存统计可写作SELECT * FROM jmx.current.com.facebook.presto.hive:namehive_file_system_cache_stats,connector_name*;此功能大幅简化了跨多个连接器、多实例的场景下的监控查询避免了为每个 MBean 名称编写独立查询的繁琐操作。七、SPI Changes面向插件开发者的 API 演进7.1 QueryCompletedEvent 新增性能统计QueryCompletedEvent中新增了查询计划的性能统计信息事件监听器如审计日志、OpenLineage 等可以从中获取更丰富的执行指标用于查询性能分析与容量规划。7.2 Page API 精简移除 getBlocks()Page.getBlocks()被移除。该方法极少被使用且每次调用都会执行一次昂贵的数组拷贝。插件开发者应改用以下两种替代方案Page.getBlock(channel)按通道索引获取单个 Block新增的辅助方法Page.appendColumn()在现有 Page 基础上追加列。7.3 Block 校验增强ArrayBlock、MapBlock、RowBlock在构造阶段新增了更严格的合法性校验能够在构造早期发现非法结构如数组长度与偏移量不一致、Map 的 key/value block 数量不匹配等将错误暴露点前移降低运行时异常排查成本。对连接器与函数插件开发者来说升级到该版本时应全局搜索并替换Page.getBlocks()的调用重新编译插件以适配新增的 Block 构造校验如需采集执行统计从QueryCompletedEvent中读取新增的性能统计字段。八、升级建议与兼容性影响小结综合以上变更升级到 Release 0.198 前建议重点评估以下影响面变更点影响类型处理建议小数字面量默认解析为 DECIMAL行为变更可能影响既有 SQL 结果类型评估查询结果类型兼容性必要时设置parse-decimal-literals-as-doubletrue或会话属性Query Queues 移除配置删除移除experimental.resource-groups-enabled迁移至 Resource GroupsCLI Kerberos 需要 HTTPS部署变更为协调节点配置 HTTPS并更新 CLI 连接参数Page.getBlocks()移除SPI 破坏性变更插件代码改用getBlock(channel)/appendColumn()聚合FILTERDISTINCT、DECIMAL 字面量、sequence(DATE)新增能力可直接在 SQL 中使用AWS Glue metastore新增能力按需配置hive.metastoreglue及 Glue 区域/凭证参数JMX 通配符新增能力监控查询可直接使用*九、延伸阅读本文档原始出处release-0.198.rst同目录下包含 release-0.100.rst 等更早期版本的发布说明可对照查看特性演进轨迹函数与 DECIMAL 解析配置FunctionsConfig.java资源/优化器开关FeaturesConfig.java本地 exchange 缓冲区配置TaskManagerConfig.java会话级 trace token 模型Session.javaHive Glue metastore 绑定HiveMetastoreModule.java。以上内容均以当前仓库0.300-SNAPSHOT源码为佐证其中标注当前仍存在的配置与模块均已在源码中确认标注为 0.198 版本历史变更的内容以发布说明原文为准升级时请结合目标版本的实际行为进行验证。赞分享大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载相关推荐Presto 0.220 版本特性全解析查询执行、连接器写入优化与 Verifier 改进Presto 0.220 版本特性全解析查询执行、连接器写入优化与 Verifier 改进 导读 本文基于 Presto https://link.gitco大数据数据库后端Presto 0.207 版本解析Join 优化策略重构、安全加固与 Hive 连接器增强Presto 0.207 版本解析Join 优化策略重构、安全加固与 Hive 连接器增强 Presto 0.207 是一个以「查询优化器重构」为核心的里程碑大数据数据库后端Presto 0.148 版本解析Interval 修复、colocated join 与连接器增强全览Presto 0.148 版本解析Interval 修复、colocated join 与连接器增强全览 Presto 0.148 是分布式 SQL 查询引擎大数据数据库后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表