partition是hive提供的一种机制:用户通过指定一个或多个partition key,决定数据存放方式,进而优化数据的查询

一个表可以指定多个partition key,每个partition在hive中以文件夹的形式存在。



实例(static partition):

编辑文件:/home/work/data/test3.txt; /home/work/data/test4.txt;

$ cat /home/work/data/test3.txt

1,zxm

2,ljz

3,cds

4,mac

5,android

6,symbian

7,wp



$ cat /home/work/data/test4.txt

8,zxm

9,ljz

10,cds

11,mac

12,android

13,symbian

14,wp

建表:

hive> create table student_tmp(id INT, name STRING)

> partitioned by(academy STRING, class STRING)

> row format delimited fields terminated by ',';

OK

Time taken: 6.505 seconds

id,name是真实列,partition列academy和class是伪列



load数据:(此处直接load数据进partition,在hive 0.6之前的版本,必须先创建好partition,数据才能导入)

hive> load data local inpath '/home/work/data/test3.txt' into table student_tmp
partition(academy='computer', class='034');

Copying data from file:/home/work/data/test3.txt

Copying file: file:/home/work/data/test3.txt

Loading data to table default.student_tmp partition (academy=computer, class=034)

OK

Time taken: 0.898 seconds

hive> load data local inpath '/home/work/data/test3.txt' into table student_tmp
partition(academy='physics', class='034');

Copying data from file:/home/work/data/test3.txt

Copying file: file:/home/work/data/test3.txt

Loading data to table default.student_tmp partition (academy=physics, class=034)

OK

Time taken: 0.256 seconds



查看hive文件结构:

$ hadoop fs -ls /user/hive/warehouse/student_tmp/

Found 2 items

drwxr-xr-x - work supergroup 0 2012-07-30 18:47 /user/hive/warehouse/student_tmp/academy=computer

drwxr-xr-x - work supergroup 0 2012-07-30 19:00 /user/hive/warehouse/student_tmp/academy=physics

$ hadoop fs -ls /user/hive/warehouse/student_tmp/academy=computer

Found 1 items

drwxr-xr-x - work supergroup 0 2012-07-30 18:47 /user/hive/warehouse/student_tmp/academy=computer/class=034



查询数据:

hive> select * from student_tmp where academy='physics';

OK

1 zxm physics 034

2 ljz physics 034

3 cds physics 034

4 mac physics 034

5 android physics 034

6 symbian physics 034

7 wp physics 034

Time taken: 0.139 seconds



以上是static partition的示例,static partition即由用户指定数据所在的partition,在load数据时,指定partition(academy='computer', class='034');

static partition常适用于使用处理时间作为partition key的例子。

但是,我们也常常会遇到需要向分区表中插入大量数据,并且插入前不清楚数据归宿的partition,此时,我们需要dynamic partition。

使用动态分区需要设置hive.exec.dynamic.partition参数值为true。

可以设置部分列为dynamic partition列,例如:partition(academy='computer', class);

也可以设置所有列为dynamic partition列,例如partition(academy, class);

设置所有列为dynamic partition列时,需要设置hive.exec.dynamic.partition.mode=nonstrict

需要注意的是,主分区为dynamic partition列,而副分区为static partition列是不允许的,例如partition(academy, class=‘034’);是不允许的

示例(dynamic partition):

建表

hive> create table student(id INT, name STRING)

> partitioned by(academy STRING, class STRING)

> row format delimited fields terminated by ',';

OK

Time taken: 0.393 seconds



设置参数

hive> set hive.exec.dynamic.partition.mode=nonstrict;

hive> set hive.exec.dynamic.partition=true;



导入数据:

hive> insert overwrite table student partition(academy, class)

> select id,name,academy,class from student_tmp

> where class='034';

Total MapReduce jobs = 2

.........

OK

Time taken: 29.616 seconds



查询数据:

hive> select * from student where academy='physics';

OK

1 zxm physics 034

2 ljz physics 034

3 cds physics 034

4 mac physics 034

5 android physics 034

6 symbian physics 034

7 wp physics 034

Time taken: 0.165 seconds



查看文件:

$ hadoop fs -ls /user/hive/warehouse/student/

Found 2 items

drwxr-xr-x - work supergroup 0 2012-07-30 19:22 /user/hive/warehouse/student/academy=computer

drwxr-xr-x - work supergroup 0 2012-07-30 19:22 /user/hive/warehouse/student/academy=physics

总结:

hive partition是通过将数据拆分成不同的partition放入不同的文件,从而减少查询操作时数据处理规模的手段。

例如,Hive Select查询中,如果没有建partition,则会扫描整个表内容,这样计算量巨大。如果我们在相应维度做了partition,则处理数据规模可能会大大减少。

|

附partition相关参数:

hive.exec.dynamic.partition(缺省false): 设置为true允许使用dynamic partition

hive.exec.dynamic.partition.mode(缺省strick):设置dynamic partition模式(nostrict允许所有partition列都为dynamic partition,strict不允许)

hive.exec.max.dynamic.partitions.pernode (缺省100):每一个mapreduce job允许创建的分区的最大数量,如果超过了这个数量就会报错

