删除与分区

时间:2017-03-01 10:12:59

标签: hadoop hive hiveql apache-hive

我的Hadoop群集在11:00为每个数据运行批处理作业。

作业创建hive表分区(例如p_date = 201702,p_domain = 0)并将rdbms数据导入到hive表分区,如ETL ....(hive表不是外部表)

但作业失败了,我删除了一些hdfs文件(分区位置=> p_date = 20170228,p_domain = 0)进行重新处理。

这是我的错误,我只是在直线下拉分区的打字查询......

当我以这种方式查询时,我联系一个挂机“select * from table_name,其中p_date = 20170228,p_domain = 0”,但“select * from table_name其中p_date = 20170228,p_domain = 6”成功。

我找不到错误日志和控制台消息未出现

我该如何解决这个问题?

我希望你能理解我缺乏英语。

1 个答案:

答案 0 :(得分:1)

您不应该以这种方式删除Hive表中的分区。执行此操作有一个特殊命令:

ALTER TABLE table_name DROP IF EXISTS PARTITION(partitioncolumn =' somevalue');

从HDFS删除文件是不够的。您需要清理Metastore中的数据。为此,您需要连接到关系数据库并从MetaStore数据库中与分区相关的表中删除数据。

mysql

mysql> use hive;

mysql> SELECT PART_ID PARTITIONS WHERE PART_NAME like '%p_date=20170228,p_domain=0%'

+---------+-------------+------------------+--------------------+-------+--------+
| PART_ID | CREATE_TIME | LAST_ACCESS_TIME | PART_NAME          | SD_ID | TBL_ID |
+---------+-------------+------------------+--------------------+-------+--------+
|       7 |  1487237959 |                0 | partition name     |   336 |    329 |
+---------+-------------+------------------+--------------------+-------+--------+


mysql> DELETE FROM PARTITIONS WHERE PART_ID=7;

mysql> DELETE FROM PARTITION_KEY_VALS WHERE PART_ID=7;

mysql> DELETE FROM PARTITION_PARAMS WHERE PART_ID=7;

此Hive应在您的查询中停止使用此分区。