大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载本文是 Presto 分布式 SQL 查询引擎中SHOW STATS命令的权威技术指南详细讲解该命令的三种语法形式、返回的八类统计列及其含义并结合仓库源码揭示其底层实现如何从Metadata.getTableStatistics获取统计、如何将字符串区间与数值区间格式化为low_value/high_value以及子查询形式下的语法限制。读完本文你将能够熟练使用SHOW STATS评估表数据分布、检查统计信息完整性并为成本优化器CBO的统计质量做初步诊断。语法SynopsisSHOW STATS命令支持三种形式语法定义位于 SqlBase.g4SHOW STATS FOR table SHOW STATS FOR ( SELECT * FROM table [ WHERE condition ] ) SHOW STATS FOR ( SELECT col1, col2,... colN FROM table [ WHERE condition ] )SHOW STATS FOR table显示指定表的统计信息包括行数、空值数量、最小值与最大值、不同值数量NDV以及表中每一列的平均长度。SHOW STATS FOR ( query )显示某个查询结果集的统计信息。它提供与SHOW STATS FOR table相同的信息但作用于查询的结果集而非单个表。从语法层面看第一条形式对应SHOW STATS FOR qualifiedName表名第二、三条形式对应SHOW STATS FOR ( querySpecification )带括号的子查询子查询在 AST 中表现为TableSubquery。返回的统计信息列SHOW STATS的输出包含一行列的统计行外加一行表的汇总行summary row。汇总行不对应任何具体列因此其column_name值为NULL。数据源上未填充或不可用的任何统计信息都会以NULL返回数据源上收集到的除下表列出的统计之外的其他统计信息不会被包含在SHOW STATS的输出中。ColumnDescriptionNotescolumn_name列的名称在表汇总行中为NULL。data_size列中所有值的总大小字节在表汇总行中为NULL。仅对变宽字符串数据类型的列可用。distinct_values_count列中不同值的估计数量在表汇总行中为NULL。nulls_fractions列中为NULL的值所占比例在表汇总行中为NULL。row_count表中行的估计数量在列统计行中为NULL。low_value此列中发现的最小值在表汇总行中为NULL。仅对 DATE、整数、浮点数和定点精度fixed-precision数据类型可用。high_value此列中发现的最大值在表汇总行中为NULL。仅对 DATE、整数、浮点数和定点精度fixed-precision数据类型可用。histogram此列的直方图以人类可读的格式显示底层直方图的摘要。在表汇总行中为NULL。这八列在实现中的字面定义位于 ShowStatsRewrite.java 的buildColumnsNames()方法中依次为column_name、data_size、distinct_values_count、nulls_fraction、row_count、low_value、high_value、histogram。执行原理从 SHOW STATS 到重写为普通查询SHOW STATS并不是一个独立的执行算子而是在语句分析阶段被重写rewrite为一个普通查询。其入口是 StatementRewrite.java 中注册的ShowStatsRewrite该类实现了StatementRewrite.Rewrite接口。核心流程见 ShowStatsRewrite.java 的visitShowStats与rewriteShowStats区分两种关系类型如果SHOW STATS后面是Table表名形式直接进入重写如果是TableSubquery子查询形式则先对其中的QuerySpecification生成逻辑计划并做合法性校验。获取表句柄与列句柄通过metadata.getColumnHandles获取表的所有列句柄如果子查询中指定了列子集则只保留这些列。调用metadata.getTableStatistics使用表的非隐藏列列表和约束Constraint向元数据层请求TableStatistics。对于SHOW STATS FOR table形式约束恒为Constraint.alwaysTrue()对于带WHERE的子查询形式约束来自逻辑计划中TableScanNode的getCurrentConstraint()这保证了条件可以被下推到数据源。组装结果行buildStatisticsRows遍历表的每一列存在列统计时调用createColumnStatsRow生成该列的统计行否则调用createEmptyColumnStatsRow生成全NULL行最后通过createTableStatsRow追加一条汇总行column_name为NULL仅row_count有值。生成最终查询所有统计行被构造为VALUES行包装成名为table_stats_for_表名的派生表最终输出 8 列结果。值得注意的是统计值均通过createEstimateRepresentationShowStatsRewrite.java转换为DOUBLE字面量当Estimate为未知时输出NULL否则输出其数值。low_value / high_value 的类型化输出low_value与high_value的输出取决于统计类型ShowStatsRewrite.java若ColumnStatistics携带StringRange字符串区间则直接输出区间的最小/最大值适用于 VARCHAR 等变宽字符串类型此时若底层类型不是变宽类型会抛出checkState断言失败。否则使用DoubleRange数值区间并由toStringLiteral按列类型格式化ShowStatsRewrite.javaBIGINT/INTEGER/SMALLINT/TINYINT四舍五入后输出整数文本DOUBLE与DECIMAL直接输出浮点文本REAL转为FLOAT输出DATE按LocalDate.ofEpochDay输出日期字符串TIMESTAMP、TIME、TIMESTAMP_WITH_TIME_ZONE分别转换为对应时间类型输出其他类型抛出IllegalArgumentException。这也解释了文档中low_value/high_value仅对 DATE、整数、浮点数和定点精度数据类型可用的限制——只有这些类型才能被上述逻辑安全地格式化为可读文本。空值比例列名说明文档中该列名为nulls_fractions而在实现buildColumnsNames()中列名为nulls_fraction单数二者指向同一统计ColumnStatistics.getNullsFraction()所表示的列内NULL值占比。查询时以客户端实际收到的列名为准。子查询形式SHOW STATS FOR ( SELECT ... )SHOW STATS FOR ( query )允许对带条件的查询结果集查看统计其合法性与限制由validateShowStatsSubqueryShowStatsRewrite.java严格校验以下子句或特性均不被支持否则抛出NOT_SUPPORTED语义错误FROM中必须恰好有一个表且必须是普通表不能是连接或子查询WHERE中只能包含可被下推的谓词即谓词必须能够下推到表扫描节点计划树中不允许残留FilterNode不支持WITH子句、ORDER BY、LIMIT、HAVING、GROUP BY、DISTINCTSELECT 列表中的列不允许使用别名也不允许出现表达式如函数调用、算术表达式只能是裸列名标识符支持SELECT *形式此时统计所有列。这些限制的根本原因在于SHOW STATS子查询的语义是基于表统计与可下推过滤条件估算结果集的统计而非真正执行查询任何需要真实计算如聚合、排序、去重或无法下推的过滤都无法仅凭存储层统计来回答。典型用法示例查看表整体及所有列的统计SHOW STATS FOR nation;查看带过滤条件的统计谓词可下推SHOW STATS FOR ( SELECT * FROM nation WHERE regionkey 1 );仅查看指定列的统计SHOW STATS FOR ( SELECT nationkey, name FROM nation );仅查看指定列的统计并带过滤条件SHOW STATS FOR ( SELECT col1, col2, col3 FROM table WHERE col1 42 );真实输出示例TPC-H nation 表仓库测试 TestLocalQueries.java 中的testShowColumnStats给出了SHOW STATS FOR nation在 TPC-Hscale factor 1连接器上的真实期望输出列顺序依次为column_name, data_size, distinct_values_count, nulls_fraction, row_count, low_value, high_value, histogramcolumn_name | data_size | distinct_values_count | nulls_fraction | row_count | low_value | high_value | histogram ----------------------------------------------------------------------------------------------------------- nationkey | NULL | 25.0 | 0.0 | NULL | 0 | 24 | NULL name | 177.0 | 25.0 | 0.0 | NULL | NULL | NULL | NULL regionkey | NULL | 5.0 | 0.0 | NULL | 0 | 4 | NULL comment | 1857.0 | 25.0 | 0.0 | NULL | NULL | NULL | NULL NULL | NULL | NULL | NULL | 25.0 | NULL | NULL | NULL该示例直观印证了文档中的关键语义nationkey、regionkey为整数列data_size为NULLdata_size仅对变宽字符串列可用而name、comment为 VARCHAR 列data_size有实际字节数整数列输出low_value/high_value如 0/24、0/4字符串列这两列为NULL字符串区间在此场景未收集/未展示最后一行的汇总行column_name为NULL且只有row_count有值25.0其余列均为NULL。使用场景与注意事项SHOW STATS是数据工程师与查询调优人员诊断统计健康度的常用命令典型场景包括验证 ANALYZE 是否生效执行ANALYZE table后用SHOW STATS FOR table确认各列distinct_values_count、nulls_fraction、low_value、high_value是否已填充从而判断连接器是否上报了可用的统计信息。辅助成本优化器CBO调优Presto 的优化器依赖表统计进行 join 重排、算子代价估算若SHOW STATS输出大量NULL可推断统计缺失可能影响执行计划质量进而决定是否需要运行ANALYZE。快速了解表的数据分布通过low_value/high_value和row_count快速评估表的行数规模与列的取值区间无需执行全表扫描。注意事项所有统计均为估计值测试示例中的 25.0、5.0 等即估计的 NDV 与行数不是精确计数data_size是列内所有值的总字节数仅对变宽字符串列有意义histogram列当前以人类可读文本呈现底层直方图摘要列统计行中无直方图数据时为NULL不同连接器对统计信息的支持程度不同未提供统计的数据源会输出全NULL的列统计行。总结SHOW STATS是 Presto 中查看表级与查询级列统计信息的标准命令。通过本文你可以看到它由 ShowStatsRewrite 在语句分析阶段重写为普通查询核心数据来自Metadata.getTableStatistics输出严格限定为 8 类统计列子查询形式要求单表、可下推谓词且不支持聚合/排序/去重等特性真实输出可在 TestLocalQueries 中查看完整验证。理解这些实现细节有助于你正确解读统计结果并定位统计缺失问题。赞分享大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载相关推荐15分钟吃透 Notepad--免费跨平台文本编辑器批量查找替换与文件对比完整指南15分钟吃透 Notepad 免费跨平台文本编辑器批量查找替换与文件对比完整指南 Notepad 是一款免费的跨平台文本编辑器Windows、Linux、m桌面应用TDengine SHOW 命令全指南集群与系统信息查询速查手册TDengine SHOW 命令全指南集群与系统信息查询速查手册 导读 TDengine 内置了一套完整的 SHOW 语句体系用于快速获取数据库、节点、表、数据库时序数据库物联网大数据实时分析云原生Presto SHOW GRANTS 命令完全指南查询当前用户表级权限授予Presto SHOW GRANTS 命令完全指南查询当前用户表级权限授予 导读 SHOW GRANTS 是 Presto 分布式 SQL 查询引擎中用于查看大数据数据库后端上一篇华硕笔记本性能控制终极指南GHelper轻量级替代方案下一篇大麦抢票自动化:告别手速比拼,3 步搭好双端抢票方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
AI搜索时代品牌隐形掉队:南京工业企业必读的GEO服务商选型指南 当下企业线上营销正面临一个普遍且棘手的悖论:传统SEO排名稳居首页,AI搜索却彻底“查无此牌”。
南京一位工业除尘设备企业的市场负责人老张,近期遇到典型困境:在DeepSeek搜索「南京做工业除尘设备的厂家哪家靠谱」,AI… · 2026/9/24 16:26:06
探秘 ApiManager:强大的API管理与测试工具 探秘 ApiManager:强大的API管理与测试工具 【免费下载链接】ApiManager 接口文档管理工具 项目地址: https://gitcode.com/gh_mirrors/api/ApiManager
在软件开发过程中,API(应用程序接口)是不同组件间通信的关键桥梁。有效… · 2026/9/24 16:26:06
第24篇-MCP-Client架构-Host应用如何管理多个Server连接 【MCP 全栈教程】第 24 篇:MCP Client 架构——Host 应用如何管理多个 Server 连接 本系列定位:从协议原理到 Server 开发、Client 开发、再到各大平台实战集成,系统化掌握 MCP(Model Context Protocol)全栈技术体系。… · 2026/9/24 17:01:59
第21篇-MCP-Server测试-MCP-Inspector与自动化测试 【MCP 全栈教程】第 21 篇:MCP Server 测试——MCP Inspector 与自动化测试 本系列定位:从协议原理到 Server 开发、Client 开发、再到各大平台实战集成,系统化掌握 MCP(Model Context Protocol)全栈技术体系。 本篇你… · 2026/9/24 17:01:59
OneNote 笔记如何备份才不丢数据:3 种方案完整保姆级攻略 OneNote 笔记如何备份才不丢数据:3 种方案完整保姆级攻略 【免费下载链接】cs-408 计算机考研专业课程408相关的复习经验,资源和OneNote笔记 项目地址: https://gitcode.com/GitHub_Trending/cs/cs-408
用 OneNote 攒了几个月笔记,某次… · 2026/9/24 17:01:59
使用 AWS SDK for C++ 编写 Hello SNS:通过 ListTopics 入门 Amazon SNS 示例工程教程后端 【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below. 项目地… · 2026/9/24 17:01:53
Visual Explainer Quick 模式深度指南:用紧凑 JSON Spec 一键渲染自包含 HTML 可视化页面 【免费下载链接】visual-explainer Agent skill that generates rich HTML pages or slide decks for diagrams, diff reviews, plan audits, data tables, and project recaps 项目地址: https://gitcode.com/gh_mirrors/vi/visual-explainer 点击查看 免费下载 Q… · 2026/9/24 17:01:53
基于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