hive.exec.max.dynamic.partitions (缺省1000):一个dml语句允许创建的所有分区的最大数量

hive.exec.max.created.files (缺省100000):所有的mapreduce job允许创建的文件的最大数量



reference:

Dynamic Partitions

hive中简单介绍分区表(partition table),含动态分区(dynamic partition)与静态分区(static partition)

hive parition的使用,分dynamic和static两种的更多相关文章

  1. POJ 1182食物链(分集合以及加权两种解法) 种类并查集的经典

    题目链接:http://icpc.njust.edu.cn/Problem/Pku/1182/ 题意:给出动物之间的关系,有几种询问方式,问是真话还是假话. 定义三种偏移关系: x->y 偏移量 ...

  2. Java调用外部类定义的方法(Static与无Static两种)

    首先定义方法 public class Dy { public int Add(int x,int y){ //定义Add(),该方法没有被static修饰 return x+y; } public ...

  3. Hive动态分区和分桶(八)

    Hive动态分区和分桶 1.Hive动态分区 1.hive的动态分区介绍 ​ hive的静态分区需要用户在插入数据的时候必须手动指定hive的分区字段值,但是这样的话会导致用户的操作复杂度提高,而且在 ...

  4. hive的排序,分組练习

    hive的排序,分組练习 数据: 添加表和插入数据(数据在Linux本地中) create table if not exists tab1( IP string, SOURCE string, TY ...

  5. Hive基础语法5分钟速览

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 其优点是学习成本低,可以通过 ...

  6. hive:(group by, having;order by)的使用;group by+多个字段,以及wiki说的group by两种使用限制验证

    hive> select * from app_data_stats_historical where os='1' group by dt limit 100; 出现结果如下: 2014-01 ...

  7. Spark:DataFrame批量导入Hbase的两种方式(HFile、Hive)

    Spark处理后的结果数据resultDataFrame可以有多种存储介质,比较常见是存储为文件.关系型数据库,非关系行数据库. 各种方式有各自的特点,对于海量数据而言,如果想要达到实时查询的目的,使 ...

  8. java中线程分两种,守护线程和用户线程。

    java中线程分为两种类型:用户线程和守护线程. 通过Thread.setDaemon(false)设置为用户线程: 通过Thread.setDaemon(true)设置为守护线程. 如果不设置次属性 ...

  9. 华为 1.static有什么用途?(请至少说明两种)

    1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问 ...

随机推荐

  1. 安卓 LayoutInflater参数作用

    方法重载1 public View inflate (int resource, ViewGroup root, boolean attachToRoot) 方法重载2 public View inf ...

  2. Bootstrap3 排版-标题

    HTML 中的所有标题标签,<h1> 到 <h6> 均可使用.另外,还提供了 .h1 到 .h6 类,为的是给内联(inline)属性的文本赋予标题的样式. h1. Boots ...

  3. Android二维码扫描、生成

    Android二维码扫描.生成 现在使用二维码作为信息的载体已经越来越普及,那么二维码的生成以及扫描是如何实现的呢 google为我们提供了zxing开源库供我们使用 zxing GitHub源码地址 ...

  4. ASP.NET实现在线浏览Word文档另一种解决方案(Word转PDF)

    ASP.NET实现在线浏览Word文档另一种解决方案(Word转PDF)      上述博文里提到的在线浏览pdf的方案不错,但word转pdf的那个dll只支持doc不支持docx,附上最新的下载链 ...

  5. CDH集群安装&测试总结

    0.绪论 之前完全没有接触过大数据相关的东西,都是书上啊,媒体上各种吹嘘啊,我对大数据,集群啊,分布式计算等等概念真是高山仰止,充满了仰望之情,觉得这些东西是这样的: 当我搭建的过程中,发现这些东西是 ...

  6. 深入了解UIViewController控制器与对应的View类的详解

    ViewController是iOS开发中MVC模式中的C(视图控制器),ViewController是view的controller,ViewController的职责主要包括管理内部各个view的 ...

  7. frameset 与frame 设置的技巧

    今天来写点不一样的.如下图: 实现的效果就是原生的类似于导航形式的frameset. frameset 注意: 包含frameset的网页应该只是作为框架而存在,所以不能有body标签. 这个标签可以 ...

  8. 开源IMDG之GridGain

    作为另一款主流的开源数据网格产品,GridGain是Hazelcast的强有力竞争者.同样提供了社区版和商业版,近日GridGain的开源版本已经进入Apache孵化器项目Ignite(一款开源的内存 ...

  9. 【java虚拟机序列】java中的垃圾回收与内存分配策略

    在[java虚拟机系列]java虚拟机系列之JVM总述中我们已经详细讲解过java中的内存模型,了解了关于JVM中内存管理的基本知识,接下来本博客将带领大家了解java中的垃圾回收与内存分配策略. 垃 ...

  10. 直接内存访问(DMA)

    1. 什么是DMA 直接内存访问是一种硬件机制,它允许外围设备和主内存之间直接传输它们的I/O数据,而不需要系统处理器的参与.使用这种机制可以大大提高与设备通信的吞吐量.   2. DMA数据传输 有 ...