如何使用unix shell脚本将impala查询输出日志转换为变量?

时间:2017-05-14 02:57:11

标签: shell unix hash impala

我正在创建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变量。我怎么能得到它?

3 个答案:

答案 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并把它放在一个变量中。

只是想强调我在存储文件和存储变量之间观察到的这种微小差异。