我当前正在编写一个外壳脚本,该脚本将查询一些配置单元表以获取表列表的每月记录计数,然后将总计数值提取为.txt文件。我目前有每年查询所有表的代码,但是如何最好每年也每月一次循环呢?
例如,现在我的脚本将遍历我所经过的每一年(year = 2001、2002、2003 ...),并查询表并提取文件。我希望每年循环一次,这样理想情况下每年将有12个文件,并且无论我分配多少年都继续循环。
以下我目前拥有的示例伪代码:
#!/usr/bin/sh
years=2001,2002,2003,2004
for year in $(echo ${years} | sed "s/,/ /g")
do
select_sql="INSERT OVERWRITE LOCAL DIRECTORY <path> ROW FORMAT DELIMITED FIELDS TERMINATED BY '~' select * from tbl where year(date)=$year"
beeline -u "<jdbc connection>" --hiveconf -e "$select_sql"
done
答案 0 :(得分:1)
这个问题带有一个bash
标签,但是解释器是/usr/bin/sh
。
无论如何,让我们使用bash
。
#!/bin/bash
for clause in "year(date)="{2001,2002,2003,2004}" and month(data)='"{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec}"'"
do
select_sql="INSERT OVERWRITE LOCAL DIRECTORY <path> ROW FORMAT DELIMITED FIELDS TERMINATED BY '~' select * from tbl where $clause"
echo "$select_sql"
#beeline -u "<jdbc connection>" --hiveconf -e "$select_sql"
done
答案 1 :(得分:0)
在这种情况下,嵌套循环和数组可能类似于:
years=2001,2002,2003,2004
months=(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
for year in $(echo ${years} | sed "s/,/ /g")
do
for month in "${months[@]}"
do
# do the query and file saving here
echo "$year $month"
done
done