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中含有特殊字符时,服务端可能无法识别.如+,空格,/,?,%,#,& ...
随机推荐
- letcode刷题记录-day03-罗马转整数
题目 罗马转整数 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 ...
- mycat搭建
搭建mycat 一.准备工作 1.确保jdk已安装成功,并且jdk版本选用1.7以上版本 2.准备一台新的主机mysql_mycat放到master的前面做代理 mycat ip 192.168.23 ...
- SpringCloud(七) - 微信支付
1.开发文档 微信开发文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1 安全规范:https://pay.weixin.q ...
- uniapp之uni-starter小程序多端研发框架搭建与项目实践
随着移动互联网的飞速发展,无数移动APP琳琅满目:在移动App的发展的基础上,衍生了小程序.轻应用技术,它随时可用,但又无需安装卸载.小程序是一种不需要下载安装即可使用的应用,它实现了应用" ...
- day01-Tomcat框架分析
引入课程和Maven 1.Maven maven中央仓库:Maven Repository: Search/Browse/Explore (mvnrepository.com) maven仓库是国外的 ...
- 2022-11-01 Acwing每日一题
第k个数 给定一个长度为 n 的整数数列,以及一个整数 k,请用快速选择算法求出数列从小到大排序后的第 k 个数. 输入格式 第一行包含两个整数 n 和 k. 第二行包含 n 个整数(所有整数均在 1 ...
- 工作总结:kafka踩过的坑
餐饮系统每天中午和晚上用餐高峰期,系统的并发量不容小觑.公司规定各部门都要轮流值班,防止出现线上问题时能够及时处理. 后厨显示系统属于订单的下游业务. 用户点完菜下单后,订单系统会通过发 Kafka ...
- 12、求Sn = a + aa + aaa + aaaa + ....其中a为一个数字,一共有n项。a和n由用户键盘输入。
/* 求Sn = a + aa + aaa + aaaa + ....其中a为一个数字,一共有n项.a和n由用户键盘输入. */ #include <stdio.h> #include & ...
- 数据结构初阶--顺序表(讲解+C++类模板实现)
顺序的概念与结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储.在数组上完成数据的增删查改. 一般分为两种:静态顺序表和动态顺序表 静态顺序表 #define ...
- Visual Studio高版本 ArcObject for .Net 低版本
在基于ArcGIS的开发中,经常会存在Visual Studio版本高,ArcObject for .Net 版本低的问题.例如Visual Studio 2015的环境下,安装ArcObject f ...