网站首页 > 技术文章 正文
HQL提供了两个查看查询性能的工具:explain与analyze,除此之外Hive的日志也提供了非常详细的信息,方便查看执行性能和报错排查。
工具一:explain
explain语句是查看执行计划经常使用的一个工具,可以使用该语句分析查询执行计划,具体使用语法如下:
EXPLAIN [FORMATTED|EXTENDED|DEPENDENCY|AUTHORIZATION] hql_query
其中,关键字的含义:
- FORMATTED:对执行计划进行格式化,返回JSON格式的执行计划
- EXTENDED:提供一些额外的信息,比如文件的路径信息
- DEPENDENCY:以JSON格式返回查询所依赖的表和分区的列表,从Hive0.10开始使用,如下图
- AUTHORIZATION:列出需要被授权的条目,包括输入与输出,从Hive0.14开始使用,如下图
一个典型的查询执行计划主要包括三部分,具体如下:
- Abstract Syntax Tree (AST):抽象语法树,Hive使用一个称之为antlr的解析生成器,可以自动地将HQL生成为抽象语法树
- Stage Dependencies:会列出运行查询所有的依赖以及stage的数量
- Stage Plans:包含了非常重要的信息,比如运行作业时的operator 和sort orders
比如:
EXPLAIN
SELECT cc_call_center_id,
count(*)
FROM tpcds_bin_partitioned_parquet_30.call_center
WHERE cc_call_center_sk = 2
GROUP BY cc_call_center_id
LIMIT 2;
查看执行计划:
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-0 depends on stages: Stage-1
STAGE PLANS:
Stage: Stage-1
Map Reduce
Map Operator Tree:
TableScan
alias: call_center
filterExpr: (cc_call_center_sk = 2) (type: boolean)
Statistics: Num rows: 6 Data size: 186 Basic stats: COMPLETE Column stats: NONE
Filter Operator
predicate: (cc_call_center_sk = 2) (type: boolean)
Statistics: Num rows: 3 Data size: 93 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: cc_call_center_id (type: string)
outputColumnNames: cc_call_center_id
Statistics: Num rows: 3 Data size: 93 Basic stats: COMPLETE Column stats: NONE
Group By Operator
aggregations: count()
keys: cc_call_center_id (type: string)
mode: hash
outputColumnNames: _col0, _col1
Statistics: Num rows: 3 Data size: 93 Basic stats: COMPLETE Column stats: NONE
Reduce Output Operator
key expressions: _col0 (type: string)
sort order: +
Map-reduce partition columns: _col0 (type: string)
Statistics: Num rows: 3 Data size: 93 Basic stats: COMPLETE Column stats: NONE
TopN Hash Memory Usage: 0.1
value expressions: _col1 (type: bigint)
Reduce Operator Tree:
Group By Operator
aggregations: count(VALUE._col0)
keys: KEY._col0 (type: string)
mode: mergepartial
outputColumnNames: _col0, _col1
Statistics: Num rows: 1 Data size: 31 Basic stats: COMPLETE Column stats: NONE
Limit
Number of rows: 2
Statistics: Num rows: 1 Data size: 31 Basic stats: COMPLETE Column stats: NONE
File Output Operator
compressed: false
Statistics: Num rows: 1 Data size: 31 Basic stats: COMPLETE Column stats: NONE
table:
input format: org.apache.hadoop.mapred.SequenceFileInputFormat
output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
Stage: Stage-0
Fetch Operator
limit: 2
Processor Tree:
ListSink
其中包含了STAGE DEPENDENCIES、STAGE PLANS、Map Operator Tree和Reduce Operator Tree就是抽象语法树部分,STAGE DEPENDENCIES包含两个stage,其中Stage-1是根stage,Stage-0依赖与Stage-1,STAGE PLANS中Stage-1用于计算,Stage-0只是用于拉取数据。
工具二:analyze
analyze语句可以收集一些详细的统计信息,比如表的行数、文件数、数据的大小等信息。这些统计信息作为元数据存储在hive的元数据库中。Hive支持表、分区和列级别的统计(与Impala类似),这些信息作为Hive基于成本优化策略(Cost-Based Optimizer (CBO))的输入,该优化器的主要作用是选择耗费最小系统资源的查询计划。其实,在Hive3.2.0版本中,可以自动收集这些统计信息,当然也可以通过analyze语句进行手动统计表、分区或者字段的信息。具体的使用方式如下:
1.收集表的统计信息(非分区表),当指定NOSCAN关键字时,会忽略扫描文件内容,仅仅统计文件的数量与大小,速度会比较快
ANALYZE TABLE 表名 COMPUTE STATISTICS;
ANALYZE TABLE 表名 COMPUTE STATISTICS NOSCAN;
2.收集分区表的统计信息
ANALYZE TABLE 表名 PARTITION(分区1,分区2) COMPUTE STATISTICS;
收集指定分区信息
ANALYZE TABLE 表名 PARTITION(分区1='xxx',分区2='yyy') COMPUTE STATISTICS;
3.收集表的某个字段的统计信息
ANALYZE TABLE 表名 COMPUTE STATISTICS FOR COLUMNS 字段名 ;
可以通过设置:SET hive.stats.autogather=true,进行自动收集统计信息,对于INSERT OVERWRITE/INTO操作的表或者分区,可以自动收集统计信息。值得注意的是,LOAD操作不能够自动收集统计信息
一旦这些统计信息收集完毕,可以通过DESCRIBE EXTENDED/FORMATTED语句查询统计信息,具体使用如下:
1、查看一个分区的信息
DESCRIBE FORMATTED 表名 PARTITION(分区1='xxx',分区2='yyy');
2、查看一张表的信息
DESCRIBE FORMATTED 表名;
3、查看表中的字段信息
DESCRIBE FORMATTED 表名.列名;
猜你喜欢
- 2024-10-12 大数据分析工具——hive入门 hive数据分析的一般流程是什么
- 2024-10-12 019Hive基本使用03 019Hive基本使用03 #liaoit
- 2024-10-12 手把手教你搭建Hive环境 搭建hive集群
- 2024-10-12 0474-如何使用SQL Developer访问Hive
- 2024-10-12 大数据之-HIVE入门(十四) php hive大数据处理
- 2024-10-12 Hive 迁移参考方案及测试(下) hive表迁移
- 2024-10-12 0263-Hive2.2.0如何与CDH集群中的Spark1.6集成
- 2024-10-12 如何在HUE上通过oozie调用Hive SQL工作流
- 2024-10-12 百度二面:你做过哪些Hive调优啊? hive调优与参数设置
- 2024-10-12 HiveSQL:如何从给定的日期中减去指定数量的天数?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)