我在hive中遇到hive默认分区(空分区)的问题。 我将在这里简要解释一下情况。我有一个配置单元主表,每天都会在该表中发生数据摄取。但不知何故,当数据被摄入到hive表中时出现问题并且分区显示_hive_default_partition_或者在我的理解中它是空分区。
我需要从hive表中删除分区。 (这是外部表)......
我正在使用hive版本1.1和CDH版本5.4.8 ..
我尝试了以下语法,但它对我不起作用..
alter table "tablename" drop partition(partn='_hive_default_partition_);
alter table "tablename" drop partition(partn<'1');
alter table "tablename" drop partition(partn = 1);
alter table "tablename" drop partition(partn='0');
我尝试了以上所有步骤,但没有任何效果。
希望有人能帮助我。
提前致谢,
答案 0 :(得分:4)
对我有用的方法是更改分区列的数据类型,删除分区并将其更改回来。
考虑到您正在将分区与问题中的int进行比较,我假设这是要从头开始的列数据类型,但无论您从哪个数据类型开始,这都应该有效。
-- Change the column type to string
ALTER TABLE tablename PARTITION COLUMN (partn STRING);
-- Drop the offending partitions
ALTER TABLE tablename DROP PARTITION (partn='__HIVE_DEFAULT_PARTITION__');
-- Change the column type back to int
ALTER TABLE tablename PARTITION COLUMN (partn INT);
答案 1 :(得分:0)
只需从hdfs中删除目录并运行msck修复表。
来自shell:hadoop fs -rm -r ..../partn=__HIVE_DEFAULT_PARTITION__
来自hive shell:msck repair table table_name;
答案 2 :(得分:0)
我分三步实现了
hadoop fs -rm -r -skipTrash /apps/hive/warehouse/<db-name>/<table-name>/<partition-name>=__HIVE_DEFAULT_PARTITION__
打开hive客户端并运行
set hive.msck.path.validation=ignore;
在配置单元客户端中运行
MSCK REPAIR TABLE <db-name>.<table-name>;
答案 3 :(得分:0)
尝试一下:
alter table `tablename` drop if exists partition (partn<>'');