(Hive版本0.14)
一、问题描述
由于操作失误,生成了一些含有特殊字符的分区,如:
-- 1.插入数据
insert overwirte table test partition(dt)
select col, '%(data_date)s' as dt
from src_test;
-- 2.查看分区
show partitions test;
dt=%25(data_date)s
dt=2020-08-10
dt=2020-08-01
...
当尝试删除它们的时候,发现怎么也不奏效:
-- 尝试1
alter table test drop partition(dt='%25(data_dt)s');
-- 尝试2
set hivevar:temp=%25(data_dt)s;
alter table test drop partition(dt='{temp}');
二、解决方案
1.主要问题
(1)分区值格式:Hive分区对应Hdfs中的文件目录,因此分区值格式必须符合Hdfs路径格式(Java的URI)。当URI中有特殊字符时(如,'%',':','/','#'),将以其转义编码存储。(%+2个字节的ASDII值),如:
字符 | URI编码值 |