我正在创建unix shell脚本来执行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 0.83s
这里我在output_file和output_log中获得了两个名称输出。但我需要在0.83秒内获得"提取2行"登录output_log变量。我怎么能得到它?
答案 0 :(得分:0)
我不熟悉黑斑羚,所以我不相信你所做的是查询黑斑羚的最有效方法。但是,您正在尝试专注于特定的输出行;我可以回答。
有很多方法可以做到这一点。也许最简单的是grep:
output_log = echo `impala-shell -i $node -q "select name from impaladb.impalatbl" -o output_file | grep Fetch`
答案 1 :(得分:0)
试试这个:
解决方案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
答案 2 :(得分:0)
我解决了这个问题。 它的工作方式是impala在不同的流中发送查询输出,而另一个信息则在不同的流中发送查询。
因此你所要做的就是
impala-shell -i $node -q "select name from impaladb.impalatbl" 2>output_file
2&gt; 将在输出文件中发送包含“在10秒内获取<1>行”的输出。现在你可以用它来做或做任何你想做的事。
假设您要在 output_log 变量中存储相同的输出,请使用
output_log=$(impala-shell -i $node -q "select name from impaladb.impalatbl" 2>&1)
此处 2&gt;&amp; 1 会将输出发送到stdout,该输出将用于将值赋值给变量。
有关此内容的更多信息,只需在Google搜索中添加 2&gt;&amp; 1 ,然后了解详情。
希望它可以帮到你!!
其他一些观察
2&gt;&amp; 1从stderr到stdout的重定向输出,但stdout也获取查询输出,所以当你将它存储在变量中时,它将获得查询输出以及“3秒内获取的1行”等额外信息
但
当我们使用
时2&gt; a.txt然后只有stderr输出被重定向。所以a.txt只包含“启动impala ......在2秒内获取1行”等信息。然后你可以从文件grep并把它放在一个变量中。
只是想强调我在存储文件和存储变量之间观察到的这种微小差异。