业务场景:每天都有日志而且每小时都有日志,将日志按照小时存储
Acccess_log/20190528/2019052800.log
2019052801.log
2019052802.log
#!/bin/bash
YESTERDAY = $(date -d "-1 days"+%Y%m%d)
ACCESS_LOG_DIR=/data/access_log/$YESTERDAY
HIVE_HOME=/opt/app/apache-hive-1.2.1-bin
echo $ACCESS_LOG_DIR
#加载数据
for FILE in $(ls $ACCESS_LOG_DIR)
do
# FILE = 2019052800.log
DAY=${FILE:0:8}
HOUR=${FILE:8:2}
$HIVE_HOME/bin/hive -e "load data local inpath '$ACCESS_LOG_DIR/$FILE' into table web_log partition(day='$DAY',hour='$HOUR');"
done
$HIVE_HOME/bin/hive 这个shell 命令是通向包括命令行界面(CLI)等Hive服务的通道。
-e 不进入hive,而去执行hive命令
DAY=${FILE:0:8} FILE从第零位开始截取,截取长度为8的字符,并将此变量赋给DAY
${ }用于变量替换。一般情况下,$var 与${var} 并没有啥不一样。但是用 ${ } 会比较精确的界定变量名称的范围
在 bash shell 中,$( ) 与` ` (反引号) 都是用来做命令替换用(commandsubstitution)的。