`
superlxw1234
  • 浏览: 552286 次
  • 性别: Icon_minigender_1
  • 来自: 西安
博客专栏
Bd1c0a0c-379a-31a8-a3b1-e6401e2f1523
Hive入门
浏览量:44542
社区版块
存档分类
最新评论

[一起学Hive]之十五-分析Hive表和分区的统计信息(Statistics)

    博客分类:
  • hive
阅读更多

关键字: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元数据结构的详细介绍,可参考前一章:

[一起学Hive]之十四-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系列

—-Hive概述,Hive是什么

—-Hive函数大全-完整版

—-Hive中的数据库(Database)和表(Table)

—-Hive的安装配置

—-Hive的视图和分区

—-Hive的动态分区

—-向Hive表中加载数据

—-使用Hive命令行

—-Hive的查询语句SELECT

—-Hive中Join的原理和机制

—-Hive中Join的类型和用法

—-Hive SQL的优化

—-Hive整合HBase,操作HBase表

—-Hive的元数据表结构详解

Hive分析函数系列

Hive索引

hive优化之——控制hive任务中的map数和reduce数

 

2
2
分享到:
评论
1 楼 annmi_cai 2016-03-11  
好好学习,天天向上!

相关推荐

    hive案例之---------微博数据分析及答案.zip

    在这个“hive案例之---------微博数据分析及答案”的项目中,我们将会探索如何利用Hive进行大规模的微博数据挖掘与分析。 首先,项目说明文档.docx可能会详细阐述了该项目的目标、背景、数据来源以及预期的结果。...

    含两个文件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-3.1.2-bin.tar.gz 含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-...

    hive驱动包hive-jdbc-uber-2.6.5.0-292.jar(用户客户端连接使用)

    - **Hadoop配置**:Hive JDBC驱动需要知道Hadoop的相关配置,如HDFS的地址、Hive Metastore的地址等,这些信息可能需要通过系统属性或者Hive-site.xml文件提供。 - **安全性**:如果Hive集群启用了Kerberos安全模式...

    DBeaver链接hive驱动包下载: hive-jdbc-uber-2.6.5.0-292.jar

    《DBeaver与Hive连接:hive-jdbc-uber-2.6.5.0-292.jar驱动详解》 在大数据处理领域,Hive作为一个基于Hadoop的数据仓库工具,广泛用于数据查询和分析。而DBeaver,作为一款跨平台的数据库管理工具,以其用户友好的...

    hive-testbench-hive14.zip大数据TPCDS-99SQL自动测试脚本

    总结来说,“hive-testbench-hive14.zip”提供的测试工具和脚本,是评估和优化Hive在大数据环境下的性能的关键。通过对TPCDS 99条SQL查询的执行,我们可以深入理解Hive的性能特性,从而更好地支持企业的数据分析需求...

    apache-hive-2.1.1-bin.tar

    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-...

    Hive-2.1.1-CDH-3.6.1 相关JDBC连接驱动 Jar 包集合

    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-...

    Apache Hive(apache-hive-3.1.3-bin.tar.gz)

    Apache Hive(apache-hive-3.1.3-bin.tar.gz、apache-hive-3.1.3-src.tar.gz)是一种分布式容错数据仓库系统,支持大规模分析,并使用 SQL 促进读取、写入和管理驻留在分布式存储中的 PB 级数据。Hive 构建在 Apache...

    hive案例之-----------用户分析及答案.rar

    hive案例之----------------------------------用户分析及其答案,恰同学少年,风华正茂,挥斥方遒

    hive-jdbc-3.1.2-standalone

    hive-jdbc-3.1.2-standalone适用于linux

    hive-jdbc-2.1.1-cdh6.2.0-standalone.jar

    hive-jdbc-2.1.1-cdh6.2.0(ieda等jdbc链接hive2.1.1);cdh6.2.0安装的hive2.1.1

    apache-hive-2.3.9-bin.tar大数据HIVE.zip

    5. **优化器**:Hive的优化器(如CBO,Cost-Based Optimizer)根据元数据和统计信息选择最佳执行计划,提升查询性能。 6. **存储过程(UDF,UDAF,UDTF)**:Hive支持用户自定义函数(UDF),用户定义聚合函数...

    hive-jdbc-uber-2.6.5.0-292.jar驱动

    Hive JDBC Uber 2.6.5.0-292驱动是Apache Hive与Java数据库连接(JDBC)之间的桥梁,允许用户通过编程语言(如Java、Python等)或者数据库管理工具(如Dbeaver)与Hive进行交互。这个驱动程序集成了所有必要的依赖,...

    hive-jdbc-uber-3.1.2+yanagishima-18.0

    这里我们关注的是"Hive-jdbc-uber-3.1.2",这是一个包含所有依赖的Uber jar包,旨在简化部署和使用流程。 Hive JDBC Uber 3.1.2是Hive的Java数据库连接器的一个优化版本,它通过将所有必需的依赖项打包到一个单一的...

    hive-jdbc-uber-2.6.5.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 ...

    hive-jdbc-uber-2.6.5.0-292.jar

    在实际项目中,"hive-jdbc-uber-2.6.5.0-292.jar"可以作为大数据分析工具链的一部分,与其他Java应用(如ETL工具、数据可视化工具等)集成,实现对Hive数据仓库的高效访问。尽管下载途径有限,但这个特定版本的JDBC...

    hive-jdbc-uber-2.6.5.0-292.zip

    标题中的“hive-jdbc-uber-2.6.5.0-292.zip”是一个包含Hive JDBC驱动程序的Uber(也称为fat或shaded)jar文件。Uber jar将所有依赖项合并到一个单一的jar文件中,避免了运行时的类冲突问题。这种jar文件在分布式...

    hive-jdbc-2.1.0-standalone.jar

    hive-jdbc-2.1.0-standalone.jar

    Apache Hive(apache-hive-1.2.2-bin.tar.gz)

    Apache Hive(apache-hive-1.2.2-bin.tar.gz、apache-hive-1.2.2-src.tar.gz)是一种分布式容错数据仓库系统,支持大规模分析,并使用 SQL 促进读取、写入和管理驻留在分布式存储中的 PB 级数据。Hive 构建在 Apache...

Global site tag (gtag.js) - Google Analytics