HIVE创建动态和静态分区表

前言

为什么需要创建分区表?我这里有一张user表,里面记录了用户的职业、年龄、职业编号的信息,当没有条件查询时,速度如下:
在这里插入图片描述
大概2秒就可以查询完成,但是添加条件查询后,速度如下:在这里插入图片描述
可以看到,差不多需要1分钟才能得出结果,这严重影响效率,因为已经要使用MapReduce来进行计算,用explain来看下:
select * from user
在这里插入图片描述
select * from user where occupationid = 0
在这里插入图片描述
为了提高效率,创建分区表就很有必要。

动态创建HIVE分区表

0: jdbc:hive2://dn2:10000> create table p_user(id int, gender string, age int, zip string)
. . . . . . . . . . . . .> partitioned by (occupationid int);

p_user为分区表明,partitioned by 则是根据什么字段来进行分区,我这里是occupationid。

创建成功后,就需要将数据导入分区表:

0: jdbc:hive2://dn2:10000> insert overwrite table p_user partition(occupationid) select id,gender,age,zip,occupationid from user;

当导入完成后,可以到hdfs上面看看p_user中是怎么存储数据的:
在这里插入图片描述
很明显,每个不同的occupationid都会单独存放在一个文件夹中,这样当以occupationid为查询条件时就只需要在某个occupationid中查找,测试下速度:
在这里插入图片描述
1点几秒就可以完成,速度效率提升非常大,顺便explain一下:
在这里插入图片描述
并没有开启Mapduce的作业。

静态分区表创建

静态分区表和动态差不多一样,只不过在导入数据需要加上条件,如下:

0: jdbc:hive2://dn2:10000> insert overwrite table p_user partition(occupationid=22) select id,gender,age,zip,occupationid from user

静态和动态最大的区别是动态能根据occupationid的不同而创建不同的分区表,而静态则是指定创建occupationid某个值的分区,上面是occupation=22。

结尾

分区表的使用能够提供我们的条件查询效率,但是并不是什么字段都能作为分区表的依据,像身份证号码这种有上亿个不同值是不能作为分区依据的。

错误

若出现以下错误:

Permission denied: user=anonymous, access=WRITE, inode="/user/anonymous":hdfs:supergroup:drwxr-xr-x

只需要输入

hadoop dfs -chmod -R 777 /user/anonymous

即可解决

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Hive可以通过创建分区表来实现对数据进行分区管理。在创建分区表时,可以使用静态分区或动态分区的方式。 静态分区是指在创建的时候就明确指定了分区的目录,每个分区需要使用一条插入语句来加载数据。这种方式适用于已经知道分区的情况。 动态分区是指根据查询结果动态地将数据分配到相应的分区中,而不需要指定分区目录。使用动态分区可以一次性插入多个分区的数据。Hive会根据实际的数据选择插入到哪一个分区。启用动态分区功能需要设置相应的参数,如`set hive.exec.dynamic.partition=true;`和`set hive.exec.dynamic.partition.mode=nostrick;`。这样就可以允许全部分区都是动态分区了。 需要注意的是,使用以上两种方法为内部分区表加载数据时,不需要预先创建分区。加载数据时会自动创建相应的分区。如果想要预先创建分区,可以使用`hadoop fs –mkdir`命令在目录下先创建相应的分区目录,然后再使用`alter table add partition`语句增加分区。 综上所述,Hive可以通过静态分区或动态分区的方式来创建分区表,并根据需求选择合适的方法来管理分区数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [hive 分区表创建](https://blog.csdn.net/qq_45602114/article/details/119790780)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值