Hive analyze命令解析

Hive知识 Hive Hive架构 执行流程 Hive的工作原理 阅读详情

关于Hive analyze命令

1. 命令用法:

表与分区的状态信息统计

ANALYZE TABLE tablename

[PARTITION(partcol1[=val1], partcol2[=val2], ...)]

COMPUTE STATISTICS [noscan];

列信息统计

ANALYZE TABLE tablename

[PARTITION(partcol1[=val1], partcol2[=val2], ...)]

COMPUTE STATISTICS FOR COLUMNS ( columns name1 , columns name2…) [noscan];

当表存在分区时,需要在命令中指定,否则会报错;

不支持使用列与表的别名

2. 某个有分区表的analyze命令执行结果:

Partition default.test{dt=a} stats: [num_files: 1, num_rows: 0, total_size: 41, raw_data_size: 0]

Table default.test stats: [num_partitions: 1, num_files: 1, num_rows: 0, total_size: 41, raw_data_size: 0]

3. 源码分析执行过程

命令的执行步骤:

当完成命令转化完ast树时 进入ColumnStatsSemanticAnalyzer类。

1) 命令类型的检查( 比如 no scan , partial scan 等)

2) 查询重写,例如执行以下查询:

analyze table pokes compute statistics for columns foo,bar;

以上查询会根据ast树,获取 表名, 列名,列的数量和类型。分区名字,数量等信息。生成一个新的查询:

select compute_stats(foo , 16 ) , compute_stats(bar , 16 ) from pokes

3) 生成新的ast树

4) 回到Driver 完成语法分析,生成查询计划。 在做语法分析时使用了新的ast树和原有的ctx

5) 生成一个列统计的任务替代fetch task,并写统计信息到metastore中。列统计任务的生成是通过MapReduceCompiler 类中的genColumsStatsTask方法来完成的,每个task中都有对应的work 。核心代码如下:


对于2中的查询,所生成的rootTasks 如下:


上图中的MapRedTask会执行一次聚合操作的RS.

6) 生成plan 。 对于2中的查询,将会生成如下的plan:

{"queryId":"zhangyun_20140403102424_07e3332f-12b9-4c54-b30f-f5fc912bb032","queryType":null,"queryAttributes":{"queryString":"analyze table pokes compute statistics for columns foo,bar"},"queryCounters":"null","stageGraph":{"nodeType":"STAGE","roots":"null","adjacencyList":"]"},"stageList":[{"stageId":"Stage-0","stageType":"MAPRED","stageAttributes":"null","stageCounters":"}","taskList":[{"taskId":"Stage-0_MAP","taskType":"MAP","taskAttributes":"null","taskCounters":"null","operatorGraph":{"nodeType":"OPERATOR","roots":"null","adjacencyList":[{"node":"TS_0","children":["SEL_1"],"adjacencyType":"CONJUNCTIVE"},{"node":"SEL_1","children":["GBY_2"],"adjacencyType":"CONJUNCTIVE"},{"node":"GBY_2","children":["RS_3"],"adjacencyType":"CONJUNCTIVE"}]},"operatorList":[{"operatorId":"TS_0","operatorType":"TABLESCAN","operatorAttributes":"null","operatorCounters":"null","done":"false","started":"false"},{"operatorId":"SEL_1","operatorType":"SELECT","operatorAttributes":"null","operatorCounters":"null","done":"false","started":"false"},{"operatorId":"GBY_2","operatorType":"GROUPBY","operatorAttributes":"null","operatorCounters":"null","done":"false","started":"false"},{"operatorId":"RS_3","operatorType":"REDUCESINK","operatorAttributes":"null","operatorCounters":"null","done":"false","started":"false"}],"done":"false","started":"false"},{"taskId":"Stage-0_REDUCE","taskType":"REDUCE","taskAttributes":"null","taskCounters":"null","operatorGraph":{"nodeType":"OPERATOR","roots":"null","adjacencyList":[{"node":"GBY_4","children":["SEL_5"],"adjacencyType":"CONJUNCTIVE"},{"node":"SEL_5","children":["FS_6"],"adjacencyType":"CONJUNCTIVE"}]},"operatorList":[{"operatorId":"GBY_4","operatorType":"GROUPBY","operatorAttributes":"null","operatorCounters":"null","done":"false","started":"false"},{"operatorId":"SEL_5","operatorType":"SELECT","operatorAttributes":"null","operatorCounters":"null","done":"false","started":"false"},{"operatorId":"FS_6","operatorType":"FILESINK","operatorAttributes":"null","operatorCounters":"null","done":"false","started":"false"}],"done":"false","started":"false"}],"done":"false","started":"false"},{"stageId":"Stage-1","stageType":"COLUMNSTATS","stageAttributes":"null","stageCounters":"}","taskList":[{"taskId":"Stage-1_OTHER","taskType":"OTHER","taskAttributes":"null","taskCounters":"null","operatorGraph":"null","operatorList":"]","done":"false","started":"false"}],"done":"false","started":"false"}],"done":"false","started":"false"}

7) 列统计信息的输出schema

Schema(

fieldSchemas:[FieldSchema(name:_c0,type:struct<columntype:string,min:bigint,max:bigint,countnulls:bigint,numdistinctvalues:bigint>,comment:null),

FieldSchema(name:_c1,type:struct<columntype:string,maxlength:bigint,avglength:double,countnulls:bigint,numdistinctvalues:bigint>, comment:null)],

properties:null)

以下是一些总结的资料:

1:列统计

针对表中的列数,特定列数据的直方图,有多种方式可以实现。作为查询优化的一种方法,统计输入给优化器的代价函数,然后优化器比较不同的计划,并从中获取较优的计划。

统计有时能够满足用户的查询,从而让用户,快速获取结果(需执行存储的统计信息,而不需要触发长时间的执行计划)

注: 以上来自wiki 但目前还没有实现统计输入给优化器的这种优化。

2:范围

Hive 现在支持的表和分区级别的统计, 不支持列中数据的统计。由于这些表和分区的统计不足以完成1中所述通过cost model 计算获取最优的计算。

统计首先要支持表和分区,这些统计会存在MetaStore中

比如分区:

• Number of Rows

• Number of files

• Size in Bytes.

针对表,还包括表中的分区的格式Number of Partitions

针对分区级别的统计,可以实现列级别前N个值Top K Statistics


3:实现

针对新创建的表,如果一个JOB创建一个表通过MapReduce Job,每个Mapper在复制列时,对应收集统计信息在Job结束时,也被汇总存在在MetaStore中

针对已经存在的表,在表扫描操作时,也会搜集相应的统计信息,并且存储在结果中

当然,需要一个数据库存储临时的统计数据:MySQL或者HBase

有两个接口

IStatsPublisher

IStatsAggregateor

4. 具体接口内容:

public interface IStatsPublisher{
public boolean init(Configuration hconf);

public boolean publishStat(String rowID,String key,String value);

public boolean terminate();
}

public interface IStatsAggregator{
public boolean init(Configuration hconf);

public String aggregateStats(String rowID,String key);

public boolean terminate();
}

场景:

1:新创建的表

针对通过INSERT OVERWRITE生成的表和分区,统计会自动计算生成,可以通过配置控制是否生效

set hive.stats.autogather=false;

将不会生成统计信息

用户可以自定义统计的实现,来指定临时统计信息的存储

hive.stats.dbclass=hbase

将通过hbase来存储

缺省为{{jdbc:derby}}

针对通过JDBC来实现临时存储统计(Derby或者mysql),用户可以指定对应的连接字符变量

set hive.stats.dbclass=jdbc:derby;

set hive.stats.dbconnectionstring="jdbc:derby:;databaseName=TempStatsStore;create=true";

set hive.stats.jdbcdriver="org.apache.derby.jdbc.EmbeddedDriver";

针对查询可能会无法准确的收集统计信息

可通过hive.stats.reliable可以设置如果不能够可靠的收集统计信息,则查询失败,缺省是false

2:已存在的表

对应已存在的表,需要通过

ANALYZE来搜集统计信息并写入MetaStore

ANALYZE TABLE tablename [PARTITION(partcol1[=val1], partcol2[=val2], ...)] COMPUTE STATISTICS [noscan];

如果用户执行该命令,但是不指定任何分区时,会搜集所有表和分区,如果指定分区则只搜集该分区的统计信息

如果统计是跨分区的,则分区列仍然需要指定

如果noscan参数指定,该命令就不扫描文件,从而更快,但是此时的统计就只限于如下项:

• Number of files

• Physical size in bytes


实例:

假定有一个表具有4个分区

• Partition1: (ds='2013-03-08', hr=11)

• Partition2: (ds='2013-03-08', hr=12)

• Partition3: (ds='2013-03-09', hr=11)

• Partition4: (ds='2013-03-09', hr=12)


