改版通知

巨人肩膀网站已全新改版。若您仍依赖旧站功能或数据,欢迎联系我们,我们会协助处理。联系我们

Shell脚本-表数据覆盖重写方式合并Hive表小文件

海星之梦2024年7月22日1 回答256 浏览

Hive表小文件合并-表数据覆盖重写:

tablename=$1 #带库名的表面
dateStr=$2 #需要过滤的分区子字符串

# 列出所有分区进行grep分区
for i in `hive -e "show partitions $tablename" | grep $dateStr`
do
        partitionKey1=`echo "$i"|awk -F '/' '{print $1}'|awk -F '=' '{print $1}'`
        partitionValue1=`echo "$i"|awk -F '/' '{print $1}'|awk -F '=' '{print $2}'`
        partitionKey2=`echo "$i"|awk -F '/' '{print $2}'|awk -F '=' '{print $1}'`
        partitionValue2=`echo "$i"|awk -F '/' '{print $2}'|awk -F '=' '{print $2}'`
        echo "$i $partitionKey1 $partitionValue1 $partitionKey2 $partitionValue2"
        #例分区字符串是:sample_date=20211201/partition_name=0 则输出是:sample_date 20211201 partition_name 0

        sqlstr="insert overwrite table  $tablename  select * from $tablename where $partitionKey1='$partitionValue1' and $partitionKey2='$partitionValue2';"

        echo "set hive.execution.engine=tez; set hive.merge.mapredfiles=true; $sqlstr"

        hive -e "$sqlstr"

done

启动命令:

./mergeSmallFileByHiveOverwrite.sh 库名.表名 过滤字符串

后台进程启动

nohup ./mergeSmallFileByHiveOverwrite.sh 库名.表名 过滤字符串  > mergeSmallFileByHiveOverwrite.out 2>&1 &