定期删除Hive表的过期数据

定期删除Hive表的过期数据

由于Hive中有很多表都是每日全量的,数据量比较大,有些是可以将过去历史分区的数据进行删除的,所以需要一个定时执行的脚本,定时删除前七天的过期数据。

注:此脚本只针对分区字段为日期类型

#/bin/bash

today=$(date +%Y-%m-%d)
today_timestamp=$(date -d "$today" +%s)
echo "获取今天日期:$today,今日日期的时间戳:$today_timestamp"
detele_day=$(date -d "7 days ago" +%Y-%m-%d)
detele_day_timestamp=$(date -d "$detele_day" +%s)
echo "获取60天前日期:$detele_day,60天前日期的时间戳:$detele_day_timestamp"
hdfs_directorys=(
  /apps/hive/warehouse/某个库/某个表/
)

for hdfs_directory in ${hdfs_directorys[@]}; do
  echo "当前要删除的hdfs路径为:${hdfs_directory}"
  for hdfs_directory_p_day in $(sudo -u hdfs hdfs dfs -ls ${hdfs_directory} | awk 'BEGIN{FS=" "}{print $8}'); do
    p_day=$(echo $hdfs_directory_p_day | awk 'BEGIN{FS="="}{print $2}')
    p_day_timestamp=$(date -d "$p_day" +%s)
    echo "当前文件夹分区日期为:$p_day, 当前文件夹分区日期时间戳为:$p_day_timestamp"
    if [ $p_day_timestamp -lt $detele_day_timestamp ]; then
      echo "该HDFS的目录即将被删除,路径为:$hdfs_directory_p_day"
      sudo -u hdfs hadoop dfs -rm -r -skipTrash $hdfs_directory_p_day
    else
      echo "该HDFS的目录处于正常周期内不会被删除,路径为:$hdfs_directory_p_day"
    fi
  done
done
echo "程序运行完成"

你可能感兴趣的:(定期删除Hive表的过期数据)