执行命令如下

ANALYZE TABLE Table1 PARTITION(ds='2013-03-09', hr=11) COMPUTE STATISTICS;

将只搜集分区3

如果执行

ANALYZE TABLE Table1 PARTITION(ds='2013-03-09', hr) COMPUTE STATISTICS;

则同时搜集分区间3和4


如果执行

ANALYZE TABLE Table1 PARTITION(ds, hr) COMPUTE STATISTICS;

则搜集所有分区


针对分分区表,通过

ANALYZE TABLE Table1 COMPUTE STATISTICS;


查看分区的统计信息:

DESCRIBE EXTENDED TABLE1;

输入类似:

... , parameters:{numPartitions=4, numFiles=16, numRows=2000, totalSize=16384, ...}, ....

实例:

DESCRIBE EXTENDED TABLE1 PARTITION(ds='2013-03-09', hr=11);


性能测试 hive Use ANALYZE table columns 测试记录数: 346804534  数据大小:20GB select eventchannel from event8 where pdate = '2015-09-01' and lower(eventchannel) rlike 'window' and eventsourcemachine rlike 'changhong' group by eventchannel having 阅读详情

相关推荐

数仓工具—Hive进阶之Statistics与Analyze Table命令(20)

主要介绍了统计信息(表/分区)的用途,以及统计信息如何收集,当然最主要的还是给hive 优化器使用。

4万+

hive 统计分析相关ANALYZE

1.前言 本文大部分是对于官方问的那个的理解,小部分是自己的测试感受 官方文档地址 https://cwiki.apache.org/confluence/display/Hive/StatsDev ANALYZE 这个命令接触的不多,今天专门研究学习下 2、目的 见名知意,它的目的就是为了统计和分析的作用,它将统计的信息存储到metastore中,后续再来查询的时候就不需要在执行查询计算,而...

zeng6325998的博客 1360

【硬刚Hive】Hive基础(11):元数据(二)分析Hive表和分区的统计信息(Statistics)

欢迎关注博客主页:微信搜:import_bigdata,大数据领域硬核原创作者_王知无(import_bigdata)_优快云博客 欢迎点赞、收藏、留言 ,欢迎留言交流!本文由【王知无】原创,首发于 优快云博客!本文首发优快云论坛,未经过官方和本人允许,严禁转载! 本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hive部分补充。 http://lxw1234.com/archives/2015/07/413.htm 类似于Oracle的分析表,Hive中.

微信搜:import_bigdata,大数据领域硬核原创作者 816

Hive SQL查询效率提升之Analyze方案的实施

0.简介 Analyze,分析表(也称为计算统计信息)是一种内置的Hive操作,可以执行该操作来收集表上的元数据信息。这可以极大的改善表上的查询时间,因为它收集构成表中数据的行计数,文件计数和文件大小(字节),并在执行之前将其提供给查询计划程序。 1.如何分析表? 基础分析语句 ANALYZE TABLE my_database_name.my_table_name COMPUTE STAT...

谦蓦的博客 3420

Hive调优利器之explain详解

0 引言 不懂hive中的explain,说明hive还没入门,学会explain,能够给我们工作中使用hive带来极大的便利! 1 理论 本节将介绍 explain 的用法及参数介绍 HIVE提供了EXPLAIN命令来展示一个查询的执行计划,这个执行计划对于我们了解底层原理,hive 调优,排查数据倾斜等很有帮助 使用语法如下: EXPLAIN[EXTENDED|CBO|AST|DEPENDENCY|AUTHORIZATION|LOCKS|VECTORIZATION|ANALYZE]..

石榴姐yyds 6220

常见图像加密性能评价指标(详解加python实现)

