由于hive执行过程中参数必须写死,无法进行传递参数。利用shell脚本和java编程进行解决

#!/bin/sh
#date = `date -d -1days '+%Y-%m-%d'`
if [ $# = "1" ]; then
date=$1
else
date=`date -d -1days '+%Y-%m-%d'`
fi

echo $date

#如果没传递参数的话,拿到前一天的时间

cd /opt/cloudy/program/rpt_sale_daily

#打开指定目录
hiveF ./rpt_sale_daily.hql -date $date

#执行hiveF 进行数据分析和抽取

hive2mysql ./aa.property -date $date

#把抽取的数据加载到mysql数据库中

 

 

其中hiveF 和hive2mysql是利用java进行开发

(hiveF ./rpt_sale_daily.hql -date $date)

在hiveF中,java读取此hql脚本进行替换date字符,然后执行


sql=`java -jar /opt/cloudy/lib/hiveF.jar $*`

#执行java拿到sql命令
echo $sql
hive -e "$sql" -i /opt/cloudy/bin/hiveF-init.sql

#hive -e 在shell命令行中执行hive命令 -i用于传递UDF

 

(hive2mysql ./aa.property -date $date)

java -jar /opt/cloudy/lib/hive2mysql.jar $*

#执行jar命令替换参数并且在java中执行hive和mysql命令

 

理解:其中核心在hiveF和hive2mysql的理解 hiveF负责分析本地HDFS的文件落地到hive得到数据结果 hive2mysql用于把hive数据转移到mysql中 (-i用于更好的管理UDF文件)
~