首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Hadoop HDFS中删除多级分区

如何在Hadoop HDFS中删除多级分区
EN

Stack Overflow用户
提问于 2019-12-13 14:52:26
回答 1查看 371关注 0票数 0

有一个多级分区的Hive表,现在需要删除比某些年份旧的分区文件夹。

多级分区如下所示。

代码语言:javascript
复制
 /data/warehouse/suite/catalyst/site/company=abc/year=2019/month=08
 /data/warehouse/suite/catalyst/site/company=cde/year=2018/month=05
  /data/warehouse/suite/catalyst/site/company=cde/year=2017/month=11
 /data/warehouse/suite/catalyst/site/company=cde/year=2016/month=11

如果要删除超过2年的分区,意味着需要删除/year=2017/month=11和year=2016/month=11。

请帮忙,提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-13 15:21:48

代码语言:javascript
复制
ALTER TABLE mytable drop if exists partition (year<='2017')

您不能像预期的那样控制分区删除

您可以使用更可靠的unix方式进行尝试。

代码语言:javascript
复制
 hive -S -e "show partitions test" > tmp.txt
curr_year=`expr "$(date +'%Y')" - "2"`
curr_mon=`expr "$(date +'%m')" - "1"`

cur_part=$curr_year$curr_mon

cur_part=201812
echo $cur_part


#echo "year=2016/month=12" | cut -d '=' -f 2 | grep -o -E '[0-9]+'
#echo "year=2016/month=12" | cut -d '=' -f 4 | grep -o -E '[0-9]+'

while read -r line
do
  part_year=`echo $line | cut -d '=' -f 2 | grep -o -E '[0-9]+'`
  part_mon=`echo $line | cut -d '=' -f 3 | grep -o -E '[0-9]+'`
  part_part=$part_year$part_mon
  echo $part_part

if [[ $part_part -lt $cur_part ]]
    then
    echo "$part_year , $part_mon"
    hive --hivevar year="$part_year" --hivevar month="$part_mon" -e 'ALTER TABLE test DROP IF EXISTS PARTITION (year="${hivevar:year}", month="${hivevar:month}")'

  fi


done < tmp.txt


    > show partitions test;
OK
year=2016/month=12
year=2017/month=11
year=2017/month=12
year=2018/month=12

> show partitions test;
OK
year=2017/month=12
year=2018/month=12

我已经测试过了,它工作正常

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59317499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档