前言 本文目的 介绍一些常见的用于图像加密的评价指标并予以代码实现,方便以后做实验时参考查阅。 图像加密领域所有常见的安全分析技术汇总如下图。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7N8tbKNx-1618308894314)(%E5%B8%B8%E8%A7%81%E5%9B%BE%E5%83%8F%E5%8A%A0%E5%AF%86%E6%80%A7%E8%83%BD%E8%AF%84%E4%BB%B7%E6%8C%87%E6%A0%87/1-s2.0-S0165

z2bns的博客 3万+

mysql必须分区查询 否则报错_Hive analyze命令解析

{"queryId":"zhangyun_20140403102424_07e3332f-12b9-4c54-b30f-f5fc912bb032","queryType":null,"queryAttributes":{"queryString":"analyze table pokes compute statistics for columns foo,bar"},"queryCounters...

weixin_26713059的博客 167

手把手教你用YOLOv11-seg-LSCD搞定树脂件瑕疵检测(附数据集与代码)

本文详细介绍了如何使用YOLOv11-seg-LSCD模型进行工业级树脂件瑕疵检测,包括环境配置、数据集构建、模型训练与调优、部署优化等全流程。通过LSCD模块的创新设计,有效提升了气泡、裂纹等微小缺陷的检测精度,适用于各类树脂制品的质量检测场景。

weixin_28677005的博客 418

Hive 查询性能剖析:EXPLAIN 解读、执行计划分析与瓶颈定位

本文深入剖析 Hive 查询性能优化的核心方法,通过详细解读 EXPLAIN 命令生成的执行计划,帮助读者掌握性能瓶颈定位技术。文章从执行计划的基本结构出发,逐步深入到各个阶段的指标分析,并结合实际案例展示如何识别常见的性能问题并实施有效优化。掌握这些技能,可以显著提升大数据环境下 Hive 查询的执行效率。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 660

Unity之OpenXR+XR Interaction Toolkit实现 Gaze眼部追踪

在虚拟现实(VR)和增强现实(AR)应用中,眼动追踪是一项强大而受欢迎的技术。它可以让开发者更好地理解用户的注意力和行为,并创造出更加沉浸和智能的体验。在本文中,我们将探讨如何使用 Unity OpenXR 实现Gaze眼部追踪功能。

TxNet 1751

【深度学习新浪潮】算力上太空:NVIDIA Space-1 Vera Rubin Module 深度技术解析

NVIDIA Space-1 Vera Rubin Module 不只是一款芯片模组,它是天地一体化 AI 的基础设施底座。它用成熟的 GPU 架构 + 航天级加固,把地面 AI 生态直接平移到太空。下一个 AI 创新战场,不在云端,而在轨道。在轨 LLM星上多模态实时处理卫星自主组网与分布式推理太空算力成为云计算的一级节点参考资料NVIDIA 官方博客:NVIDIA 推出太空计算,将 AI 送入太空轨道GTC 2026 黄仁勋主题演讲。

专注:太空算力、AI infra、异构调度、大模型成本工程 1125

Hive 源码解析三:Analyze

解析 hive 如何将sql转换为mr任务并对其优化

小王是个弟弟 3022

AIPex:AI + 自然语言驱动的浏览器自动化扩展

AIPex是一款革命性的Chrome扩展,通过AI技术实现自然语言驱动的浏览器自动化。它支持30多种自动化工具,包括智能标签页管理(分组、切换、批量操作)、页面内容提取(文本、链接、元数据)、交互元素操作(点击、滚动)以及表单智能填写等功能。用户只需用自然语言下达指令,即可快速完成复杂的浏览器操作,大幅提升工作效率。AIPex特别适合需要处理大量重复性网页操作的用户,如数据分析师、产品经理等。

blues_C的博客 1127

Hive性能调优的最佳实践

目录 1.查询性能的实用工具 1.1EXPLAIN语句 1.1.1EXPLAIN语法 1.1.2查询计划 1.1.3例子 1.2 ANALYZE语句 1.2.1 ANALYZE语法 1.2.2例子 1.2.3查看统计信息 1.3日志 2.表设计调优 2.1分区表 2.2分桶表 2.3创建索引 2.3.1创建索引语法 2.3.2删除索引 3.数据格式调优 3.1文...

jmx_bigdata的博客 4115

SAP UI5 本地开发工具 fiori-tools-proxy 中间件详解及使用场景

该中间件基于 http-proxy-middleware 库实现,分为 ui5 资源代理和 backend 代理两大模式,并可与 fiori run 或 ui5 serve 命令无缝集成,通过配置 ui5.path、ui5.url 以及 backend.path、backend.url 等参数,实现与目标系统的灵活对接和安全配置 (就后端系统代理而言,fiori-tools-proxy 内置 @sap-ux/backend-proxy-middleware,可将以指定前缀(如。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 519

AI摄影师:自动构图与修图算法设计

AI摄影师:自动构图与修图算法设计​ ,人工智能,计算机视觉,大模型,AI,AI 摄影师的核心能力体现在两方面:自动构图(通过算法优化画面元素布局)与智能修图(自动调整光影、色彩、细节)。例如,手机摄影中的 “AI 构图建议” 功能可实时框选最佳拍摄区域,修图软件中的 “一键增强” 能在 0.1 秒内完成专业级调色,这些都依赖于计算机视觉与深度学习的深度融合。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 16万+

Hive SQL源码解析

Hive执行SQL的主要流程流程词法、语法解析: Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree语义解析: 遍历AST Tree,抽象出...

mm_ren的博客 742

利用恒源云云端GPU高效训练YOLOv11模型全流程:从环境搭建到模型部署,让你摆脱硬件束缚

记住,云端GPU的核心优势是“弹性算力+一键环境”,只要把握好这一工具特性,再结合YOLOv11的高性能模型架构,你也能在计算机视觉领域快速落地项目。接下来,我们从工具准备到模型部署,一步步带你实现高效训练,真正帮你解决资源与效率的核心痛点。凭借其在目标检测、实例分割任务上的卓越性能,成为众多开发者的首选。据统计,使用云端GPU训练YOLOv11,在处理百万级数据集时,训练效率较本地普通GPU提升。在安防监控中,YOLOv11可实时检测人员、车辆异常行为,某园区采用该方案后,异常事件识别准确率达。

LXY_LOVE36的博客 213

基于hive的dip-data-analyze 重发

应公司要求,特别写了一个博客,提交给公司,这里也再重发下。 基于hiveserver的Dip-Data-Analyze 一、           hive 简介         hive 是一个基于 hadoop 的开源数据仓库工具,用于存储和处理海量结构化数据。    它把海量数据存储于hadoop 文件系统,而不是数据库,但提供了一套类数据库的数据存储和处理机制,并采用

Royce Wang专栏 1402

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

hive metadata管理_Hive学习笔记——metadata

Hive结构体系https://blog.youkuaiyun.com/zhoudaxia/article/details/8855937可以在hive的jdbc接口中使用getMetaData方法来获取hive表的相关元信息statement = connection.createStatement();DatabaseMetaData meta = connection.getMetaData();参考h...

weixin_36325615的博客 1247

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Hive执行计划之一文读懂Hive执行计划

Hive的执行计划描述了一个hiveSQL语句的具体执行步骤,通过执行计划解读可以了解hiveSQL语句被解析器转换为相应程序语言的执行逻辑。通过执行逻辑可以知晓HiveSQL运行流程,进而对流程进行优化,实现更优的数据查询处理。同样,通过执行计划,还可以了解到哪些不一样的SQL逻辑其实是等价的,哪些看似一样的逻辑其实是执行代价完全不一样。如果说Hive优化是一堵技术路上的高墙,那么关于Hive执行计划,就是爬上这堵高墙的一架梯子。不同版本的Hive会采用不同的方式生成的执行计划。

鲁边的博客 1871

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Hive性能优化之计算Job执行优化

目录1 Explain1.1 功能1.2 语法1.3 组成1.5 示例2:分组排序2 MapReduce属性优化2.1 本地模式2.2 JVM重用2.3 并行执行3 Join优化3.1 Hive中的Join方案3.2 Map Join3.3 Reduce Join3.4 Bucket Join4 优化器4.1 关联优化4.2 CBO优化器引擎4.3 Analyze分析优化器5 谓词下推(PPD)5.1 基本思想5.2 基本规则6 数据倾斜6.1 数据倾斜的现象6.2 数据倾斜的原因6.3 group By的

赵广陆 1777

HIVE调优:EXPLAIN的用法及分析

文章目录HIVE中EXPLAIN的用法EXPLAIN语法例子CBO 选项AST 选项DEPENDENCY 选项AUTHORIZATION 选项LOCKS 选项 HIVE中EXPLAIN的用法 EXPLAIN语法 HIVE提供了EXPLAIN命令来展示一个查询的执行计划。语法如下 EXPLAIN [EXTENDED|CBO|AST|DEPENDENCY|AUTHORIZATION|LOCKS|VEC...

imYYCCC的博客 4666

hive的补充

hive的补充 hive的分隔符 hive默认的列与列之间的分隔符是:\001,注意不是tab 通常分隔符: tab , " " | \n \001 ^A (\u0001,注意不是\0001也不是\01) \002 ^B \003 ^C poseexplode: hive的文件存储格式: hive默认的数据文件存储格式为:textfile textfile:普通的文本文件存储,不压缩。占用空间,...

weixin_44273391的博客 383
上一篇: 数学之美番外篇:平凡而又神奇的贝叶斯方法
下一篇: java synchronized详解
pointerIsNULL
博客等级 码龄15年 1粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值