Hive删除分区名称中含有特殊字符
先说方案:通过show partitions和hdfs url看到的都不是真正的分区名称,都是经过URI重新编码的,访问这些分区应该使用分区名称的原始字符串。
场景描述
当我们在SQL语句中使用变量时,很可能因为操作不当,导致变量并没有被替换掉,而是被直接当作分区名称。
查看分区信息
show partitions tableA;
ymd=$%25257Benv%25253ADATE_BEFORE_1DAY}
ymd=$%257Benv%253ADATE_BEFORE_1DAY}
ymd=$%7Benv%3ADATE_BEFORE_1DAY}
删除分区
alter table tableA drop partition (ymd='$%25257Benv%25253ADATE_BEFORE_1DAY}'); # 实际未删除
alter table tableA drop partition (ymd="$%25257Benv%25253ADATE_BEFORE_1DAY}"); # 实际未删除
alter table tableA drop partition (ymd='$%257Benv%253ADATE_BEFORE_1DAY}'); # 实际删除ymd=$%25257Benv%25253ADATE_BEFORE_1DAY}
alter table tableA drop partition (ymd='$%7Benv%3ADATE_BEFORE_1DAY}'); # 实际删除ymd=$%257Benv%253ADATE_BEFORE_1DAY}
原因
分区字段中含有特殊字符时,将会被(根据URI编码规范)重新编码,所以上面show partition时看到的分区名称是经过重新编码的,删除时我们需要使用原始值。
| 字符 | 编码后 |
|---|---|
| % | %25 |
| : | %3A |
| { | %7B |
| # | %23 |
所以,上面的分区原始值是
ymd=$%257Benv%253ADATE_BEFORE_1DAY}
ymd=$%7Benv%3ADATE_BEFORE_1DAY}
ymd=${env:DATE_BEFORE_1DAY}
三个分区从下往上,依次是作为分区字符串再次覆盖写入数据时,{和%被再次转义的结果。所以drop语句是
alter table tableA drop partition (ymd='$%257Benv%253ADATE_BEFORE_1DAY}');
alter table tableA drop partition (ymd='$%7Benv%3ADATE_BEFORE_1DAY}');
alter table tableA drop partition (ymd='$\{env:DATE_BEFORE_1DAY}'); # {必须被转义,否则${}会将后边的内容识别成变量
注意
- 只需要重新编码一次,当出现连续%2525时,仅处理第一个%25,不要连续处理
查看分区对应的HDFS存储路径
DESCRIBE FORMATTED tableA PARTITION(ymd='$%257Benv%253ADATE_BEFORE_1DAY}'); # 对应 show partitions 结果ymd=$%25257Benv%25253ADATE_BEFORE_1DAY}
| col_name | data_type |
|---|---|
| # Detailed Partition Information | NULL |
| Partition Value: | [$%257Benv%253ADATE_BEFORE_1DAY}] |
| Location: | hdfs://nssit/user/hive/warehouse/bs_core/tableA/ymd=$%25257Benv%25253ADATE_BEFORE_1DAY} |
DESCRIBE FORMATTED tableA PARTITION(ymd='$\{env:DATE_BEFORE_1DAY}'); # 对应 show partitions 结果ymd=$%7Benv%3ADATE_BEFORE_1DAY}
| col_name | data_type |
|---|---|
| # Detailed Partition Information | NULL |
| Partition Value: | [${env:DATE_BEFORE_1DAY}] |
| Location: | hdfs://nssit/user/hive/warehouse/bs_core/tableA/ymd=$%7Benv%3ADATE_BEFORE_1DAY} |
Hive删除分区名称中含有特殊字符的更多相关文章
- Hive删除分区
Hive删除分区语句: alter table table_name drop if exists partition(dt=30301111)
- 微信小程序传递URL中含有特殊字符
小程序传递URL中含有特殊字符"="时,解决办法:先encodeURIComponent,取到值以后再decodeURIComponent 首先在A页面 var urls = en ...
- ajax请求参数中含有特殊字符"#"的问题 (另附上js编码解码的几种方法)
使用ajax向后台提交的时候 由于参数中含有# 默认会被截断 只保留#之前的字符 json格式的字符串则不会被请求到后台的action 可以使用encodeURIComponent在前台进行编码, ...
- Oracle更新表字段时内容中含有特殊字符&的解决方法
今天在做 Oracle表字段更新时出现了特殊字符&,导致无法更新. 这个问题是第二次碰到了,所以在此记录下,以备后用. 举例: update t set col1='A&B' wher ...
- Oracle密码中含有特殊字符时exp,imp的使用
今天通过exp迁移Oracle 数据,由于密码含有很有很多特殊字符,弄了好久,都没成功,后发在网上找到方法. 1 exp用法Linux 下(密码用一对双引号, 整体userid用对单引号括住)exp ...
- hive 删除分区数据
alter table 表 drop partition(分区); 例: 表是: user_all_info 分区是 day_id,month_id 我要删除10月10号的数据 那么: alter ...
- linux sed 替换,使用变量,变量中含有特殊字符的处理
文件 test.sh 内容如下: #!/bin/bash export JAVA_HOME=/data/jdk_1.9.0 echo $JAVA_HOME 想把 JAVA_HOME = 后面的内容替换 ...
- swift 网络请求中含有特殊字符的解决方案
在网络请求时,URL出现中文或特殊字符时会造成请求失败,通常可使用 addingPercentEncoding(withAllowedCharacters: CharacterSet) 方法进行解决 ...
- JQuery对id中含有特殊字符的转义处理
转载--http://www.jb51.net/article/41192.htm <div id="a[]">kkkkkk</div> <scrip ...
- url编码--url中含有空格问题
开发web服务中,发现当url中含有空格时,会报 400 error: bad request sytanx,经分析,url中含有特殊字符时,服务端可能无法识别.如+,空格,/,?,%,#,& ...
随机推荐
- Python用yield form 实现异步协程爬虫
很古老的用法了,现在大多用的aiohttp库实现,这篇记录仅仅用做个人的协程底层实现的学习. 争取用看得懂的字来描述问题. 1.什么是yield 如果还没有怎么用过的话,直接把yield看做成一种特殊 ...
- 【iOS逆向】某茅台App算法分析还原
1.目标 某茅台软件的actParam算法分析还原. 2.使用工具 mac系统 frida-ios-dump:砸壳 已越狱iOS设备:脱壳及frida调试 IDA Pro:静态分析 Charles:抓 ...
- layui table表格使用table.resize()方法 重置表格尺寸
解决 使用layui中的table表格重置表格尺寸 问题 表格的高度共有两种写法 相对应的就有两种解决方法 第一种 当表格高度设置为固定高度时,改变表格高度使用 tableIns=table.rend ...
- c++ *和& 指针,取内容,别名,取地址
*前面有类型符时为定义指针 &前面有类型符时为定义引用变量(别名) (int ,float,long,double,char等 ) *p:定义xx类型的指针 int *p 整型指针,char ...
- 更改HTML请求方式的几种方法
以ctfhub中的请求方式题目为例,则可以有: 法一:通过burpsuite抓包修改 在burpsuite中抓包后发送到repeater模块中,对请求方式进行修改即可 法二:通过curl命令进行 cu ...
- 【Java SE】Day05数组
一.数组的定义和访问 1.初始化 动态new int[10];--默认值 静态new int[]{1,2,3};,省略为{1,2,3}; 2.访问 长度arr.length属性(数组的属性) 打印数组 ...
- 【JVM调优】Day01:Garbage的概念、垃圾回收的算法(标记清除、拷贝、标记压缩)、各种垃圾回收器(Serial、Parallel、CMS并发)及存在的问题
〇.前言 简历写上:熟悉GC常用算法,熟悉常见垃圾回收器.具有实际JVM调优实战经验 瞬间涨3k 一.什么是garbage Java中垃圾回收器自动进行垃圾回收,不用自己回收 new 对象在内存中,c ...
- 图解B树及C#实现(1)
目录 前言 索引原理 局部性(Locality) 数据的局部性 内存存储和磁盘存储 磁盘存储适合的索引结构 B树简介 定义 B树中数据的有序性 用C#定义数据结构 插入数据的过程 分裂:新节点诞生的唯 ...
- 自定义RBAC(4)
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 前面把RBAC的权限系统设计过程都讲清楚了,现在就来实现它.大致分这么几个步骤: 1.先定义出完整的权限系统表结构: 2.实现Entity.Da ...
- Ubuntu 22.04 LTS 安装 0.A.D 实时策略游戏 并汉化
众所周知,Linux生态中,能玩的正儿八经的大型游戏其实没几个,而 0.A.D 这个游戏就是这其中之一.这是一个类似于帝国时代的实时策略游戏,开源跨平台,这是其官方网站:https://play0ad ...