首页/新闻资讯/正文详情

Presto 0.235 版本深度解析:查询引擎优化、连接器新特性与运维配置指南

发布时间:2026/9/23 3:42:58 来源:云帆数科 栏目:资讯中心
Presto 0.235 版本深度解析:查询引擎优化、连接器新特性与运维配置指南
大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载本篇技术指南以 PrestoTrino 前身项目由 Facebook 维护的 prestodb/presto 代码库官方发布说明 release-0.235.rst 为骨架逐条解读该版本在查询执行、内存管理、函数与 SQL 能力、Pinot/Hive/Druid 连接器以及 Verifier 工具上的全部改动并结合当前仓库源码presto-main-base、presto-pinot-toolkit、presto-hive等模块给出实现细节与配置示例。读者读完可以掌握 0.235 版本新增的软内存限制配置、公共子表达式优化开关、新函数用法、各连接器的类型映射与下推能力以及 Verifier 的新验证选项从而在升级或调优集群时精准对齐这些新能力。一、查询引擎与 SQL 能力增强0.235 版本在查询执行层面修复了多个关键问题同时新增了若干影响深远的优化器与 SQL 特性是本次发布的核心看点。1.1 命名查询Named Queries结果与列清单不一致的修复修复了命名查询输出与其列清单column list不匹配的问题对应 GitHub issue14333。此前当命名查询声明的列与查询实际产出不一致时结果可能错位或出错0.235 起这类不一致会被正确校验。1.2 WHERE 大过滤器触发快速失败规避GENERATED_BYTECODE_TOO_LARGE修复了WHERE 子句中包含超大过滤器导致内存过度占用的问题。此前这类查询可能因生成的字节码过大而拖垮节点内存0.235 之后这类查询会快速失败并抛出GENERATED_BYTECODE_TOO_LARGE错误而不是持续膨胀内存。这对生产环境是一种快速失败优于缓慢耗尽的保护策略——管理员可以借此及早发现需要改写或拆分的大型过滤条件。1.3 UNNEST 性能提升与公共子表达式优化UNNEST性能改进该版本对UNNEST展开了专项性能优化。UNNEST用于将数组/多重集展开为多行是 ETL 与探索性分析中的高频操作此优化直接惠及大量展开类查询。公共子表达式提取优化CSE新增对过滤器与投影的优化可自动提取公共子表达式并只计算一次避免重复求值。该优化默认开启可通过会话属性关闭-- 关闭公共子表达式优化 SET SESSION optimize_common_sub_expressions false;从源码看该会话属性定义于 SystemSessionProperties.javaOPTIMIZE_COMMON_SUB_EXPRESSIONS optimize_common_sub_expressions默认值见DEFAULT_OPTIMIZE_COMMON_SUB_EXPRESSIONS查询引擎在执行计划优化阶段据此决定是否启用 CSE 变换。对于表达式重复计算开销显著的大查询保持默认开启通常能获得可观的 CPU 收益。1.4 CREATE FUNCTION 支持 30k 字符的类型签名CREATE FUNCTION的参数类型列表与返回类型长度上限提升至30k 字符为大型 SQL 函数定义提供了更宽裕的空间适合承载复杂签名或动态生成的函数定义。1.5 SHOW CREATE FUNCTION 与 SQL 函数体约束新增SHOW CREATE FUNCTION可以查看已注册函数的创建语句便于审计与复现函数定义。禁止在 SQL 函数体内调用 SQL 函数0.235 起增加了显式检查拒绝在 SQL 函数函数体中再调用 SQL 函数避免递归/嵌套函数导致的执行复杂化。设计此类函数时需注意这一限制改用标量表达式或其他语言实现的 UDF。1.6 重分区算子缓冲区上限driver.max-page-partitioning-buffer-count新增配置属性driver.max-page-partitioning-buffer-count用于限制优化后的重分区repartitioning算子的缓冲区总数。该配置在 shuffle 数据量巨大的场景下可有效约束每个 driver 的缓冲区开销防止重分区阶段内存失控# etc/config.properties driver.max-page-partitioning-buffer-count10241.7 查询统计新增 Task 总内存峰值查询统计信息query stats新增了peak task total memoryTask 总内存峰值字段运维与调优时可以更精确地观察单个 Task 级别的内存压力辅助定位内存热点。二、新增 SQL 函数详解2.1scale_qdigest按新权重缩放分位数摘要qdigest是 Presto 用于近似分位数计算的摘要数据结构qdigest(bigint|real|double)。0.235 新增scale_qdigest可将既有qdigest按新权重重新缩放便于合并不同权重的数据流后再进行分位数查询。实现位于 QuantileDigestFunctions.java为qdigest(double)、qdigest(real)、qdigest(bigint)三个重载版本分别提供scale_qdigest并校验缩放因子必须为正数checkCondition(scale 0, ...)-- 构造一个 qdigest WITH t AS (SELECT approx_set(x) AS q FROM (VALUES 1.0, 2.0, 3.0, 4.0) tab(x)) -- 按新权重 1000 缩放 SELECT scale_qdigest(q, 1000.0) FROM t;典型场景将多个时段、不同权重的分位数摘要统一缩放到同一权重后合并再做跨时段的近似分位分析。2.2 缅甸语文本函数myanmar_font_encoding与myanmar_normalize_unicode为支持缅甸语Burmese文本处理0.235 新增两个国际化函数实现在 I18nMyanmarFunctions.java 中由presto-i18n-functions插件I18nFunctionsPlugin.java提供myanmar_font_encoding(varchar)→ varchar利用 ZawgyiDetector 判断输入字符串是Zawgyi还是Unicode编码置信度阈值默认 0.9返回zawgyi或unicode。myanmar_normalize_unicode(varchar)→ varchar将输入按行切分对置信度超过阈值的行执行 Zawgyi→Unicode 转写基于 Google myanmar-tools 的TransliterateZ2U输出规范化后的 Unicode 文本。SELECT myanmar_font_encoding(မြန်မာစာ); -- unicode SELECT myanmar_normalize_unicode(zawgyi文本); -- 转写为 Unicode适用于对缅甸语内容做搜索索引前的归一化清洗测试用例见 TestMyanmarFunctions.java。2.3 地理空间函数增强ST_AsText 与 ST_Centroid 支持球面地理ST_AsText新增支持Spherical Geographies球面地理对象可将球面几何输出为 WKT 文本。ST_Centroid新增支持Spherical Geography Points 与 MultiPoints可为球面点集合计算质心。这两项由presto-geospatial-toolkit/ geospatial 相关模块承载扩展了 Presto 在球面坐标系如 WGS84 经纬度数据上的分析能力。三、Pinot 连接器类型映射、字段注释与查询下推0.235 对 Pinot 连接器实现位于presto-pinot-toolkit配置类 PinotConfig.java做了五方面增强3.1 BYTES → VARBINARY 映射支持将 Pinot 的BYTES类型映射为 Presto 的VARBINARY类型便于直接在 Presto 中消费 Pinot 存储的二进制字段。3.2 时间字段的类型推断开关新增两个系统属性按 epoch 单位把 Pinot 时间字段自动映射为更精确的 Presto 类型# 将自 epoch 起的天数映射为 DATE pinot.infer-date-type-in-schematrue # 将自 epoch 起的毫秒数映射为 TIMESTAMP pinot.infer-timestamp-type-in-schematrue两个属性均可在 PinotConfig.java 中看到Config注解定义默认值均可从TestPinotConfig的测试默认值TestPinotConfig.java对照确认。开启后schema 推断会把原始数值时间字段提升为语义明确的日期/时间戳类型避免每次查询都手动CAST。3.3 列注释携带 Pinot 字段类型Pinot 的字段类型DIMENSION、METRIC、TIME、DATETIME会写入 Presto 表的列注释column comment让使用者在SHOW COLUMNS/DESCRIBE时直接了解字段在 Pinot 侧的语义角色。3.4 DISTINCT COUNT 下推与新版 Routing Table APIDISTINCT COUNT 尽力下推对COUNT(DISTINCT x)类查询在尽力而为best-effort基础上推送到 Pinot 执行减少回传 Presto 的数据量是否真正下推取决于查询形状与 Pinot 端能力。新 Pinot Routing Table API 支持适配 Pinot 更新的路由表接口保证连接器与较新 Pinot 集群的兼容性。四、Hive 连接器压缩、排序写入、文件缓存与多 HMS4.1 关键 Bug 修复修复 Hive split 计算在少数边界场景下影响Parquet 读取器的缺陷。修复缺失桶missing buckets场景下ZSTD 压缩零行文件的问题。修复使用S3 Select时的 AWS 客户端指标上报问题并在PrestoS3FileSystemStats中新增 AWS 客户端重试暂停时间retry pause time指标便于观测 S3 访问抖动。4.2 表属性preferred_ordering_columns非分桶表排序写入新增表属性preferred_ordering_columns允许为未分桶表指定排序列写入时按该顺序生成有序文件可显著提升后续基于这些列的查询扫描效率谓词下推、文件裁剪。定义见 HiveTableProperties.java并在 HiveMetadata.java 中校验分桶表不可同时指定该属性否则抛出HIVE_INVALID_METADATA。CREATE TABLE orders_sorted ( orderkey bigint, orderdate date ) WITH ( format ORC, preferred_ordering_columns ARRAY[orderdate] );4.3 原生 Parquet Writer为 Presto 引入原生 Parquet Writer使 Parquet 写入不再完全依赖外部实现为 Parquet 格式的写入性能与可控性打下基础。4.4 HMS 委托令牌模拟访问与多 HMS 负载均衡支持通过HMS delegation token实现模拟impersonation访问在共享元数据服务场景下细化权限边界。支持多 HMS 实例的负载均衡并按 HMS 主机维度输出故障/性能拆分指标便于在大规模元数据服务集群中定位单实例瓶颈。4.5 文件状态缓存全表化与 ORC 压缩独立配置# 缓存所有表的文件状态通配符开启全表缓存 hive.file-status-cache-tables* # 单独为 ORC/DWRF 指定压缩算法其余格式仍走 hive.compression-codec hive.orc-compression-codecZSTDhive.file-status-cache-tables设为*时缓存全部表的文件状态显著降低频繁访问小文件的元数据开销配置见 HiveClientConfig.java。新增hive.orc-compression-codec用于覆盖hive.compression-codec对 ORC/DWRF 格式的压缩设置RC、Parquet 等其他格式仍遵循hive.compression-codec配置见 HiveClientConfig.java。若未指定则 ORC/DWRF 继续回落到全局压缩配置。五、Druid 连接器segment 扫描与查询下推0.235 修复了 Druid 连接器的两个问题并新增一项下推能力修复segment 扫描segment scan缺陷。修复count 聚合中DISTINCT不被尊重的问题保证COUNT(DISTINCT ...)语义正确。新增查询处理下推由配置属性druid.compute-pushdown-enabled控制druid.compute-pushdown-enabledtrue开启后符合条件的聚合/过滤计算可下推到 Druid 执行减少跨系统数据传输。六、Verifier查询验证能力与容错增强Verifierpresto-verifier模块用于对比控制control与测试test两套集群的查询结果0.235 做了多项可用性改进修复重提交查询必然失败的问题此前被重提交resubmit的查询总是失败现已修复。新增复杂列类型校验支持验证产出TIME、TIMESTAMP WITH TIME ZONE、DECIMAL类型列以及包含这些类型的结构化类型列。临时表表属性覆盖新增配置control.table-properties与test.table-properties可为 Verifier 创建的临时表分别指定表属性如存储格式、分区键保证对照组与测试组的建表环境可控。Verifier 内部错误的结果输出当验证失败源于 Verifier 自身内部错误时也能输出验证结果便于区分数据不一致与工具故障。smart-teardown取代run-teardown-on-result-mismatch当 control 与 test 查询都成功但验证失败时可跳过 teardown 查询以便保留现场排查。新配置smart-teardown取代旧的run-teardown-on-result-mismatch# presto-verifier 配置 smart-teardowntrue七、升级与采纳建议综合 0.235 的变更从运维角度给出以下落地要点内存治理优先关注 1.1/1.2 的快速失败行为与 1.6 的重分区缓冲区上限在共享集群上配置driver.max-page-partitioning-buffer-count可增强稳定性。软内存限制0.235 引入的软内存限制见发布说明与 MemoryManagerConfig.java / NodeMemoryConfig.java 中的Config定义允许查询通过会话属性在硬上限之内动态申请内存部署时可从默认值开始观测并逐步收紧。连接器配置Pinot 场景开启pinot.infer-date-type-in-schema/pinot.infer-timestamp-type-in-schema前需确认 Pinot 侧时间字段单位Hive 场景按文件格式分别设置压缩编码并用hive.file-status-cache-tables*提升小文件密集负载性能。函数与 SQL 特性SHOW CREATE FUNCTION、scale_qdigest、缅甸语函数与球面地理函数增强均可直接在 0.235 集群中使用若业务依赖在 SQL 函数体内嵌套调用 SQL 函数需在升级前改写。以上所有配置属性与函数的行为均可对照当前仓库源码与测试用例进一步验证会话属性见 SystemSessionProperties.java内存配置测试见 TestMemoryManagerConfig.java 与 TestNodeMemoryConfig.javaPinot 配置测试见 TestPinotConfig.javaHive 配置测试见 TestHiveClientConfig.java。赞分享大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载相关推荐Presto 0.215 版本发布说明深度解析查询引擎、优化器、地理空间与连接器关键变更Presto 0.215 版本发布说明深度解析查询引擎、优化器、地理空间与连接器关键变更 本文基于 Presto 官方发布文档 release 0.215.r大数据数据库后端Presto 0.220 版本特性全解析查询执行、连接器写入优化与 Verifier 改进Presto 0.220 版本特性全解析查询执行、连接器写入优化与 Verifier 改进 导读 本文基于 Presto https://link.gitco大数据数据库后端Presto 0.149 版本发布详解查询引擎修复、新 Web 界面与 Hive 连接器增强Presto 0.149 版本发布详解查询引擎修复、新 Web 界面与 Hive 连接器增强 Presto 0.149 是一次以「稳定性和配置体系重构」为核心大数据数据库后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

