
Presto 0.197 版本发布详解查询调度修复、ORC 写入优化与资源组命名变量支持【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址: https://gitcode.com/gh_mirrors/pre/prestoPresto 0.197 是 Presto 分布式 SQL 查询引擎演进历程中的一个重要里程碑版本。本指南围绕该版本发布说明release-0.197.rst展开系统讲解本次更新在通用查询执行、资源组管理、Hive/ORC 写入、CLI 与 SPI 接口层面的功能增强与问题修复。读完本文你将掌握 0.197 新增的会话属性与配置项的具体用法理解广播空间连接、命名变量资源组等新能力的底层实现并能结合源码路径进一步深入验证。一、通用查询执行General Changes改进1.1 查询调度挂起修复本次修复了当concurrent_lifespans_per_task会话属性被设置时查询调度可能出现的挂起hang问题。该属性用于控制每个 task 上并发执行的 lifespan 数量在分桶bucket感知执行等场景下使用0.197 之前某些调度组合会导致任务迟迟无法启动或完成本次更新解决了这一阻塞问题。1.2 时区相关的 TIMESTAMP 字面量解析修复当查询中的TIMESTAMP字面量对应的本地时间在 Presto JVM 的默认时区中不存在时此前会直接报错。例如若 Presto 运行在 CET 时区如Europe/Brussels而客户端会话时区为 UTC那么表达式TIMESTAMP 2017-03-26 02:10:00就会触发失败——因为该本地时间恰好落在夏令时切换的时间空洞中。0.197 修复了此类边界情况下的字面量处理逻辑。1.3 谓词推断与下推增强symbol IN subquery谓词扩展了对于查询中使用IN子查询谓词的谓词推断predicate inference与下推pushdown能力让优化器能更充分地利用子查询结果约束外层查询。column IN values list谓词支持在 values list 中的值需要类型转换casting以匹配column类型时进行谓词下推。这意味着类似WHERE int_col IN (1, 2, 3)这类隐式转换场景也能被优化器识别并下推到数据源减少不必要的数据传输。1.4 函数性能优化与新增min/max优化避免不必要的对象创建从而降低 GC垃圾回收开销。相关实现位于 presto-main-base 的聚合函数代码中通过复用可写对象减少堆分配压力。ST_XMin、ST_XMax、ST_YMin、ST_YMax性能优化这些地理边界函数在 0.197 中得到加速。sequence函数新增DATE变体此前sequence()仅支持时间戳timestamp与整数类型0.197 为其增加了DATE参数重载。从 SequenceFunction.java 的源码可以看到三个新增入口sequenceDateDefaultStep默认步长 1 天、sequenceDateDayToSecond步长为天到秒的 interval与sequenceDateYearToMonth步长为年到月的 interval例如SELECT sequence(DATE 2020-01-01, DATE 2020-01-05)即可生成按天递增的日期序列。新增ST_IsSimple地理空间函数用于判断一个几何对象是否为简单几何即不自相交。实现在 GeoFunctions.java以ScalarFunction(ST_IsSimple)注解注册输入GEOMETRY类型返回BOOLEAN。1.5 广播空间连接Broadcast Spatial Joins0.197 新增了对广播空间连接的支持。传统空间连接依赖空间索引进行本地匹配而广播空间连接会把小表构建侧的几何数据以广播形式分发给各个 worker配合 SpatialIndexBuilderOperator 构建的空间索引如PagesRTreeIndex使用的 R-Tree在本地完成谓词求值适合小几何表与大数据集连接的场景可显著减少跨节点洗牌开销。二、资源组Resource Groups变更2.1 调度权重的配置校验0.197 调整了资源组策略resource group policy中权重scheduling weight的配置校验规则现在要求一个资源组下要么所有子组都配置了调度权重要么全部没有配置避免部分子组有权重、部分没有时出现不确定的调度行为。2.2 源与用户正则中的命名变量新增了在 source 和 user 正则表达式中使用命名变量的能力变量可用于参数化资源组名称。例如在资源组选择器配置中可以把正则捕获组命名并引用到资源组的名称模板里从而实现按用户或来源动态路由到不同资源组。相关选择器与匹配逻辑位于 presto-main-base 的资源组管理模块中。2.3 DB 资源组精确匹配选择器可选字段对于基于数据库DB存储的资源组精确匹配exact match选择器本次支持了可选字段即匹配条件中的某些字段可以留空不再要求所有字段都必须提供提升了选择器配置的灵活性。三、Hive 连接器变更3.1 分区统计信息读取修复修复了读取 Hive 分区统计信息时未设置字段unset fields的问题。此前未设置的字段会被错误地解释为数值 0导致统计信息失真并可能影响 CBO基于成本的优化决策0.197 起未设置字段将保持未知语义。3.2 优化版 ORC 写入器Optimized ORC Writer多项修复单文件超过 2GB 的整数溢出修复此前使用优化版 ORC 写入器写出大于 2GB 的单文件时会发生整数溢出本次修复了该问题。系统内存核算修正现在系统内存system memory核算会将 stripe 统计信息大小stripe statistics size与写入器校验大小writer validation size一并计入避免内存估算偏低。压缩缓冲区动态分配优化版 ORC 写入器的压缩缓冲区改为动态分配避免不必要的内存占用并新增配置属性hive.orc.writer.max-compression-buffer-size限制缓冲区的最大尺寸。3.3 新增 ORC 相关配置与会话属性0.197 围绕 ORC 写入引入了三个关键的调优入口名称类型说明hive.orc.writer.max-compression-buffer-size配置属性优化版 ORC 写入器压缩缓冲区的最大尺寸限制。定义于 OrcFileWriterConfig.java 的setMaxCompressionBufferSize方法orc_optimized_writer_max_stripe_size会话属性优化版 ORC 写入器允许的单个 stripe 最大尺寸用于在查询级别按需调整。定义于 HiveSessionProperties.java默认值取自orcFileWriterConfig.getStripeMaxSize()orc_string_statistics_limit会话属性写出 ORC 文件时字符串统计信息的大小上限超过该限制则丢弃字符串统计信息以控制统计信息的内存与文件开销。定义于 HiveSessionProperties.java默认值来自orcFileWriterConfig.getStringStatisticsLimit()其中hive.orc.writer.max-compression-buffer-size的默认值定义在OrcFileWriterConfig中并通过Config注解绑定配套的单测见 TestOrcFileWriterConfig.java读者可在该测试中查看各项默认值的具体数值。会话属性可通过如下方式使用-- 设置单个 stripe 的最大尺寸为 64MB SET SESSION orc_optimized_writer_max_stripe_size 64MB; -- 设置字符串统计信息上限为 1MB SET SESSION orc_string_statistics_limit 1MB;3.4 视图属主动态化视图view的属主改为在查询时从 metastore 返回的视图属主为准而不再固定为创建视图的用户。这意味着可以通过修改 metastore 中视图的属主信息来改变视图的执行权限归属。四、CLI 变更修复了 CLI 在与 Presto Server 通信失败时的挂起hang问题。此前网络异常时 CLI 可能一直阻塞等待响应0.197 起会及时感知连接失败并返回错误信息避免交互终端假死。五、SPI 变更5.1 连接器会话属性随元数据调用传递执行SHOW语句或查询information_schema时发起的连接器元数据metadata调用现在会携带连接器会话属性connector session properties保证元数据查询与数据查询在会话上下文上保持一致。5.2 查询完成事件增加 GC 信息QueryCompletedEvent中新增了查询运行期间发生的 Full GC完整垃圾回收次数与耗时统计便于通过事件监听器分析查询性能与 JVM 压力。5.3 资源组管理器接口重构ResourceGroupManager接口新增match()方法同时移除了getSelectors()方法与ResourceGroupSelector接口。原SelectionContext类更名为SelectionCriteria表示匹配的输入条件并新建SelectionContext类作为match()方法的返回值其中包含资源组 IDresource group ID与由管理器定义的上下文字段context field。这一改动将匹配条件与匹配结果清晰分离。5.4 视图属主来源扩展ConnectorViewDefinition在携带视图属主信息时将优先使用其中的属主view owner字段与前述 Hive 侧视图属主动态化相呼应。六、升级建议0.197 涉及 SPI 层接口变更ResourceGroupManager接口调整、SelectionContext重命名因此使用自定义资源组管理器或依赖这些 SPI 类的插件需要同步适配后再升级。对于 Hive 连接器使用者建议在升级后结合hive.orc.writer.max-compression-buffer-size与两个新增会话属性重新评估 ORC 写入作业的内存与文件大小表现对于地理空间分析用户ST_IsSimple与广播空间连接可直接用于简化几何自相交校验与加速空间关联查询。【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址: https://gitcode.com/gh_mirrors/pre/presto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考