
大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载导读本文基于 Presto 官方发布说明 release-0.292.rst系统梳理 0.292 版本的核心变更新增的 Java / Native 双形态 Arrow Flight 连接器、原生 ORC Reader、Iceberg 表UPDATE支持与 sort order、bit_length函数、JDK 17 构建支持以及涉及安全、调度、Hive/Iceberg/Kudu 连接器与 SPI 的大量修复与增强。读者可据此快速判断该版本的新能力边界、迁移关注点与升级前需要确认的配置项。一、版本概览0.292 的关键数字与主题Presto 0.292 是一次横跨核心引擎、连接器、原生执行引擎Prestissimo与安全依赖的大型发布。其 Highlights 包含 16 项主要变更涵盖新连接器Java 与 Native 两种形态的 Arrow Flight 连接器presto-base-arrow-flight新执行能力原生 ORC reader、IcebergUPDATESQL 语句新函数MySQL 兼容的bit_length构建与运维JDK 17 支持、task.max-drivers-per-task默认值改为按宿主线程并发度自适应安全修复WITH子句查询中列权限检查遗漏的安全漏洞并升级十余个依赖以修复 CVE。版本详情中还新增了:doc:../troubleshoot 故障排查专题与/installation/deployment中文档化文件型 Hive Metastore 部署方式说明该版本同时强化了文档体系。二、核心新特性深度解析1. MySQL 兼容函数bit_length0.292 新增bit_length(string)函数返回给定字符串所占用的比特数与 MySQL 语义对齐。其实现位于 StringFunctions.javaDescription(count of bits for the given string) ScalarFunction(bit_length) LiteralParameters(x) SqlType(StandardTypes.BIGINT) public static long bitLength(SqlType(varchar(x)) Slice slice) { return (long) slice.length() * 8; }从源码可以看出返回类型固定为BIGINT入参为带长度参数的varchar(x)计算逻辑为字节数乘以 8按字节计比特因此对多字节 UTF-8 字符如中文返回的是 UTF-8 编码后的字节数 × 8而非字符数 × 8示例SELECT bit_length(Presto)→486 字节 × 8SELECT bit_length(你好)→48UTF-8 下 6 字节 × 8。该函数与既有length字符数/码点数、octet_length字节数形成互补方便从 MySQL 迁移的查询直接复用。2. JSON 输出规范化会话属性canonicalized_json_extract版本新增会话属性canonicalized_json_extract用于对 JSON 提取extract结果进行规范化输出。该属性在 SystemSessionProperties.java 中定义public static final String CANONICALIZED_JSON_EXTRACT canonicalized_json_extract;这意味着 JSON 函数如json_extract、json_extract_scalar的输出格式可以通过会话级开关控制便于在不同 JSON 文本表示键顺序、空白、转义等之间获得可预测、可比较的规范结果。实际使用时通过 SQL 会话设置SET SESSION canonicalized_json_extract true;从源码结构看该属性被注册进SystemSessionProperties会话属性体系可通过 JDBC/CLI 的SET SESSION或连接参数全局开启。3. Java 与 Native 双形态 Arrow Flight 连接器0.292 引入base-arrow-flight连接器模块对应源码目录 presto-base-arrow-flight同时提供Java 形态由 Java worker 服务 Arrow Flight 端点Native 形态由 Presto C workerPrestissimo支持 Apache Arrow Flight 协议#24504。配套文档见 base-arrow-flight.rst这是 0.292 为以 Arrow Flight 作为列式传输协议对外提供查询服务打下的基础也是 Presto 走向高性能原生列式服务的关键一步。4. 原生 ORC Reader 支持#23037为 Presto 增加原生 ORC Reader 能力使 ORC 文件读取可以下沉到 C 执行路径Prestissimo 侧同步新增 ORC reader 支持。对于以 ORC 为主要存储格式Hive/Iceberg 表的部署这意味着原生执行引擎可以直接读取 ORC 数据而无需回到 Java 侧为全链路向量化执行补齐了重要一环。5. IcebergUPDATE语句支持#24281为 Iceberg 连接器带来UPDATESQL 支持这是继DELETE之后 Iceberg 表写入能力的重要补全。同时SPI 层面引入独立的ConnectorDeleteTableHandle接口替代原先复用ConnectorTableHandle的方式见下文 SPI 变更新增 DELETES 的 pagesink 以支持未来 DELETE 写入路径#24528。搭配 0.292 同时落地的 Iceberg 表 sort order 与write.data.path表属性详见下文Iceberg 连接器在写入侧的能力趋于完整。6. Iceberg 表 Sort Order 与独立写路径表排序sort order#21977支持在建表时通过sorted_by列列表声明排序键写入的文件将按该顺序排序后再落盘从而提升后续查询的局部性如按排序键的范围裁剪与预聚合。相关实现可在 IcebergTableProperties.java 中追溯。独立写路径#24397新增表属性write.data.path允许为 Iceberg 表指定独立的数据写入路径配套的连接器配置项为iceberg.catalog.hadoop.warehouse.datadirHadoop catalog 下新表的根写入路径。这对于将数据写入与元数据目录分离、或写入特定存储介质如 SSD、冷存储的场景非常实用。同时新增表属性read.split.target-size与会话属性target_split_size_bytes#24417用于精细化控制读取 split 的目标大小。7. JDK 17 构建支持#24677使 Presto 可以使用 JDK 17 构建。这是一项对部署环境有直接影响的变更升级前请确认集群所有节点coordinator、worker、native worker的运行时 JDK 版本与构建脚本根 pom.xml、mvnw兼容并配合jvm.config中的 GC 与内存参数做回归验证。8. TPC-DS 连接器新增tpcds.use-varchar-type#24406为 TPC-DS 连接器增加配置属性tpcds.use-varchar-type用于将char列切换为varchar列。其解析逻辑位于 TpcdsConnectorFactory.javaprivate boolean useVarcharType(MapString, String properties) { try { return parseBoolean(firstNonNull(properties.get(tpcds.use-varchar-type), String.valueOf(false))); } catch (IllegalArgumentException e) { throw new IllegalArgumentException(Invalid property tpcds.use-varchar-type); } }源码还揭示了该属性的一个关键约束在 NativePrestissimo集群中该属性必须为true否则连接器工厂会直接抛出IllegalArgumentExceptionTpcdsConnectorFactory.java因为原生执行仅支持varchar列。配置示例# etc/catalog/tpcds.properties connector.nametpcds tpcds.use-varchar-typetrue9.task.max-drivers-per-task默认值改进#24642将task.max-drivers-per-task的默认值改为跟随宿主机的线程并发度。该配置定义于 TaskManagerConfig.javaprivate int maxDriversPerTask Integer.MAX_VALUE; ... Config(task.max-drivers-per-task) public TaskManagerConfig setMaxDriversPerTask(int maxDriversPerTask)变更后未显式配置时系统会根据 worker 节点的 CPU 并发能力自动计算每个 task 可运行的 driver 上限替代此前偏保守的默认值减少手动调优负担。若需要固定值仍可在config.properties中显式设置task.max-drivers-per-task16三、查询分析与调度优化0.292 在协调器coordinator与调度路径上做了多处针对性优化调度热路径去装箱#24582与#24673将调度关键路径中的DataSize、DateTime改为long原语减少对象分配与装箱开销提升大规模任务调度吞吐任务事件循环可配置#24565将 task 事件循环线程数改为可通过配置文件调整修复潜在阻塞问题#24668新增task.enable-event-loop开关用于改善协调器在运行大量任务时的效率优化器统计合并#24414重构了多个 operator 统计信息的合并逻辑并将指标创建过程中的局部变量抽取为专用类降低指标系统开销新增优化器规则#24047增加在 partial aggregation GroupId 组合下方插入 exchange的优化规则由布尔会话属性add_exchange_below_partial_aggregation_over_group_id控制利用列分析增强#24638提升对查询中已利用列的分析能力——通过展开视图定义并检查底层表的利用列使列裁剪与权限检查更准确#24789修复 map 列传入unnest时的索引错误利用列分析器将 key/value 输出字段正确映射回输入表达式。四、错误处理与正确性修复INTERVAL 溢出处理#24353改进INTERVAL DAY/HOUR/SECOND运算符溢出时的错误处理#24617修复INTERVAL YEAR TO MONTH值的加、减、乘、除运算。时间戳构造边界#24674修复从过大/过小的 unix 时间戳构造TimestampWithTimeZone时静默返回错误结果的问题。Hive UUID 解析#24538修复 HiveUUID类型解析。Parquet 嵌套 Decimal#24440修复嵌套 Decimal 类型导致 Parquet 读取失败的问题Hive 连接器条目同步收录。五、安全修复与依赖升级1.WITH子句列权限检查安全漏洞重点#24647修复了一个安全漏洞当check_access_control_for_utlized_columns为true时使用WITH子句CTE的查询此前有时不会检查部分被使用列的权限。修复后引擎会始终检查查询中所有被使用列的权限。文档同时指出了两个已知边界情况原样引用存在同名 CTE时可能检查的列多于实际使用的列或者退化为检查查询中引用的全部列。这意味着该修复以宁可多查、不可漏查换取安全性启用严格列权限检查的集群升级后应关注 CTE 相关查询的权限行为是否符合预期。2. 依赖升级与 CVE 修复0.292 响应多个 CVE 与安全公告批量升级了底层依赖包括依赖目标版本响应的安全公告netty4.1.115.FinalCVE-2024-47535libthrift0.14.1CVE-2020-13949io.grpc1.70.0CVE-2024-7254、CVE-2020-8908log4j-api / log4j-core2.24.3CVE-2024-47554commons-text1.13.0CVE-2024-47554okhttp / okio4.12.0 / 3.6.0CVE-2023-3635org.apache.calcite1.38.0CVE-2023-2976org.apache.ratis3.1.3CVE-2020-15250aws-java-sdk1.12.782CVE-2024-21634json-smart2.5.2CVE-2024-57699accumulo1.10.1CVE-2020-17533hive-dwrf含 snappy 0.50.8.7CVE-2024-36124prismJs1.30.0CVE-2024-53382errorprone2.36.0—jQuery3.7.1随 bootstrap 升级bootstrap5—此外移除reload4j依赖以响应 WS-2022-0467以dagre-d3-es替换废弃的dagre-d3以修复高危漏洞 WS-2022-0322从根 POM 移除 log4j-api / log4j-core 的显式声明#24605Elasticsearch 连接器改进加密协议响应 SonarQube 规则java:S4423不应使用弱 SSL/TLS 协议。这些升级同时带来了对运行时 JVM 依赖netty、grpc、calcite 等的版本约束变化升级后建议关注第三方插件与自定义 SPI 实现的类路径冲突。六、连接器变更一览Hive 连接器修复 Parquet 嵌套 Decimal 读取#24440、Hive metastore 2.3 视图获取#24466新增会话属性hive.stats_based_filter_reorder_disabled以禁用基于 reader 统计的过滤重排#24630随后在#24637中重命名为hive.native_stats_based_filter_reorder_disabled——升级时需注意旧属性名已失效文件型 Hive metastore 支持使用 HDFS/S3 路径作为 warehouse 目录#24660相关部署文档已补充至 /installation/deploymentbeginDelete返回类型替换为新的ConnectorDeleteTableHandle#24528。Iceberg 连接器除前文所述 sort order、write.data.path、UPDATE支持外还包括新增FileHiveMetastore专用子类以隔离 Iceberg 连接器的行为差异#24573manifest 文件缓存为使用 Hive metastore 的部署增加 manifest 缓存并默认开启以改善查询性能#24481同时修复缓存部分缺失partial miss时统计信息丢失的问题#24480支持hive.affinity-scheduling-file-section-size配置与会话属性affinity_scheduling_file_section_size#24598修复 Iceberg 日期列过滤#24583Iceberg 类型转换器支持带时区的时间戳#23534配置HIVE文件 catalog 时支持表重命名#24312废弃部分表属性名改为采用 Iceberg 库自身的属性命名详见 iceberg.rst。Kudu 连接器beginDelete返回类型替换#24528。Elasticsearch 连接器改进加密协议弱 SSL/TLS 加固。TPC-DS 连接器新增tpcds.use-varchar-type详见上文。七、SPI 变更面向连接器与插件开发者0.292 的 SPI 层有较多破坏性变更自定义连接器/插件在升级时需重点核对删除句柄类型化#24528、#24721ConnectorMetadata.beginDelete返回类型、finishDelete入参类型均替换为新增的独立接口ConnectorDeleteTableHandle取代原先复用ConnectorTableHandle的做法Metadata中ConnectorTableHandles相关变更同步支持DeleteTableHandle。ConnectorProtocolTemplate类型参数#24721为ConnectorProtocolTemplate实现增加类型参数以支持连接器特有类型的反序列化。已有 Native 连接器实现必须更新定义为其类型提供具体类型或使用NotImplemented。PlanChecker签名变化#24557PlanChecker.validate与PlanChecker.validateFragment新增ConnectorSession参数。新增IndexSourceNode到 SPI#24678。表达式优化器工厂扩展点#24144新增CoordinatorPlugin#getExpressionOptimizerFactories允许自定义协调器侧表达式求值。事件监听增强#24456、#24590支持多个查询事件监听器QueryCompletedEvent中新增 node ID 到 plan node 的映射。可重试错误标记#24808将REMOTE_BUFFER_CLOSE_FAILED设为可重试错误修复相关查询失败。八、PrestissimoNative Execution变更原生执行引擎在 0.292 中同步获得大量能力Native 类型管理器#24179与Native 函数命名空间管理器#23358Native 侧 Arrow Flight 连接器支持#24504与 Java 侧base-arrow-flight呼应共享仲裁器shared arbitrator配置属性#24720新增以下属性用于全局内存仲裁shared-arbitrator.global-arbitration-abort-time-ratioshared-arbitrator.global-arbitration-memory-reclaim-pctshared-arbitrator.global-arbitration-without-spillshared-arbitrator.memory-pool-abort-capacity-limitshared-arbitrator.memory-pool-min-reclaim-bytesshared-arbitrator.memory-reclaim-threads-hw-multiplier系统配置扩展#24726、#24774新增spill-enabled、join-spill-enabled、aggregation-spill-enabled、order-by-spill-enabled四个 spill 开关以及exchange.http-client.request-data-sizes-max-wait-sec新错误码#24773在INSUFFICIENT_RESOURCE下新增MEMORY_ARBITRATION_FAILUREC worker 向协调器上报节点池类型#24569task.max-drivers-per-task默认值改进同样作用于 Native 侧#24642新增 presto-native-tests 模块用于与 Presto Native worker 运行端到端测试#24234Spark 侧新增spark.dynamic-presto-memory-pool-tuning-enabled配置#24714根据容器可用内存动态调整 Spark executor 内存。九、升级建议与注意事项汇总综合 0.292 的变更升级前建议重点确认权限行为变化启用check_access_control_for_utlized_columns的集群升级后 CTE 查询的列权限检查更严格可能因多查而拒绝原本通过的查询——请提前在测试环境验证核心业务查询。连接器 SPI 兼容使用自定义连接器或基于ConnectorProtocolTemplate的 Native 连接器实现需按新类型参数与ConnectorDeleteTableHandle接口适配。属性重命名hive.stats_based_filter_reorder_disabled已更名为hive.native_stats_based_filter_reorder_disabled旧名称不再生效。JVM 依赖升级netty、grpc、calcite、log4j 等大规模升级注意 classpath 冲突与第三方插件兼容性。Native 集群的 TPC-DS使用 Native worker 时tpcds.use-varchar-type必须为true。task.max-drivers-per-task默认值从固定值改为按主机线程并发度自适应若此前依赖旧默认值建议显式配置以保持行为稳定。构建环境JDK 17 已获得支持可逐步迁移构建环境但需配合 JVM 参数回归验证。参考资源完整发布说明release-0.292.rstArrow Flight 连接器文档base-arrow-flight.rstIceberg 连接器文档iceberg.rst相关实现StringFunctions.java、SystemSessionProperties.java、TaskManagerConfig.java、TpcdsConnectorFactory.java、IcebergTableProperties.java赞分享大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载相关推荐Presto 0.293 版本发布详解Thrift 序列化、Router 增强、原生执行与连接器新特性全解读Presto 0.293 版本发布详解Thrift 序列化、Router 增强、原生执行与连接器新特性全解读 Presto 0.293 是 PrestoTr大数据数据库后端Presto 0.261 版本发布详解DECIMAL 聚合性能优化、Hive 隐藏列、Iceberg LocationProvider 与连接器增强Presto 0.261 版本发布详解DECIMAL 聚合性能优化、Hive 隐藏列、Iceberg LocationProvider 与连接器增强 本篇技术大数据数据库后端Presto 0.197 版本发布详解查询调度修复、ORC 写入优化与资源组命名变量支持Presto 0.197 版本发布详解查询调度修复、ORC 写入优化与资源组命名变量支持 Presto 0.197 是 Presto 分布式 SQL 查询引擎大数据数据库后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考