如何使用unixshell脚本将impala查询输出日志放入变量中?
我正在创建unixshell脚本来执行impala查询。我需要获取impala查询的输出日志。例如,我尝试了下面的方法如何使用unixshell脚本将impala查询输出日志放入变量中?,shell,unix,hash,impala,Shell,Unix,Hash,Impala,我正在创建unixshell脚本来执行impala查询。我需要获取impala查询的输出日志。例如,我尝试了下面的方法 output_log = echo $(impala-shell -i $node -q "select name from impaladb.impalatbl" -o output_file) 输出: +--------+ | name | +--------+ | tom | | mike | +--------+ Fetched 2 row(s) in
output_log = echo $(impala-shell -i $node -q "select name from impaladb.impalatbl" -o output_file)
输出:
+--------+
| name |
+--------+
| tom |
| mike |
+--------+
Fetched 2 row(s) in 0.83s
在这里,我将在output_文件和output_日志中获得两个名称输出。但是我需要“0.83s中获取的2行”登录输出\ u log变量。我怎样才能得到它?我对黑斑羚不熟悉,所以我不相信你所做的是查询黑斑羚最有效的方法。然而,您试图专注于特定的输出行;我可以回答 有很多方法可以做到这一点。也许最简单的是grep:
output_log = echo `impala-shell -i $node -q "select name from impaladb.impalatbl" -o output_file | grep Fetch`
我不熟悉黑斑羚,所以我不相信你所做的是查询黑斑羚最有效的方法。然而,您试图专注于特定的输出行;我可以回答 有很多方法可以做到这一点。也许最简单的是grep:
output_log = echo `impala-shell -i $node -q "select name from impaladb.impalatbl" -o output_file | grep Fetch`
试试这个:
解决方案1:
output_log=$(nohup impala-shell -k --ssl -i $node --verbose --delimited --query="select count(*) as cnt from impaladb.impalatbl" 2>/dev/null)
echo $output_log
解决方案2:
output_log=$(echo `impala-shell -k --ssl -i $node --verbose --delimited --query="select count(*) as cnt from impaladb.impalatbl" -o output_file | head output_file`)
echo $output_log
试试这个:
解决方案1:
output_log=$(nohup impala-shell -k --ssl -i $node --verbose --delimited --query="select count(*) as cnt from impaladb.impalatbl" 2>/dev/null)
echo $output_log
解决方案2:
output_log=$(echo `impala-shell -k --ssl -i $node --verbose --delimited --query="select count(*) as cnt from impaladb.impalatbl" -o output_file | head output_file`)
echo $output_log
我解决了这个问题。
它的工作方式是impala在不同的流中发送查询输出,在不同的流中发送查询的其他信息
因此,你所要做的就是
impala-shell -i $node -q "select name from impaladb.impalatbl" 2>output_file
2>将发送输出文件中包含“在10秒内获取的1行””的输出。现在你可以做任何你想做的事
假设您希望将相同的输出存储在输出日志变量中,然后使用
output_log=$(impala-shell -i $node -q "select name from impaladb.impalatbl" 2>&1)
此处2>&1将输出发送到标准输出,标准输出用于将值分配给变量
有关这方面的更多信息,只需将2>&1放入谷歌搜索并了解更多信息
希望它能帮助你
一些额外的观察结果
2> &1将输出从stderr重定向到stdout,但stdout也会获取查询输出,因此当您将其存储在变量中时,它将获取查询输出以及额外信息,如“在3秒内获取1行”
但是
当我们使用
2> a.txt则只有stderr输出被重定向。因此,a.txt将只包含诸如“启动impala…..在2秒内获取1行”之类的信息。然后您可以从文件中grep并将其放入变量中
我只是想强调一下我观察到的存储在文件和存储在变量之间的细微差别。我解决了这个问题。
它的工作方式是impala在不同的流中发送查询输出,在不同的流中发送查询的其他信息
因此,你所要做的就是
impala-shell -i $node -q "select name from impaladb.impalatbl" 2>output_file
2>将发送输出文件中包含“在10秒内获取的1行””的输出。现在你可以做任何你想做的事
假设您希望将相同的输出存储在输出日志变量中,然后使用
output_log=$(impala-shell -i $node -q "select name from impaladb.impalatbl" 2>&1)
此处2>&1将输出发送到标准输出,标准输出用于将值分配给变量
有关这方面的更多信息,只需将2>&1放入谷歌搜索并了解更多信息
希望它能帮助你
一些额外的观察结果
2> &1将输出从stderr重定向到stdout,但stdout也会获取查询输出,因此当您将其存储在变量中时,它将获取查询输出以及额外信息,如“在3秒内获取1行”
但是
当我们使用
2> a.txt则只有stderr输出被重定向。因此,a.txt将只包含诸如“启动impala…..在2秒内获取1行”之类的信息。然后您可以从文件中grep并将其放入变量中
我只是想强调一下我观察到的存储在文件和存储在变量之间的细微差别。我试过了。它是空的。因为查询只返回表输出,如下所示名字|+-------------+|汤姆| | |迈克|+-------------+我试过了。它是空的。因为查询只返回表输出,如下所示姓名|+----------+|汤姆| |迈克|+--------+