![](/img/trans.png)
[英]Null Pointer Error while doing “alter table table_name drop partition(part_column < value)” on Hive CLI
[英]Hive, how to drop partition, Error while compiling statement: FAILED: expecting set null in drop partition statement
我在 Hive 中有一个表,我想删除它的分区键,以便以后使用其他分区键。
parquet 文件的位置在 Amazon S3 中。 我正在处理的表按 date_year 和 date_month 列进行分区。 共有143个分区。 现在我试图通过执行以下命令来删除分区:
Alter Table `my_hive_db`.`my_table`
Drop PARTITION (`date_year` , `date_month` );
但是,我收到此错误:
编译语句时出错:FAILED: ParseException line 48:28 mismatched input ','期望在 drop partition 语句中设置 null。
如果有帮助,我的表定义如下:
CREATE External Table `my_hive_db`.`my_table`(
`col_id` bigint,
`result_section__col2` string,
`result_section_col3` string ,
`result_section_col4` string,
`result_section_col5` string,
`result_section_col6__label` string,
`result_section_col7__label_id` bigint ,
`result_section_text` string ,
`result_section_unit` string,
`result_section_col` string ,
`result_section_title` string,
`result_section_title_id` bigint,
`col13` string,
`timestamp` bigint,
`date_day` string
)
PARTITIONED BY (
`date_year` string,
`date_month` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
's3a://some/where/in/amazon/s3';
最重要的是,我真的不想删除底层文件。 我只想删除分区键,以便稍后我可以使用不同的列组合重新分区表。 问题是如何更改表,删除分区,但仍将表中的分区键保留为普通列。
我愿意通过 Hive 或 Spark 来实现这一点。 但是,在这个阶段更优选Hive。
感谢您的宝贵意见。
我认为您不能根据不同的列重新分区 hive 表。 因为分区映射到HDFS中的物理文件夹,不能按需重新分配。
所以,唯一的选择是——
或者,您可以使用新分区创建一个新表并从旧表插入,然后删除旧表并重命名新表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.