#!/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 下面定時執行就可以了。
這只是一個簡單示例,實際應用的場景可能會稍微復雜一些。