Hive学习----分区操作

本文介绍了Hive如何进行分区操作,包括创建分区、加载数据时添加分区、单独添加分区及删除分区。通过分区,可以有效地管理和提升查询效率。示例中展示了如何创建分区表、使用LOAD DATA指令添加数据到特定分区,以及如何通过ALTER TABLE命令单独添加和删除分区。强调了明确指定分区信息在查询中的重要性,以避免全表扫描导致的效率问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.创建分区

对表中的数据进行管理,并能提高查询效率,Hive的分区实际上就是表下创建子目录

创建表分区通过关键字PARTITIONED BY

CREATE TABLE IF NOT EXISTS tb1(

id int,

name string

)PARTITIONED BY (year int,month int)

ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

 

 

2.添加分区

2.1 加载数据时添加分区

load data local inpath '/home/omc/students.txt' into table tb1

PARTITION (year=2018,month=8);

 

 

查询分区

show partitions tb1;

2.2 单独添加分区

alter table tb1

add partition (year=2017,month=8);

 

虽然没有数据,但先把目录已经创建成功了

将同样的数据上传到year=2017/month=8目录下

查询分区数据,不指定分区信息的话,会进行全表扫描,由于我们上传了两份一模一样的数据到两个分区,所以我们会查到重复记录

现实生产中,我们要指明分区信息来提高查询效率

select * from tb1 where month=8;

select * from tb1 where year=2018;

3.删除分区

alter table tb1

drop partition (year=2017);

 

hdfs上没有year=2017目录以及子目录

 

手工移动分区数据到其他目录下,结果无法查出。因为破坏了分区目录结构

 

 

### Hive 桶表的概念与操作 #### 什么是桶表? 在Hive中,桶表是一种通过哈希函数将数据划分为多个子集的技术。这种技术能够提高查询性能并优化存储结构。当创建一个桶表时,可以通过指定`CLUSTERED BY`字段来定义如何对数据进行分组,并进一步通过`INTO`关键字设定具体的桶数量[^4]。 #### 创建桶表 下面是一个典型的创建桶表的例子: ```sql CREATE TABLE my_bucketed_table ( id INT, name STRING, age INT ) CLUSTERED BY (id) INTO 5 BUCKETS; ``` 此语句表示基于`id`字段对数据进行哈希计算并将它们分布到五个不同的桶中。 #### 数据加载至桶表 为了确保数据被正确分配到各个桶中,在向桶表插入数据之前,需设置如下参数以启用分桶功能: ```sql SET hive.enforce.bucketing = true; ``` 之后可通过`INSERT OVERWRITE`或者`LOAD DATA`的方式完成数据导入。例如,从另一个表中提取数据并写入目标桶表: ```sql FROM my_table INSERT OVERWRITE TABLE my_bucketed_table SELECT * FROM my_table; ``` 这里需要注意的是,源表的数据量应尽可能均匀分布在各桶间,从而达到最佳性能效果[^1]。 #### 查询分桶数据 对于已经建立好的桶表来说,如果希望查看其内部具体是如何按照不同条件分类存放记录的话,则可以直接利用标准SQL语句来进行检索即可。另外还可以借助于EXPLAIN命令分析执行计划,确认是否应用到了分桶特性带来的优势[^3]: ```sql EXPLAIN SELECT COUNT(*) FROM my_bucketed_table WHERE id=10; ``` 以上命令会展示关于该特定查询的详细信息,包括但不限于输入/输出文件路径、MapReduce作业配置以及实际读取哪些部分的数据等内容。 ### 总结 通过对Hive中桶表的学习了解到它不仅有助于提升大规模数据分析场景下的效率而且还能简化某些复杂操作流程。合理规划好分区加分桶策略往往能带来事半功倍的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值