美文网首页
Hive内部表、外部表、分区表、桶表概述

Hive内部表、外部表、分区表、桶表概述

作者: 千释炎 | 来源:发表于2018-08-17 19:02 被阅读0次

      Hive是基于Hadoop的一个数据仓库,可以将结构化的数据文件映射为一张表,并提供类sql查询功能,Hive底层将sql语句转化为mapreduce任务运行。Hive是一个数据仓库,不支持行级插入、更新以及删除操作。Hive共有四种表,分别是内部表、外部表、分区表和桶表。

     1. 内部表

      内部表有时也被称为管理表。这种表会控制着数据的生命周期,Hive默认情况下会将这些表的数据存储在由配置项hive.metastore.warehouse.dir所定义的目录的子目录下。当我们删除内部表时,同时会删除这个表中的数据。内部表不方便与其他工具共享数据。

      创建一个内部表可以用如下语句:

    #字段之间以逗号分隔
    create table table_name(id int, name string) row format delimited fields terminated by ',';  
    

     2. 外部表

      外部表指向特定目录的一份数据,Hive并不对该数据具有所有权。当删除表时,不会删除该目录下的数据,数据可以被多个工具共享。即外部表只是对数据进行逻辑管理,创建一个外部表需要用external关键字:

    #location指明了该表指向的数据
    create external table table_name(id int, name string) row format delimited fields terminated by ',' location '/data/order/order.data'; 
    

     3. 分区表

       分区表是一种内部表。分区表通过指定一个或多个partition key,决定数据存放方式,进而优化数据的查询。每个表可以指定多个partition key,每个partition在hive中以文件夹的形式存在。如下所示是对数据的年份进行分区,每个年份对应一个文件夹,年份相同的数据会放到同一个文件夹下:

    按年份分区数据结构图

      创建分区表时要注意开启允许动态分区设置,必要的时候还需要设置允许创建的最大分区数。

    #开启动态分区功能
    set hive.exec.dynamic.partition=true;
    #允许所有分区都是动态的
    set hive.exec.dynamic.partition.mode=nonstricr;
    #设置每个mapper或reducer可以创建的最大动态分区个数
    set hive.exec.max.dynamic.partitions.pernode=1000;
    #设置一个动态分区创建语句可以创建的最大分区个数
    set hive.exec.dynamic.partitions=10000;
    #全局可以创建的最大文件个数
    set hive.exec.max.created.files=100000;
    

      创建分区表可以用以下语句:

    #指定year为分区键,注意分区键不能同时出现在table_name后面,否则会报错
    create table table_name(id int, name string) partitioned by(year int) row format delimited fields terminated by ',';  
    

     4. 桶表

      桶表也是内部表,桶表是对某一列的数据进行哈希取值以将数据打散,然后放到不用文件中存储。在Hive分区表中,分区中的数据量过于庞大时,建议使用桶。在分桶时,对指定字段的值进行hash运算得到hash值,并使用hash值除以桶的个数取余进行分桶。分桶后的查 询效率比分区后的查询效率更高。下图是按照年份分区,再按id进行分桶后的结构:

    分区分桶表结构图

      建表语句:

    #该表按照year进行分区,每个分区又分成四个桶
    create table table_name(id int, name string) partitioned by(year int) clustered by(id) into 4 buckets;   
    

      end!

    相关文章

      网友评论

          本文标题:Hive内部表、外部表、分区表、桶表概述

          本文链接:https://www.haomeiwen.com/subject/febtiftx.html