Presto ANALYZE 语句详解表与列统计信息收集指南【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址: https://gitcode.com/gh_mirrors/pre/prestoANALYZE是 Presto 中用于收集表和列统计信息的 SQL 语句这些统计信息行数、空值数、去重值数、min/max 等是查询优化器进行 Join 顺序选择、谓词下推等代价估算的关键输入。本文以 ANALYZE 官方文档 为核心结合 Hive、Iceberg 连接器的实现源码与文档完整讲解语法、WITH 属性、支持范围、实战示例及底层原理帮助读者在 Presto 集群中正确、高效地维护统计信息。语法SynopsisANALYZE table_name [ WITH ( property_name expression [, ...] ) ]table_name目标表名支持catalog.schema.table三段式全限定名也可使用当前 catalog/schema 下的简化名称。WITH子句可选用于传入连接器特定的属性property例如 Hive 连接器的partitions属性。功能描述DescriptionANALYZE用于收集指定表的表级与列级统计信息。需要注意当前实现的限制目前仅为基本类型primitive types收集列统计信息复杂类型如ROW、ARRAY、MAP等不会生成列级统计。统计信息的具体种类由底层连接器决定。以 Hive 连接器为例Hive 连接器文档 中列出的各类型统计项如下列类型收集的统计信息TINYINT/SMALLINT/INTEGER/BIGINT/DOUBLE/REAL/DECIMAL/DATE/TIMESTAMPnull 数量、distinct 数量、min/max 值VARCHAR/CHARnull 数量、distinct 数量VARBINARYnull 数量BOOLEANnull 数量、true/false 值数量列出可用的 WITH 属性WITH子句可用的属性是连接器相关的。要查看当前 Presto 版本下所有连接器注册的 analyze 属性可直接查询系统表SELECT * FROM system.metadata.analyze_properties该表由 AnalyzePropertiesSystemTable.java 实现它继承自AbstractPropertiesSystemTable数据来源是Metadata.getAnalyzePropertyManager().getAllProperties()——也就是把各连接器在启动时注册的 analyze 属性统一汇总后暴露给查询。因此运行这条查询即可获得与当前部署连接器精确匹配的属性清单、类型与默认值。支持的连接器ANALYZE并非所有连接器都支持。根据官方文档当前仅以下两个连接器支持Hive 连接器见 Collecting table and column statistics支持对分区表按分区收集统计信息。Iceberg 连接器见 Collecting table and column statistics支持全表统计信息收集。对其他连接器执行ANALYZE会得到不支持的错误。实战示例Examples1. 分析整张表对当前 catalog/schema 下的表web收集统计信息ANALYZE web;2. 使用三段式表名指定 catalog 与 schema避免歧义ANALYZE hive.default.stores;Iceberg 表用法相同ANALYZE iceberg.default.stores;Iceberg 连接器文档中的示例为ANALYZE iceberg.tpch.orders;即对tpchschema 下的orders表收集统计信息。3. 指定 Hive 分区表的部分分区对于 Hive 分区表默认会分析全部分区也可以使用WITH (partitions ...)精确定位需要分析的分区。partitions属性是一个外层数组其中每个内层数组代表一个分区的各分区键值键值的顺序必须与表 schema 中分区键的声明顺序一致。按单分区键ds为分区键分析两个日期分区ANALYZE hive.default.sales WITH (partitions ARRAY[ARRAY[1992-01-01], ARRAY[1992-01-02]]);按复合分区键分区键为state和city两列分析两组分区ANALYZE hive.default.customers WITH (partitions ARRAY[ARRAY[CA, San Francisco], ARRAY[NY, NY]]);Hive 连接器文档 给出的通用形式为ANALYZE hive.sales WITH ( partitions ARRAY[ ARRAY[partition1_value1, partition1_value2], ARRAY[partition2_value1, partition2_value2]]);以上语句会分别收集分区键为partition1_value1, partition1_value2与partition2_value1, partition2_value2的两个分区的统计信息。4. Iceberg 表的全表分析Iceberg 连接器目前只支持全表统计收集且ANALYZE仅支持在 autocommit 模式下执行参见 Iceberg 连接器文档 中的事务限制说明ANALYZE iceberg.default.stores;源码级原理Hive 连接器的 partitions 属性partitions属性由 HiveAnalyzeProperties.java 定义与解析可以从中看到几个值得注意的实现细节属性名常量public static final String PARTITIONS_PROPERTY partitions;。属性类型声明为array(array(varchar))即内层数组的每个元素都是字符串类型这解释了为何日期分区值需要写成1992-01-01这样的字符串字面量。getPartitionList(...)方法负责从解析后的属性 Map 中取出分区列表未指定时返回Optional.empty()表示分析全表/全部分区。decodePartitionLists(...)会把分区值中的null替换为 Hive 默认分区值HIVE_DEFAULT_DYNAMIC_PARTITION保证动态分区场景下也能正确匹配同时会将结果转换为 Set 去重。若属性中出现null分区值会抛出INVALID_ANALYZE_PROPERTY错误提示 Invalid null value in analyze partitions property。统计收集的执行入口在 HiveMetadata.java 中getStatisticsCollectionMetadata方法定义了ANALYZE执行时收集哪些统计列统计范围排除分区列partitionedBy与隐藏列hidden后的所有列临时表使用getColumnStatisticMetadataForTemporaryTable普通表使用getColumnStatisticMetadata后者会通过 metastore 的getSupportedColumnStatistics确认该类型支持哪些统计项。表统计ANALYZE场景includeRowCount true会额外收集行数ROW_COUNT。结果封装为TableStatisticsMetadata(columnStatistics, tableStatistics, partitionedBy)由引擎统一调度执行统计收集任务最终写回连接器的 metastore。Quick Stats 与 ANALYZE 的互补关系对于尚未执行过ANALYZE的分区Hive 连接器可以通过读取文件/表元数据例如 Parquet footer推断出行数、null 数和 min/max 等快速统计Quick Stats在查询规划阶段作为临时统计来源。其行为由以下属性控制详见 Hive 连接器文档属性名说明默认值hive.quick-stats.enabled是否启用 quick stats 收集也可通过会话属性quick_stats_enabled动态开关falsehive.quick-stats.max-concurrent-callsquick stats 会并发构建此参数控制最大并发调用数见连接器配置使用建议与注意事项分析时机在批量写入、数据导入或 ETL 完成后执行ANALYZE确保优化器基于最新统计信息生成执行计划对于不断变化的分区可针对性地分析近期写入的分区而不是反复全表分析。分区表的成本控制Hive 大分区表上执行不带partitions的ANALYZE会扫描全部分区耗时与资源开销较大应优先使用WITH (partitions ...)精准定位。连接器支持范围目前只有 Hive 与 Iceberg 连接器支持ANALYZE在部署多连接器集群时先通过SELECT * FROM system.metadata.analyze_properties确认目标连接器注册了哪些属性。统计信息驱动优化准确的统计信息直接影响 Join 顺序选择、聚合与扫描阶段的代价估算。若查询计划出现明显退化可先检查相关表是否缺少统计信息例如 Hive 表存在缺失统计信息的分区时可结合 Quick Stats 属性临时补充。类型限制列统计仅覆盖基本类型复杂类型列不会产生列级统计规划阶段对这类列的估算依赖表级信息或连接器默认值。通过以上语法、示例与源码解析读者可以在 Presto 中熟练运用ANALYZE维护表与列统计信息为查询优化器提供准确的代价估算依据从而提升大规模数据查询的执行效率。【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址: https://gitcode.com/gh_mirrors/pre/presto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Java接入支付宝扫码支付:从沙箱配置到异步回调验签全攻略 简介:这套Java集成支付宝扫码支付项目,面向需要为电商、O2O等业务接入扫码支付的Java开发者,完整演示了从支付宝SDK调用、订单发起、二维码生成到异步回调处理的全流程,并附有可直接运行的前后端代码样例。资源包共124个文件&… · 2026/9/24 19:18:59
Java+SSM+Flask混合架构博客系统开发全攻略 博客系统在Java课程设计和毕业设计里出现的频率,高到几乎可以称之为“国民级项目”。这段时间我接触了不少基于JavaSSMFlask的博客系统源码包,包含LW(论文文档)、调试文档和讲解视频那种,功能看起来都挺全,… · 2026/9/24 19:18:52
降AI率工具实测:从65%到12%的修改流程与避坑指南 你有没有遇到过这种情况:论文写到凌晨三点,终于用AI工具把初稿赶出来了,结果导师看了一眼就皱眉:“这语言风格一读就是AI写的,重复率倒是过了,AIGC检测估计又得飘红。”于是你开始搜各种“降AI率”工具。说… · 2026/9/24 19:18:40
数据安全方案从设计到落地:资产梳理、加密认证与系统运维实战 先讲个真实场景。有位做制造业的客户找我帮忙做安全方案,他们公司防火墙、WAF、堡垒机、数据库审计都买了,加起来投入大几百万。我接手后第一件事不是看设备,而是问了三句话:你们哪些系统里存了客户的个人信息?这些数据… · 2026/9/24 20:58:56
C++飞机大战源码剖析:从v1.0到v16.0的工程演进与避坑指南 简介:基于C实现的飞机大战小游戏设计源码包,zip压缩包共71个文件,大小约64.23MB。包内包含16个C源文件、24张PNG素材图片、2个可直接运行的exe,以及完整的Visual Studio工程配置(sln/vcxproj)和调试日志、数… · 2026/9/24 20:58:56
虚拟机原理与实战:从安装配置到性能优化、故障排查 1. 虚拟机到底是什么:先别急着装,把原理搞明白很多人刚接触虚拟机时,第一反应是去搜"vmware虚拟机安装教程",然后照着一步步点,装完了也不知道自己在干什么。我见过不少朋友装完虚拟机、跑起Linux系统之后&a… · 2026/9/24 20:58:44
Spring Boot课程建设网站开发全流程实战解析 很多同学在选课设题目的时候,都会碰到一个尴尬局面:题目看起来不难,但真到动手才发现,从前端页面到后端接口、从数据库表到部署上线,每一环都能卡住人。尤其是“软件工程课程建设网站”这类题目,听起来就是… · 2026/9/24 20:58:44
.NET工作流引擎源码实战:从流程定义到部署运维要点 作为常年混迹在开发一线的老程序员,我这两年最深的感受是:开发平台早就不是单纯写业务代码的地方了。不管你是做企业级ERP、OA,还是搞系统集成、低代码底座,最终都会撞上一个绕不开的核心模块——工作流。而提到工作流,… · 2026/9/24 20:58:44
基于Vue+SpringBoot的离线语音识别系统:MP3批量转文字实践 你是不是也有这种需求:手里一堆录音、会议纪要、采访音频,都是MP3格式,想转成文字,但又不想把文件传到第三方云服务上——保密要求高、网络不稳定、或者纯粹不想为每次转写付费。我最早做这块是因为内部培训音频需要归档ÿ… · 2026/9/24 20:58:44
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44