【发布时间】:2021-09-06 07:30:02
【问题描述】:
我有一个配置文件。第一列是作业名称,其余列是与该作业关联的表。现在我正在阅读第一行。它将在 .现在我想循环这些表并创建一个 HQL 查询。我的代码的问题是表作为列表存储在变量中,当我执行 unset 命令时,它会抛出错误。任何人都可以帮助我哪里出错了。下面是配置文件、代码和所需的输出。
job1,tbl1,tbl2,tbl3
job2.tbl4,tbl5,tbl6
job3,tbl7,tbl8,tbl9
下面是我正在尝试的代码
#!/bin/bash
while read line; do
job_name=$(echo "$line"|awk 'BEGIN{FS=","}{print $1}')
echo "JobName is $job_name"
tablestring=${line#"$job_name"}
for table in ${tablestring//,/ }; do
echo "$table"
done
hql="select $table as table_name, max(cycle_Date) as AS_OF_dATE FROM DB1.$table "
unset tablestring[0]
for tbl in "${tablestring[@]}"
do
hql+=$'\n'
hql+="union all select $tbl as table_name, max(cycle_Date) as AS_OF_dATE FROM DB1.$tbl"
hql+=";"
echo "$hql" >query.hql
done
done < a.configuration
以下是我希望在第一次迭代中为作业 1 以及随后为作业 2 实现的所需输出,依此类推..
select tbl1 as table_name, max(cycle_Date) as AS_OF_dATE FROM DB1.tbl1
union all select tbl2 as table_name, max(cycle_Date) as AS_OF_dATE FROM DB1.tbl2
union all select tbl3 as table_name, max(cycle_Date) as AS_OF_dATE FROM DB1.tbl3;
【问题讨论】:
-
好吧,“tablestring”不是这个脚本中的数组。问题:您控制/编写配置文件还是由另一个进程生成?,您对 query.hql 的期望是什么……只有一个选择语句(因此每个作业 1 个文件)或所有作业的所有选择语句?最后,除了脚本运行时的显示之外,您似乎没有使用作业名称......我是对的吗?
-
@AndreGelinas .. 我写了配置.. 是正确的.. 为每个作业单独的 query.hql .. 将执行 hql 文件并将其删除.. 稍后需要生成另一个 query.hql对于具有所需表的另一个作业..作业名称仅用于显示
标签: linux shell unix hive scripting