我的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”成功。
我找不到错误日志和控制台消息未出现
我该如何解决这个问题?
我希望你能理解我缺乏英语。
答案 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应在您的查询中停止使用此分区。