HIve通过mysql元数据表删除分区

1 创建表 hive命令行操作

  

CREATE TABLE IF NOT EXISTS emp(
name STRING,
salary FLOAT,
subordinates ARRAY<STRING>,
deductions MAP<STRING,FLOAT>,
address STRUCT<street:STRING,city:STRING,province:STRING,zip:INT>
)
PARTITIONED BY (province STRING,city STRING)
ROW FORMAT DELIMITED
FIELDS 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,1
zj2	10000	james,datacloase	jim:1.2,james:2.1,lilly:3.8	huaxing,xian,shanxi,2
zj3	10000	james,datacloase	jim:1.2,james:2.1,lilly:3.8	huaxing,xian,shanxi,3
zj4	10000	james,datacloase	jim:1.2,james:2.1,lilly:3.8	huaxing,xian,shanxi,4
zj5	10000	james,datacloase	jim:1.2,james:2.1,lilly:3.8	huaxing,xian,shanxi,5
zj6	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,1
zbq2	10000	james,datacloase	jim:1.2,james:2.1,lilly:3.8	huaxing,zhangjiajie,hunan,2
zbq3	10000	james,datacloase	jim:1.2,james:2.1,lilly:3.8	huaxing,zhangjiajie,hunan,3
zbq4	10000	james,datacloase	jim:1.2,james:2.1,lilly:3.8	huaxing,zhangjiajie,hunan,4
zbq5	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 emp
PARTITION(province=‘shanxi‘,city=‘xian’);

LOAD DATA LOCAL INPATH ‘/tmp/logs/hunan.txt‘ OVERWRITE INTO TABLE emp
PARTITION(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

时间: 2024-11-05 19:26:40

HIve通过mysql元数据表删除分区的相关文章

mysql多表删除实例

mysql多表删除 删除某学生基本信息的同时,删除该学生的所有成绩 mysql> select * from stu_inf; +----+----------+--------+-------+-------+--------+ | id | stu_xh   | stu_xm | xb_id | xy_id | stu_bj | +----+----------+--------+-------+-------+--------+ |  1 | 07150101 | 小明   |     1

Mysql分表和分区的区别、分库分表介绍与区别

分表和分区的区别: 一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看:mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上,具体请参考mysql分区功能详细介绍,以及实例 二,mysql分表和分区有什么区别呢 1,实现方式上 a),mysql的分表是真正的分表,一张表分成很多表后,每一个小表都是完正的一张表,都对应三个文件,一个.MYD数据文件,.MYI索引文件,.frm表

mysql 分表与分区

一.操作环境 数据达到百w甚于更多的时候,我们的mysql查询将会变得比较慢, 如果再加上连表查询,程序可能会卡死.即使你设置了索引并在查询中使用到了索引,查询还是会慢.这时候你就要考虑怎么样来提高查询速度了. 抛弃其他的不讲,只从mysql本身的优化来讲,我所知道的方法有三种:mysql集群,mysql分表,mysql分区 二.mysql集群 mysql集群成本比较高,不过这不是这里讲的重点,后期开一篇文章,专门来讲这方面的知识. 三.mysql分表 1. 当数据达到百w,千w的时候,我们就想

MySQL数据表range分区例子

某些行业数据量的增长速度极快,随着数据库中数据量的急速膨胀,数据库的插入和查询效率越来越低.此时,除了程序代码和查询语句外,还得在数据库的结构上做点更改:在一个主读辅写的数据库中,当数据表数据超过1000w行后,那查询效率真的很让人抓狂.就算早前建了索引,也很难满足用户对于系统查询效率的体验. 优化方案是分表或分区.至于分区的原理以及分区和分表的区别,搜索一下,都介绍的很详细,这里就不作冗余介绍.简单来讲,分表旨在提高数据库的并发能力,分区旨在优化磁盘的IO和数据的读写,所以采用什么方案,还得根

Hive Experiment 2(表动态分区和IDE)

1.使用oracle sql developer 4.0.3作为hive query的IDE. 下载hive-jdbc driver http://www.cloudera.com/content/cloudera/en/downloads/connectors/hive/jdbc/hive-jdbc-v2-5-6.html Start    Oracle    SQL    Developer    and    navigate    to    Preferences    |    Da

mysql分表和分区简述

1)分表目的:提升对海量数据的进行存取操作的效率选择合适的分表策略,确定分表策略后,当进行数据存取操作时,需求确定要到那张表里去查询数据分表字段:互联网的系统使用用户id字段数据是放到哪个表:分表的字段%分表的数量策略:根据范围分区(表ID 1~200 db1 表ID 201~200 db2 表ID m~n dbn) 范围应该连续但是不连续,使用PAPRTION BY RANGE VALUES LESS THAN关键字不使用COLUMNS关键字时,RANGE中必须为整数字段名或返回确定整数字段的

mysql关联表删除数据

有时候我们需要删除表中部分内容,或删除一个表中在另一个表中已经存在的内容,可以用以下方法: 1.delete from t1 where 条件; 2.delete t1 from t1, t2 where 条件; 3.delete t1, t2 from t1, t2 where 条件; eg: 删除表t1已经在表t2中存在的数据: DELETE t1 FROM table_1 t1, table_2 t2 WHERE t1.id=t2.id and t1.year=t2.year and t1

hive通过jdbc创建表,分区,桶

首先我们需要打开hiveserver服务:hive --service hiveserver 然后我们和操作普通数据库一样,先加载驱动,然后建立连接,接着创建一个statement,然后执行查询,然会结果集.代码如下(一定要写对sql语句,要仔细,下面的需要注意的地方我已经标示出来了:) package playHive; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; i

mysql数据表删除字段里重复的信息

DELETEFROM table表 WHERE(table表 字段) IN (SELECT FROM(SELECTtable表 字段FROMtable表 as 别名GROUP BY别名.table表 字段HAVINGcount() > 1) as c)AND id NOT IN (SELECT from(SELECTmin(id) //最小的记录 FROMtable表 as 别名GROUP BY别名.table表 字段HAVINGcount() > 1)as d ) 原文地址:http://b