极课大数据源码速查手册:3步搞定代码调试难题
极课大数据源码速查手册:3步搞定代码调试难题

极课大数据源码速查手册:3步搞定代码调试难题 复制来的代码跑不通,报错信息像天书,翻遍文档找不到对应章节,这种抓狂感谁懂?别急,今天这篇极课大数据进阶用法,就是为你准备的 速查手册… · 2026/9/23 3:42:58

双曝光RAW+元引导扩散模型:暗光恢复的新思路与工程实践
双曝光RAW+元引导扩散模型:暗光恢复的新思路与工程实践

上个月我拿到一批凌晨街道的RAW素材,光照条件差到什么程度呢?取景器里几乎全黑,直方图挤在最左侧的两个色阶里。按以前的思路,这种素材要么拉曝光硬提亮,要么多头对齐堆栈,折腾很久之后结果还是满屏噪点。R… · 2026/9/23 3:42:58

3分钟搞定魔兽私服论坛后端源码:从登录到发帖全链路拆解
3分钟搞定魔兽私服论坛后端源码:从登录到发帖全链路拆解

3分钟搞定魔兽私服论坛后端源码:从登录到发帖全链路拆解 看了一堆教程还是不会写项目?别急,今天我们把【魔兽私服论坛】的核心后端逻辑扒开揉碎,用 Python… · 2026/9/23 3:42:52

