用 shell 脚本自动给 hive 表添加分区加载数据

#!/bin/bash

#自动加载前一天的离线数据

#获得前一天的日期

yesterday=`date -d "-1 day" +%Y%m%d`

#定义变量,给定数据文件的路径
access_log_dir=/opt/datas/test_hive_access_logs/${yesterday}

#给出 hive 的安装目录
HIVE_HOME=/opt/moudles/apache-hive-0.13.1-bin

#统计文件夹下文件的个数。其实是想判断一下文件夹是不是为空。
count=`ls ${access_log_dir} | wc -l`

#文件夹目录存在,并且目录不为空,执行逻辑,加载数据。

if [ -d ${access_log_dir} -a ${count} -gt "0" ]; then
echo "${count} files exists."
for file in `ls ${access_log_dir}`
do
day=${file:0:8}
hour=${file:8:2}
echo "${day} : ${hour}"

# hive 表是一个二级分区表,一级分区是日期,二级分区是小时。
${HIVE_HOME}/bin/hive -e "load data local inpath '${access_log_dir}/${file}' into table load_to_hive.load_to_hive_test partition(date='${day}',hour='${hour}')"
done
else

#目录不存在,或者目录是空的,就不执行加载动作了。
echo "directory : ${access_log_dir} does not exists."
echo "${count} files exists."
fi

有了这个脚本之后,只要把它挂在 crontab 下面定时执行就可以了。

这只是一个简单示例,实际应用的场景可能会稍微复杂一些。

原文地址:https://www.cnblogs.com/rabbit624/p/10677229.html