在hive外执行hql文件并传参
hql文件执行
使用shell脚本,根据时间区间遍历执行hql文件
hql脚本
脚本名:test.hql
SET hivevar:newDay;
INSERT OVERWRITE TABLE dwd.a partition(ss_dt="${hivevar:newDay}")
select loan_number,card_id,name,loan_contract_num,loan_date,loan_amt
from ods.a
where ss_dt="${hivevar:newDay}";
手动在hive外执行hql脚本并传参:
hive --hivevar newDay=20230426 -f ./test.hql
不可以使用 -hiveconf newDay=20230426方式传参,会出现表分区错误,出现分区ss_dt=“$%7BnewDay}”,删除分区代码为
alter table dwd.test drop if exists partition(ss_dt="${newDay}");
# 查看表分区
show partitions dwd.test;
注意:"${newDay}"的引号必须为双引号
参考网址:hive 分区含特殊符号 $%删除方式
shell脚本run.sh
#!bin/bash
#声明i为数值
declare -i i=0
for (( i=0; i<=21; i++ ))
do
# 起始时间
dt="20221124"
# 循环一次往前加一天
ydy_dt=$(date -d "$dt +$i day" +"%Y%m%d")
echo hive -hiveconf newDay=$ydy_dt -f ./test.hql
hive --hivevar newDay=$ydy_dt -f ./test.hql
done
间隔天数可以在hive中求得
SELECT datediff("2022-11-24","2023-01-04");
执行shell脚本
bash ./run.sh
如果时间间隔过长,可以多开几个窗口,分配时间段并行执行shell脚本
参考内容:
1:Hive的hql命令的三种执行方式
2:shell脚本语言(超全超详细)