1.目的:清理一些hive表中错误的坏分区
2.现象: 再插入hive表的时候不小心传入了'{{yyMMdd}' 这种分区。导致hive中分区格式如下,

3.处理方式
- 无效的删除方式
alter table temp.test drop partition(dt='%7%7yyMMdd}') ; 无效。
- 正确的处理方式:原文删除的方式删除
alter table temp.test drop partition(dt = '{{yyMMdd}');

4.具体原因(暂无时间具体验证):
hive中的存储分区的信息主要在PARTITIONS表里面,用的是mysql数据库,表的操作涉及元数据修改,当删分区的时候,数据库内部会进行转义操作。传入原始值会自动转义匹配到,反之传入转义字符,在mysql会进行二次转义。
RTITIONS、PARTITION_KEYS、PARTITION_KEY_VALS、PARTITION_PARAMS
PARTITIONS:该表存储表分区的基本信息
| 表字段 | 说明 | 示例数据 |
| PART_ID | 分区ID | 10 |
| CREATE_TIME | 分区创建时间 | 1540822222 |
| LAST_ACCESS_TIME | 最后一次访问时间 | 0 |
| PAET_NAME | 分区名称 | dt=201123 |
| SD_ID | 分区存储ID | 40 |
| L_ID | 表ID | 20 |
| LINK_TARGET_ID |
5.部分url字符串对应的编码
backspace %08
tab %09
linefeed %0A
creturn %0D
space %20
! %21
" %22
# %23
$ %24
% %25
& %26
' %27
( %28
) %29
* %2A
+ %2B
, %2C
- %2D
. %2E
/ %2F
0 %30
1 %31
2 %32
3 %33
4 %34
5 %35
6 %36
7 %37
8 %38
9 %39
: %3A
; %3B
< %3C
= %3D
> %3E
? %3F
@ %40
A %41
B %42
C %43
D %44
E %45
F %46
G %47
H %48
I %49
J %4A
K %4B
L %4C
M %4D
N %4E
O %4F
P %50
Q %51
R %52
S %53
T %54
U %55
V %56
W %57
X %58
Y %59
Z %5A
[ %5B
\ %5C
] %5D
^ %5E
_ %5F
` %60
a %61
b %62
c %63
d %64
e %65
f %66
g %67
h %68
i %69
j %6A
k %6B
l %6C
m %6D
n %6E
o %6F
p %70
q %71
r %72
s %73
t %74
u %75
v %76
w %77
x %78
y %79
z %7A
{ %7B
| %7C
} %7D
~ %7E
¢ %A2
£ %A3
¥ %A5
| %A6
§ %A7
« %AB
¬ %AC
¯ %AD
º %B0
± %B1
ª %B2
, %B4
µ %B5
» %BB
¼ %BC
½ %BD
¿ %BF
À %C0
Á %C1
 %C2
à %C3
Ä %C4
Å %C5
Æ %C6
Ç %C7
È %C8
É %C9
Ê %CA
Ë %CB
Ì %CC
Í %CD
Î %CE
Ï %CF
Ð %D0
Ñ %D1
Ò %D2
Ó %D3
Ô %D4
Õ %D5
Ö %D6
Ø %D8
Ù %D9
Ú %DA
Û %DB
Ü %DC
Ý %DD
Þ %DE
ß %DF
à %E0
á %E1
â %E2
ã %E3
ä %E4
å %E5
æ %E6
ç %E7
è %E8
é %E9
ê %EA
ë %EB
ì %EC
í %ED
î %EE
ï %EF
ð %F0
ñ %F1
ò %F2
ó %F3
ô %F4
õ %F5
ö %F6
÷ %F7
ø %F8
ù %F9
ú %FA
û %FB
ü %FC
ý %FD
þ %FE
ÿ %FF
本文介绍了在Hive中如何正确删除含有转义字符的分区。当尝试使用'{{yyMMdd}}'这样的分区时,直接删除分区的操作会失败。解决方法是使用未转义的原始值进行删除,例如alter table temp.test drop partition(dt = '{{yyMMdd}}')。这个问题源于Hive的元数据存储在MySQL中,分区操作涉及数据库级别的转义。
1248





