首页 > 其他分享 >Hive删除分区名称中含有特殊字符

Hive删除分区名称中含有特殊字符

时间:2023-01-11 10:24:39浏览次数:44  
标签:分区 drop Hive 1DAY tableA ymd 特殊字符 BEFORE

先说方案:通过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}

标签:分区,drop,Hive,1DAY,tableA,ymd,特殊字符,BEFORE
From: https://www.cnblogs.com/aaronking/p/17041092.html

相关文章

  • SparkSQL与Hive查询不一致问题
    问题Sparksql查询出的数据量与hive不一致,重启spark就没问题,查询结果一致。或者报错说读取的文件不存在,类似如下的错误FileReadException:Errorwhilereadingfilexxx.......
  • Hive 刷题——查询各品类销售商品的种类数及销量最高的商品
    需求描述从订单明细表(order_detail)统计各品类销售出的商品种类数及累积销量最好的商品,需要用到的表订单明细表:order_detailorder_detail_id(订单明细id)order_id(......
  • 管理(划分)分区
    管理工具列出块设备lsblk显示UUID和文件系统lsblk-f[root@rocky8~]#lsblkNAMEMAJ:MINRMSIZEROTYPEMOUNTPOINTsda8:00200G0d......
  • HIVE简单操作命令
    beelinebeeline>!connectjdbc:hive2://192.168.2.2:10000hdfs回车回车直接用默认表,不需要配置权限createtablest(idint,namestring)rowformatdelimitedfieldster......
  • 磁盘分区方式
    分区可以把服务器上的数据做物理上的隔离MBR分区MasterBootRecord主引导记录一个分区的最大容量为2T,硬盘不能超过2T最多有四个分区:情况1:四个主分区情况2:三个主......
  • 大数据面试杀招——Hive高频考点,就怕你都会!
       上一篇文章介绍了3道常见的SQL笔试题,反响还算是不错。于是乎,接下来的几天,菌哥将每天为大家分享一些关于大数据面试的杀招,祝小伙伴们都能早日找到合适的工作~一、什......
  • 【转载】ALTER SYSTEM SWITCH LOGFILE 意义与作用及与ALTER SYSTEM ARCHIVE LOG CURRE
    一、ALTERSYSTEM SWITCHLOGFILEClauseSWITCHLOGFILE子句允许您明确强制Oracle开始写入新的重做日志文件组,而不管当前重做日志文件组中的文件是否已满。当您强制......
  • 2022 CISCN西北赛区分区赛
    MagicProxyssrf重定向绕过<?phpheader("Location:http://127.0.0.1:8080/admin?command=curl%20-F%20file=@/flag.txt%20http%3A%2F%2F82.157.174.226%3A8888");exit;......
  • MTK分区说明
    @目录简介前言什么是RAM和ROM运行内存RAM手机存储ROM分区对应文件及作用分区的大小分配ckImgSize.logckSysDrv.log分配空间简介MTK分区说明前言对于MTK项目,刚开始领到......
  • SQL Server【提高】分区表
    分区表分区视图分区表可以从物理上将一个大表分成几个小表,但是从逻辑上来看,还是一个大表。什么时候需要分区表数据库中某个表中的数据很多。数据是分段的分区......