hive笔记-刷新分区

本文详细介绍了如何在Hive中进行分区操作,包括从HDFS获取分区数据到本地、删除分区、将本地数据放回HDFS对应的分区路径、刷新分区信息等步骤。通过具体实例展示了整个过程,并解释了为何需要刷新分区信息。

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

1、选择一张分区表(本次取的是内部表),把分区数据取到本地。

[root@hadoop001 hiveData]# hadoop fs -get /user/hive/warehouse/emp_dept_partition/deptno=30/000000_0 emp_dept_partition-deptno30
[root@hadoop001 hiveData]# ls
dept  emp_dept_partition-deptno30  emp.txt

2、删除该分区

hive> ALTER TABLE emp_dept_partition DROP IF EXISTS PARTITION(deptno=30);
Dropped the partition deptno=30
OK
Time taken: 0.652 seconds
hive> select * from emp_dept_partition where deptno=30;
OK
Time taken: 0.507 seconds

deptno=30分区对应的文件夹也不存在了。
[root@hadoop001 hiveData]# hadoop fs -ls /user/hive/warehouse/emp_dept_partition/
Found 2 items
drwxr-xr-x   - root supergroup          0 2018-01-08 20:59 /user/hive/warehouse/emp_dept_partition/deptno=10
drwxr-xr-x   - root supergroup          0 2018-01-08 20:59 /user/hive/warehouse/emp_dept_partition/deptno=20

3、将deptno=30的数据从本地放回emp_dept_partition对应的hdfs路径

[root@hadoop001 hiveData]# hadoop fs -mkdir /user/hive/warehouse/emp_dept_partition/deptno=30
[root@hadoop001 hiveData]# hadoop fs -put emp_dept_partition-deptno30 /user/hive/warehouse/emp_dept_partition/deptno=30 
[root@hadoop001 hiveData]# hadoop fs -cat /user/hive/warehouse/emp_dept_partition/deptno=30/emp_dept_partition-deptno30
7499    ALLEN   SALESMAN        7698    1981/2/20       1600.0  300.0
7521    WARD    SALESMAN        7698    1981/2/22       1250.0  500.0
7654    MARTIN  SALESMAN        7698    1981/9/28       1250.0  1400.0
7698    BLAKE   MANAGER 7839    1981/5/1        2850.0  \N
7844    TURNER  SALESMAN        7698    1981/9/8        1500.0  0.0
7900    JAMES   CLERK   7698    1981/12/3       950.0   \N
[root@hadoop001 hiveData]# 

4、检查分区表的数据,发现查询不到任何数据,原因是因为元数据还没添加

hive> select * from emp_dept_partition where deptno=30;
OK
Time taken: 0.116 seconds

5、刷新分区表信息
语法:ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location'][, PARTITION partition_spec [LOCATION 'location'], ...];

hive> ALTER TABLE emp_dept_partition ADD IF NOT EXISTS PARTITION (deptno=30);
OK
Time taken: 0.209 seconds
hive>  select * from emp_dept_partition where deptno=30;
OK
7499    ALLEN   SALESMAN        7698    1981/2/20       1600.0  300.0   30
7521    WARD    SALESMAN        7698    1981/2/22       1250.0  500.0   30
7654    MARTIN  SALESMAN        7698    1981/9/28       1250.0  1400.0  30
7698    BLAKE   MANAGER 7839    1981/5/1        2850.0  NULL    30
7844    TURNER  SALESMAN        7698    1981/9/8        1500.0  0.0     30
7900    JAMES   CLERK   7698    1981/12/3       950.0   NULL    30
Time taken: 0.168 seconds, Fetched: 6 row(s)

总结:

直接建立分区表的分区的文件夹,并上传对应分区的数据文件后,这些数据都是手动添加的,所以mysql并无记录对应分区的元数据,所以hive不能查询对应的结果。

需要在hive刷新分区信息(说白了就是想存储元数据的数据库添加分区资料)。

【来自@若泽大数据】

### Hive内部分区表的概念及其实现 #### 分区表的核心概念 Hive中的分区表是一种用于优化大数据查询的技术。它通过将数据按照某个或某些列的值划分为不同的子集,从而使得查询操作更加高效[^2]。这种技术允许用户仅加载特定条件下的数据,而不是扫描整个表格的内容。 #### 动态分区功能 为了支持更灵活的数据插入方式,Hive引入了动态分区的功能。启用此功能需要设置参数`hive.exec.dynamic.partition=true`[^1]。这样,在向分区表中插入数据时,Hive可以根据实际数据内容自动生成对应的分区路径并保存数据[^3]。 #### 创建分区表的具体方法 以下是创建一个基于日期字段(`day`)进行分区的表的例子: ```sql CREATE TABLE dept_partition ( deptno INT, -- 部门编号 dname STRING, -- 部门名称 loc STRING -- 部门位置 ) PARTITIONED BY (day STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'; ``` 上述SQL语句定义了一个名为`dept_partition`的表,并指定了按字符串类型的`day`字段进行分区[^4]。 #### 向分区表写入数据的方式 对于已经创建好的分区表,可以通过多种方式进行数据填充。其中一种常见的方式是使用`LOAD DATA`命令直接导入文件到指定的分区目录下;另一种则是利用`INSERT INTO ... PARTITION (...) SELECT ... FROM ...`结构完成复杂场景下的数据迁移工作。 #### 使用分区表的优势分析 采用分区策略不仅有助于加快查询速度,还便于日常维护以及实施长期存档计划等方面的工作。当面对海量记录集合时,合理设计分区方案往往能带来显著效益改进效果[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值