Hive分区表详解:静态与动态分区的建表与操作实例
“这篇教程详细介绍了Hive中的分桶表和分区表的概念,以及如何使用建表语句创建这些表。内容涵盖了从一级静态分区到二级静态分区,再到一级和二级动态分区的创建方法,同时也讲解了如何对分区进行查询、删除、添加以及数据的导入。” 在Hive中,分区表是一种优化数据存储和查询效率的重要手段。通过分区,我们可以将大规模的数据按照特定的字段(通常是日期、地区等)划分为多个小块,从而在查询时减少处理的数据量,提高查询速度。 1. 静态分区表: 静态分区表是指在创建表时就预定义了分区列及其值。例如,一级静态分区表创建语句如下: ```sql CREATE TABLE my_partitioner1 ( id BIGINT, name STRING, time DATE, love VARCHAR(50)) PARTITIONED BY (sex STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'; ``` 在这个例子中,`sex`就是分区列,我们可以在插入数据时指定具体的分区值。 对于二级静态分区表,例如: ```sql CREATE TABLE my_partitioner3 ( id BIGINT, name STRING, time DATE, interest ARRAY<STRING>) PARTITIONED BY (sex STRING, country STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY ','; ``` 这里除了`sex`之外,还增加了`country`作为分区列。 2. 数据加载: 加载数据到静态分区表通常有两种方式:一是通过`LOAD DATA [LOCAL] INPATH`命令,二是通过`INSERT INTO`语句配合子查询。 - 使用`LOAD DATA`命令,如: ```sql LOAD DATA [LOCAL] INPATH '/root/my_partitioner3.txt' INTO TABLE my_partitioner4 PARTITION(sex='woman', country='usa'); ``` - 使用`INSERT INTO`语句,需要指定分区,例如: ```sql INSERT INTO TABLE my_partitioner5 PARTITION(sex='man', country='china') SELECT * FROM some_other_table; ``` 3. 动态分区: 动态分区允许在插入数据时动态地确定分区值,这在处理大量数据时非常有用。创建动态分区表的基本语法与静态分区类似,但在插入数据时,部分或全部分区列可以不指定具体值,而是使用`PARTITION()`关键字后面跟一个表达式。 4. 查询、删除和添加分区: 查询分区数据可以使用`WHERE`子句指定分区条件,如`SELECT * FROM my_partitioner WHERE sex='man'`。删除分区使用`DROP PARTITION`语句,添加新的分区数据则可以通过`ALTER TABLE ADD PARTITION`命令。 Hive的分区表功能是大数据处理中的重要工具,通过合理设计和使用分区,可以极大地提升数据分析的效率和管理的便利性。理解并掌握分区表的创建、数据加载和查询操作,对于高效利用Hive进行大数据分析至关重要。
静态分区表
=======================================================================================================================================================
一级分区的静态分区表
create table my_partitioner1(
id bigint,
name string,
time date,
love varchar(50))
partitioned by(sex string)
row format delimited fields terminated by '\t'
二级分区的静态分区表
create table my_partitioner3(
id bigint,
name string,
time date,
interest array<string>)
partitioned by(sex string,country string)
row format delimited fields terminated by '\t'
collection items terminated by ','
分区数据
1 wd 2018-10-25 睡觉
2 zam 2018-10-26 吃
3 dong 2018-10-25 玩游戏
1 zam 2018-10-25 睡觉,吃,玩游戏
3 wd 2018-10-25 玩游戏,睡觉
1.数据加载到表
由本地文件插入
load data [local] inpath '/root/my_partitioner3.txt into table my_partitioner4 partition(sex='woman',country='usa');
由子查询导入,需要指定分区
insert into my_partitioner5 partition(sex='man',country='usa') select id,name,time,interest from my_partitioner4 where sex='man' andcountry='usa';
文件直接导入hdfs制定区域
再刷新元数据信息
msck repair table order_created_partition;
2.查询时间大于10-25 的interest
select interest from my_partitioner4 where time>'2018-10-25';
3.查询某个分区的数据
select * from my_partitioner4 where sex='woman';
select * from my_partitioner4 where sex='woman' and country='china';
4.添加分区,只能在当前级数下进行分区,数目必须和其一致
alter table my_partitioner4 add partition (sex='woman',country='china');
5.删除分区
alter table my_partitioner4 drop partition(sex='woman',country='china');
6.显示已有分区
show partitions my_partitioner4;
7.删除表数据(删除所有数据,保留表结构)
truncate table d_patition1;
剩余8页未读,继续阅读
- 粉丝: 1
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