地铁站疏散仿真实战:用Legion建模与瓶颈识别全流程解析
地铁站疏散仿真实战:用Legion建模与瓶颈识别全流程解析

站台层突然冒烟,广播里喊着疏散,几百号人却堵在同一部扶梯口——这种画面真出事的时候没人敢拍下来,但设计院必须在图纸阶段就把答案算出来。我最近刚做完一个地铁站的疏散仿真案例,用的就是人群仿真软件Legion,前后折… · 2026/9/23 4:25:43

龙珠超第96话深度解析:从分片文件名到力量大会团队战术精髓
龙珠超第96话深度解析:从分片文件名到力量大会团队战术精髓

整理硬盘备份的时候,我翻出一个老文件夹,里面躺着一串冷冰冰的文件名:dragonballsuper_096-1。这种命名方式在动漫资源圈里太常见了——系列名加集数加分片序号,但我盯着"096-1"愣了几秒:这不是一般的剧集文… · 2026/9/23 4:25:43

基于Spring Boot的企业资金流转管理平台开发实战
基于Spring Boot的企业资金流转管理平台开发实战

一套基于Java的“企业资金流转管理平台”能做多深?说白了,就是把“钱从哪儿来、花到哪儿去、账上还剩多少”这三件事管明白。很多同学一听到“财务管理系统”就头大,觉得要碰一堆复杂的会计科目,实际上毕设级别的系统,… · 2026/9/23 4:25:37

