关键字:Hive统计信息、分析Hive表、Hive Statistics
类似于Oracle的分析表,Hive中也提供了分析表和分区的功能,通过自动和手动分析Hive表,将Hive表的一些统计信息存储到元数据中。
表和分区的统计信息主要包括:行数、文件数、原始数据大小、所占存储大小、最后一次操作时间等;
14.1 新表的统计信息
对于一个新创建的表,默认情况下,如果通过INSERT OVERWRITE的方式插入数据,那么Hive会自动将该表或分区的统计信息更新到元数据。
有一个参数来控制是否自动统计,hive.stats.autogather,默认为true.
举例来说:
先创建表lxw1234:
CREATE TABLE lxw1234 ( id STRING, name STRING ) stored AS textfile;
在元数据表TABLE_PARAMS中,会有一条记录,记录了该表上次DDL的时间,
该表中的TBL_ID对应TBLS表中的TBL_ID.
关于Hive元数据结构的详细介绍,可参考前一章:
SELECT * FROM TABLE_PARAMS WHERE tbl_id = 45857
TBL_ID | PARAM_KEY | PARAM_VALUE |
45857 | transient_lastDdlTime | 1436916981 |
接下来通过INSERT OVERWRITE向表lxw1234中插入数据:
INSERT overwrite TABLE lxw1234 SELECT pt,pcid FROM lxw1;
其实在hive-cli中执行HQL之后,会打印出统计信息:
Table default.lxw1234 stats:
[numFiles=1, numRows=11067, totalSize=376278, rawDataSize=365211]
再查看元数据:
SELECT * FROM TABLE_PARAMS WHERE tbl_id = 45857
TBL_ID | PARAM_KEY | PARAM_VALUE | |
45857 | transient_lastDdlTime | 1436917459 | |
45857 | numFiles | 1 | |
45857 | numRows | 11067 | |
45857 | rawDataSize | 365211 | |
45857 | totalSize | 376278 | |
45857 | COLUMN_STATS_ACCURATE | true | |
这里的rawDataSize是指原始数据的大小,totalSize是指占用HDFS存储空间大小。
如果再次使用INSERT OVERWRITE方式覆盖该表数据,那么统计信息将会更新。
14.2 新分区的统计信息
对于INSERT OVERWRITE方式新增的分区,统计信息同新创建的表,只不过在元数据中存放的表不一样。
CREATE TABLE lxw1234 ( id STRING, name STRING ) PARTITIONED BY (day STRING);
创建之后,在分区的元数据中还没有任何该表的信息:
SELECT * FROM `PARTITIONS` WHERE tbl_id = 45858
插入数据到一个新的分区:
INSERT overwrite TABLE lxw1234 PARTITION (day = ‘2015-07-15′)
SELECT pt,pcid
FROM lxw1;
执行打印出的统计信息:
Loading data to table default.lxw1234 partition (day=2015-07-15)
Partition default.lxw1234{day=2015-07-15} stats:
[numFiles=1, numRows=11067, totalSize=376278, rawDataSize=365211]
再查看元数据:
SELECT * FROM `PARTITIONS` WHERE tbl_id = 45858
PART_ID | CREATE_TIME | LAST_ACCESS_TIME | PART_NAME | SD_ID | TBL_ID |
56806 | 1436918167 | 0 | day=2015-07-15 | 98259 | 45858 |
SELECT * FROM PARTITION_PARAMS WHERE PART_ID = 56806
PART_ID | PARAM_KEY | PARAM_VALUE | |
56806 | transient_lastDdlTime | 1436918167 | |
56806 | numFiles | 1 | |
56806 | numRows | 11067 | |
56806 | rawDataSize | 365211 | |
56806 | totalSize | 376278 | |
56806 | COLUMN_STATS_ACCURATE | true | |
与分区统计信息相关的元数据表为
PARTITIONS、PARTITION_PARAMS
14.3 已存在表或分区的统计信息
对于一个已经存在的表、分区或者外部表,则需要通过ANALYZE命令去手动分析表或分区的统计信息。
- 外部表
CREATE EXTERNAL TABLE lxw1234 ( id STRING, name STRING ) stored AS textfile location 'hdfs://namenode/tmp/lxw1234.com/';
创建之后该表的元数据:
SELECT * FROM TABLE_PARAMS WHERE tbl_id = 45859
TBL_ID | PARAM_KEY | PARAM_VALUE | |
45859 | transient_lastDdlTime | 1436918758 | |
45859 | numFiles | 0 | |
45859 | numRows | -1 | |
45859 | rawDataSize | -1 | |
45859 | totalSize | 0 | |
45859 | COLUMN_STATS_ACCURATE | false | |
45859 | EXTERNAL | true | |
使用命令分析表lxw1234的统计信息:
ANALYZE TABLE lxw1234 COMPUTE STATISTICS;
该命令也会启动MapReduce去执行,执行之后打印:
Table default.lxw1234 stats:
[numFiles=0, numRows=11067, totalSize=0, rawDataSize=365211]
查看元数据:
SELECT * FROM TABLE_PARAMS WHERE tbl_id = 45859
TBL_ID | PARAM_KEY | PARAM_VALUE | |
45859 | transient_lastDdlTime | 1436918995 | |
45859 | numFiles | 0 | |
45859 | numRows | 11067 | |
45859 | rawDataSize | 365211 | |
45859 | totalSize | 0 | |
45859 | COLUMN_STATS_ACCURATE | true | |
45859 | EXTERNAL | true | |
对于外部表,并没有统计文件数和总大小,估计是统计了该表默认路径下的文件数和大小了。(外部表在创建的时候,同时也会在默认路径下创建一个空目录,比如:hdfs://namenode/user/hive/warehouse/default.db/lxw1234)
- 分区
如果通过ALTER TABLE ADD PARTITION的方式增加一个分区,道理上其实和外部表没什么区别;
CREATE TABLE lxw1234 ( id STRING, name STRING ) PARTITIONED BY (day STRING); ALTER TABLE lxw1234 ADD PARTITION (day = '2015-07-15') location 'hdfs://namenode/tmp/lxw1234.com/';
查看元数据:
SELECT * FROM PARTITION_PARAMS WHERE PART_ID = 56807
PART_ID | PARAM_KEY | PARAM_VALUE | |
56807 | transient_lastDdlTime | 1436919355 | |
56807 | numFiles | 20 | |
56807 | numRows | -1 | |
56807 | rawDataSize | -1 | |
56807 | totalSize | 376278 | |
56807 | COLUMN_STATS_ACCURATE | false | |
很欣慰,通过这种方式增加分区时候,Hive已经将分区所对应的路径中的文件数和总大小统计到元数据中。
再使用命令分析该分区:
ANALYZE TABLE lxw1234 PARTITION (day = ‘2015-07-15′)
COMPUTE STATISTICS;
Partition default.lxw1234{day=2015-07-15} stats:
[numFiles=20, numRows=11067, totalSize=376278, rawDataSize=365211]
再查看元数据:
SELECT * FROM PARTITION_PARAMS WHERE PART_ID = 56807
PART_ID | PARAM_KEY | PARAM_VALUE |
56807 | transient_lastDdlTime | 1436919604 |
56807 | numFiles | 20 |
56807 | numRows | 11067 |
56807 | rawDataSize | 365211 |
56807 | totalSize | 376278 |
56807 | COLUMN_STATS_ACCURATE | true |
没问题了,已经将行数和原始大小统计进来。
Hive相关文章(持续更新):
—-Hive中的数据库(Database)和表(Table)
hive优化之——控制hive任务中的map数和reduce数
相关推荐
hive案例之-----------------微博数据分析及答案,恰同学少年,风华正茂,挥斥方遒
dbeaver连接hive时需要的驱动包hive-jdbc-uber-2.6.5.0-292.jar
含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-3.1.2-bin.tar.gz 含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-3.1.2-bin.tar.gz 含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-...
apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tarapache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tarapache-hive-2.1.1-bin.tar apache-hive-2.1.1-...
02、hive-exec-2.1.1-cdh6.3.1.jar 03、hive-jdbc-2.1.1-cdh6.3.1.jar 04、hive-jdbc-2.1.1-cdh6.3.1-standalone.jar 05、hive-metastore-2.1.1-cdh6.3.1.jar 06、hive-service-2.1.1-cdh6.3.1.jar 07、libfb303-...
hive案例之----------------------------------用户分析及其答案,恰同学少年,风华正茂,挥斥方遒
hive旅游-hive旅游系统-hive旅游系统源码-hive旅游管理系统-hive旅游管理系统java代码-hive旅游系统设计与实现-基于springboot的hive旅游系统-基于Web的hive旅游系统设计与实现-hive旅游网站-hive旅游网站代码-hive...
hive旅游-hive旅游系统-hive旅游系统源码-hive旅游管理系统-hive旅游管理系统java代码-hive旅游系统设计与实现-基于springboot的hive旅游系统-基于Web的hive旅游系统设计与实现-hive旅游网站-hive旅游网站代码-hive...
hive-jdbc-3.1.2-standalone适用于linux
hive-testbench-hive14.zip 大数据TPCDS自动测试脚本
hive-jdbc-2.3.7-standalone,可用dbeaver连接hive数据库,在工具中进行数据库记录的新增改查
hive-jdbc-2.1.1-cdh6.2.0(ieda等jdbc链接hive2.1.1);cdh6.2.0安装的hive2.1.1
Hive连接的jar包——hive-jdbc-3.1.2-standalone.jar,使用数据库连接软件连接数据仓库时需要使用相应的驱动器驱动,希望对大家有所帮助
hive-jdbc-uber-2.6.5.0-292.jar DbVisualizer (as of version 9.5.5) Below is an example configuration using DbVisualizer: Open the Diver Manager dialog ("Tools" > "Driver Manager...") and hit the ...
赠送Maven依赖信息文件:flink-connector-hive_2.11-1.12.7.pom; 包含翻译后的API文档:flink-connector-hive_2.11-1.12.7-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.flink:flink-connector-hive_...
hive-jdbc-uber-2.6.5.0-292.jar驱动
hive-jdbc-uber-2.6.5.0-292.jar 驱动下载,hive-jdbc-uber-2.6.5.0-292.jar,hive-jdbc-uber-2.6.5.0-292.jar
DBeaver链接hive驱动包下载: hive-jdbc-uber-2.6.5.0-292.jar
hive-jdbc-1.2.1-standalone.jar hive-jdbc驱动jar包,欢迎下载
被编译的hive-hbase-handler-1.2.1.jar,用于在Hive中创建关联HBase表的jar,解决创建Hive关联HBase时报FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop....