hive动态分区我知道

现在是晚上,听着歌,写着博客,这样的寒假很美好,什么时候开学呢?还是个未知数

关于分区:

        Hive中分区的功能是非常有用的,这是因为hive通常要对输入进行全盘扫描,来满足查询条件,通过创建很多的分区确实可以优化一些查询,但是分区过多也会有很多的问题。

        HDFS是用来设计存储数百万的大文件的,而不是几亿个小文件,使用过多的分区可能导致的一个问题就是会创建大量的非必须的hadoop文件和文件夹,一个分区可能包括一个或者多个文件的文件夹,如果指定的表存在数百个分区,那么可能一天创建好几万的文件,因此对于namenode会造成很大的负担,会严重的占据NameNode的内存,同时每一个小文件在运行时就对应这一个task。每一个task都是一个jvm实例,可能一个查询,创建jvm实例的时间都会比查询的时间花费的时间多。

        关于多分区下的小文件和文件过多,在本篇中将不会叙述,会在之后的博客里面介绍这些,并介绍相关的处理方法。

动态分区:

在这篇博客里面,博主会通过一个数据集,两个案例,分别介绍动态分区中的一个分区字段和多个分区字段下不同的情况。

只有一个分区字段的时候:

1.首先先看原来的表 dept表

2. 创建一个只有一个字段的分区表(动态分区,首先开启动态分区,并且以最后一个字段loc当作分区字段)

 

3.将 dept 表里面的数据,插入到动态分区 表 dept_partition_dy表里面

4.按照Loc的值进行分区,在dept表里面可以知道,loc有三个值,所以会有三个分区

我们在web UI中也可以看到,在dept_partition_dy这个表下面有三个小文件,都是根据Loc不同的值来进行划分为不同的分区。

5.对分区表进行数据查询

总结一把:

        在动态分区中,首先我们要设置开启动态分区。

        再将数据插入到动态分区的时候,不需要我们将分区字段什么类型啥的都写上去,就只用写个分区字段的名称就可以,因为Hive会去匹配。在哪里匹配呢?在我们下面的查询语句中去找。举个例子

insert into table dept_partition_dt partition(loc) select id,name,loc from dept

可以看到,分区字段只有一个loc,但是我们下面的查询语句中,有三个字段,Hive会选择哪一个呢?很显然,会选择最后一个,在分区表dept_partition_dy和dept表的列数相同的情况下,怎么说呢,在创建dept_partition-dy表的时候,给了两个字段和一个分区字段。但是分区字段只有一个,所以Hive会在下面的查询语句中匹配到最后一个字段。

所以我们在匹配的时候,dept 的 id 对应dept_partition_dy的id,name 对应name。loc 对应loc

这样就会因为loc的不同,产生不同的分区

多个分区字段

多个字段的情况其实和一个字段的情况差不多,Hive会自动匹配最后多个字段的值作为分区表的依据。至于是几个字段,取决于创建分区表的时候,建立了几个分区字段

1.创建具有二级分区的分区表

2.向二级分区表插入数据

3.查看数据

4.展示多级分区表的字段信息和表信息

5 二级分区,就好比是文件夹嵌套文件夹,通过web ui来形象的看一下把

第一个分区字段好比是文件夹里面又创建了一个文件夹。

第二个分区字段好比是在文件夹里面创建的一个文件夹里面又创建了一个文件夹。好比俄罗斯套娃

总结:

可能上面的语言过于繁琐,本来想解释清楚的,貌似越解释,越不解释不清楚,所以贴上自己总结的pdf一小部分。可以说非常的生动形象,简洁。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值