Flask和Django开发社区汽车共享预约平台实战指南
Flask和Django开发社区汽车共享预约平台实战指南

不用我多说,做“社区汽车共享”这种项目,十个人里八个会掉进同一个坑:把系统做成一个孤零零的车辆管理后台,结果预约、人、车、账全对不上。我这次用Python生态里的两个主力框架Flask和Django,把“社区车辆共享租赁预约… · 2026/9/23 4:25:31

养老服务师培训机构推荐:从报名学习到考试拿证,报考全攻略
养老服务师培训机构推荐:从报名学习到考试拿证,报考全攻略

随着我国人口老龄化程度持续加深,养老服务行业正迎来前所未有的发展机遇,“养老服务师”也成为越来越多人的职业新选择。养老服务师到底是做什么的?证书有没有用?零基础能不能报考?从报名、培训到考试拿证要多久&#… · 2026/9/23 4:25:25

3步手写RFB协议:告别文档迷宫,搞定远程桌面核心
3步手写RFB协议:告别文档迷宫,搞定远程桌面核心

3步手写RFB协议:告别文档迷宫,搞定远程桌面核心 官方文档翻了几百页还是云里雾里?别急,今天咱们不背概念,直接上手 手写实现 一个最小可用的RFB(Remote… · 2026/9/23 4:25:25

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码