先说方案:通过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删除分区名称中含有特殊字符的更多相关文章

  1. Hive删除分区

    Hive删除分区语句: alter table table_name drop if exists partition(dt=30301111)

  2. 微信小程序传递URL中含有特殊字符

    小程序传递URL中含有特殊字符"="时,解决办法:先encodeURIComponent,取到值以后再decodeURIComponent 首先在A页面 var urls = en ...

  3. ajax请求参数中含有特殊字符"#"的问题 (另附上js编码解码的几种方法)

    使用ajax向后台提交的时候 由于参数中含有#  默认会被截断 只保留#之前的字符  json格式的字符串则不会被请求到后台的action 可以使用encodeURIComponent在前台进行编码, ...

  4. Oracle更新表字段时内容中含有特殊字符&的解决方法

    今天在做 Oracle表字段更新时出现了特殊字符&,导致无法更新. 这个问题是第二次碰到了,所以在此记录下,以备后用. 举例: update t set col1='A&B' wher ...

  5. Oracle密码中含有特殊字符时exp,imp的使用

    今天通过exp迁移Oracle 数据,由于密码含有很有很多特殊字符,弄了好久,都没成功,后发在网上找到方法. 1 exp用法Linux 下(密码用一对双引号, 整体userid用对单引号括住)exp ...

  6. hive 删除分区数据

    alter table 表 drop partition(分区); 例: 表是:  user_all_info 分区是 day_id,month_id 我要删除10月10号的数据 那么: alter ...

  7. linux sed 替换,使用变量,变量中含有特殊字符的处理

    文件 test.sh 内容如下: #!/bin/bash export JAVA_HOME=/data/jdk_1.9.0 echo $JAVA_HOME 想把 JAVA_HOME = 后面的内容替换 ...

  8. swift 网络请求中含有特殊字符的解决方案

    在网络请求时,URL出现中文或特殊字符时会造成请求失败,通常可使用  addingPercentEncoding(withAllowedCharacters: CharacterSet) 方法进行解决 ...

  9. JQuery对id中含有特殊字符的转义处理

    转载--http://www.jb51.net/article/41192.htm <div id="a[]">kkkkkk</div> <scrip ...

  10. url编码--url中含有空格问题

    开发web服务中,发现当url中含有空格时,会报 400 error: bad request sytanx,经分析,url中含有特殊字符时,服务端可能无法识别.如+,空格,/,?,%,#,& ...

随机推荐

  1. 通过jmeter,将数据库数据查询出来并打印

    1. 连接数据库 1.1 添加jdbc驱动路径 1.2 JDBC Connection Configuration    1.3 JDBC Request 2. 查询数据库数据并打印 2.1 定义变量 ...

  2. 「Python实用秘技11」在Python中利用ItsDangerous快捷实现数据加密

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第11 ...

  3. Webpack前端源码泄露漏洞

    什么是Webpack? webpack是一个打包器(bundler),它能将多个js.css.json等文件打包成一个文件.这样可以使复杂的各种加载文件集合为整合为单一的集合,让代码更加模块化便于编程 ...

  4. Jenkinsfile 同时检出多个 Git 仓库

    前置 通常,在 Jenkinsfile 中使用 Git 仓库是这样的: stage('Checkout git repo') { steps { checkout([ $class: 'GitSCM' ...

  5. pytest文档82 - 用例收集钩子 pytest_collect_file 的使用

    前言 pytest 提供了一个收集用例的钩子,在用例收集阶段,默认会查找test_*.py 文件或者 *_test.py文件. 如果我们想运行一个非python的文件,比如用yaml 文件写用例,那么 ...

  6. 重学c#系列——枚举[二十三]

    前言 该系列继续更新,枚举介绍. 正文 首先呢,枚举是值类型,这个没什么好说的. enum ConnectionState { DisConnected, Connecting, Connected, ...

  7. i春秋时间

    打开题目就是一段php代码 大致的意思是 ------------------------------------------------------------------------------- ...

  8. 学习ASP.NET Core Blazor编程系列十五——查询

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  9. 4.7:Hive操作实验

    〇.概述 1.拓扑结构 2.目标 通过Hive实验熟悉Hive的基本操作 一.操作流程 1.启动环境 2.启动hive 输入 cd /home/user/bigdata/apache-hive-2.3 ...

  10. python 之将xmind转为excel用例文件

    1.xmind文件模板如下所示(最后一个子级为预置条件) 2.excel用例模板 3.获取xmind文件数据并转成字典形式 from xmindparser import xmind_to_dict ...