shell 脚本通过 sql 查询传递列表中的元素
shell script to pass element in a list over a sql query
我有一个参数 $tbl,它包含表列表。例如 (tbl1 tbl2 tbl3)。
现在,根据我的 shell 脚本,我是 运行 如下所示的配置单元查询。
hive -e " select min(column_name) from db.tbl1
union all select min(column_name) from db.tbl2
union all select min(column_name) from db.tbl3 " > a.txt
现在脚本中的列表可能会有所不同,即如果有时它是 3 个表,那么在下一次迭代中变量可能会存储 4 个表。任何人都可以建议如何对查询进行参数化,以便它将获取中的所有值列表并将其传递到配置单元查询中。
给你:
#!/bin/bash
table=(tbl1 tbl2 tbl3)
# The select takes the 1st table
sql="select min(column_name) from ${table[0]}"
# Remove 1st table
unset table[0]
# Add union statements
for T in ${table[@]}
do
sql+=$'\n'
sql+="union all select min(column_name) from db.$T"
done
sql+=";"
echo "$sql"
结果是:
select min(column_name) from tbl1
union all select min(column_name) from db.tbl2
union all select min(column_name) from db.tbl3;
- 第一个table用于
select
。
- 一旦使用,就会从数组中移除。
- 然后在剩余的 table 上循环,用于
union
语句。
- 最后在末尾添加
;
。
如果您的查询发生变化,您可以根据需要进行调整。
我有一个参数 $tbl,它包含表列表。例如 (tbl1 tbl2 tbl3)。 现在,根据我的 shell 脚本,我是 运行 如下所示的配置单元查询。
hive -e " select min(column_name) from db.tbl1
union all select min(column_name) from db.tbl2
union all select min(column_name) from db.tbl3 " > a.txt
现在脚本中的列表可能会有所不同,即如果有时它是 3 个表,那么在下一次迭代中变量可能会存储 4 个表。任何人都可以建议如何对查询进行参数化,以便它将获取中的所有值列表并将其传递到配置单元查询中。
给你:
#!/bin/bash
table=(tbl1 tbl2 tbl3)
# The select takes the 1st table
sql="select min(column_name) from ${table[0]}"
# Remove 1st table
unset table[0]
# Add union statements
for T in ${table[@]}
do
sql+=$'\n'
sql+="union all select min(column_name) from db.$T"
done
sql+=";"
echo "$sql"
结果是:
select min(column_name) from tbl1
union all select min(column_name) from db.tbl2
union all select min(column_name) from db.tbl3;
- 第一个table用于
select
。 - 一旦使用,就会从数组中移除。
- 然后在剩余的 table 上循环,用于
union
语句。 - 最后在末尾添加
;
。
如果您的查询发生变化,您可以根据需要进行调整。