【发布时间】:2022-01-03 06:29:20
【问题描述】:
我在 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 更受欢迎。
感谢您的宝贵意见。
【问题讨论】:
标签: apache-spark hadoop hive database-partitioning