博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hive通过mysql元数据表删除分区
阅读量:5264 次
发布时间:2019-06-14

本文共 2879 字,大约阅读时间需要 9 分钟。

1 创建表 hive命令行操作

  

CREATE TABLE IF NOT EXISTS emp(name STRING,salary FLOAT,subordinates ARRAY
,deductions MAP
,address STRUCT
)PARTITIONED BY (province STRING,city STRING)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t'COLLECTION ITEMS TERMINATED BY ','MAP KEYS TERMINATED BY ':’;

  

2 造数据

  shanxi.txt

  

zj1	10000	james,datacloase	jim:1.2,james:2.1,lilly:3.8	huaxing,xian,shanxi,1zj2	10000	james,datacloase	jim:1.2,james:2.1,lilly:3.8	huaxing,xian,shanxi,2zj3	10000	james,datacloase	jim:1.2,james:2.1,lilly:3.8	huaxing,xian,shanxi,3zj4	10000	james,datacloase	jim:1.2,james:2.1,lilly:3.8	huaxing,xian,shanxi,4zj5	10000	james,datacloase	jim:1.2,james:2.1,lilly:3.8	huaxing,xian,shanxi,5zj6	10000	james,datacloase	jim:1.2,james:2.1,lilly:3.8	huaxing,xian,shanxi,6

  hunan.txt

zbq1	10000	james,datacloase	jim:1.2,james:2.1,lilly:3.8	huaxing,zhangjiajie,hunan,1zbq2	10000	james,datacloase	jim:1.2,james:2.1,lilly:3.8	huaxing,zhangjiajie,hunan,2zbq3	10000	james,datacloase	jim:1.2,james:2.1,lilly:3.8	huaxing,zhangjiajie,hunan,3zbq4	10000	james,datacloase	jim:1.2,james:2.1,lilly:3.8	huaxing,zhangjiajie,hunan,4zbq5	10000	james,datacloase	jim:1.2,james:2.1,lilly:3.8	huaxing,zhangjiajie,hunan,5

  

3 导入数据 hive命令行操作

  

LOAD DATA LOCAL INPATH '/tmp/logs/shanxi.txt' OVERWRITE INTO TABLE empPARTITION(province='shanxi',city='xian’);LOAD DATA LOCAL INPATH '/tmp/logs/hunan.txt' OVERWRITE INTO TABLE empPARTITION(province='hunan',city='zhangjiajie’);

 

4 查询hive数据

hive表结构  

 hive> describe extended emp; 

查询hive分区数据

hive> select * from emp where province='shanxi' and city = 'xian';

 

 

5 查看HDFS的hive目录

[root@hdp1 /tmp/logs]#hdfs dfs -ls /user/hive/warehouse/emp

 

6 删除hive中hunan的分区

  

A 进入hive使用的MySQL 

B 切换为hive数据库

mysql> use hive;
C 查询相关表
mysql> SELECT * FROM TBLS WHERE TBL_NAME='emp';

 

发现出现1条记录,所以使用TBLS表的SD_ID字段去SDS表查询LOCATION字段的值,通过LOCATION字段,就可以知道emp这张表的数据库,TBLS中TBL_ID为6的这行记录就是我要查询的表的ID

mysql> select * from SDS where SD_ID=6;

 

接下来,要根据TBLS表的TBL_ID和hive表分区字段的值(模糊查询)去PARTITIONS表查询,需要得到PARTITIONS表的PART_ID的值(2)
mysql> select * from PARTITIONS t where t.tbl_id=6 and PART_NAME like '%hunan%';

 

D开始删除

  最后,通过TBLS表的TBL_ID(70)和PARTITIONS表的PART_ID(202354)就可以删除hive的分区了

mysql> mysql> delete from PARTITION_KEY_VALS where part;

Query OK, 0 rows affected (0.00 sec)
mysql> delete from PARTITION_KEY_VALS where part_id=2;
Query OK, 2 rows affected (0.00 sec)
mysql> delete from PARTITION_PARAMS where part_id=2;
Query OK, 6 rows affected (0.01 sec)
mysql> delete from PARTITIONS where tbl_id=6 and part_id=2;
Query OK, 1 row affected (0.00 sec)
删除hdfs相关分区目录
[root@hdp1 /root]#hdfs dfs -rm -r "/user/hive/warehouse/emp/province=hunan"
Deleted /user/hive/warehouse/emp/province=hunan

7 查询分区是否删除

已经查询不出来hunan的分区数据了
hive> select * from emp where province='hunan';
OK
Time taken: 0.073 seconds

 

转载于:https://www.cnblogs.com/QuestionsZhang/p/10419762.html

你可能感兴趣的文章
shell脚本——正则表达式
查看>>
ubuntu如何安装虚拟机的工具条
查看>>
Alpha的过程总结
查看>>
printf格式输出知识整理
查看>>
sed 命令用法
查看>>
当DIV内出现滚动条,fixed实效怎么办?
查看>>
方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
查看>>
Matlab parfor-loop并行运算
查看>>
Python中的正则表达式(翻译自DiveintoPython3)
查看>>
java设计模式学习(五):命令模式
查看>>
JavaScript点击按钮创建列表
查看>>
jQuery 学习笔记之五 (jQuery 案例)
查看>>
Using mongo in django to develop web app with python
查看>>
Angular4的依赖注入
查看>>
Struts2 拦截器
查看>>
A - 娜娜梦游仙境系列——诡异的钢琴
查看>>
django中的静态文件管理
查看>>
kinect笔记 四、kinect中的一些脚本和参数的作用(持续更新)
查看>>
laravel 创建自定义全局函数
查看>>
javascript剔除数组重复元素的简单方法
查看>>