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

问题描述 投票:1回答:3

我正在创建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中得到两个名称输出。但是我需要在output_log变量中记录“在0.83s中提取2行”。我怎么才能得到它?

shell unix hash impala
3个回答
0
投票

我不熟悉impala,所以我不相信你所做的是查询impala最有效的方法。但是,您正在尝试专注于特定的输出行;我可以回答

有很多方法可以做到这一点。也许最简单的是grep:

output_log = echo `impala-shell -i $node -q "select name from impaladb.impalatbl" -o output_file | grep Fetch`

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

0
投票

我解决了这个问题。它的工作方式是impala在不同的流中发送查询输出,而另一个信息则在不同的流中发送查询。

因此,你所要做的就是

impala-shell -i $node -q "select name from impaladb.impalatbl" 2>output_file

2>将在输出文件中发送包含“10秒内获取1行”的输出。现在你可以grep它或做你想做的任何事情。

假设您要在output_log变量中存储相同的输出,然后使用

 output_log=$(impala-shell -i $node -q "select name from impaladb.impalatbl" 2>&1)

这里2>&1将输出发送到stdout,它将用于将值赋给变量。

有关这方面的更多信息,只需在Google搜索中添加2>&1并了解有关它的更多信息。

希望它能帮到你!!

一些额外的观察

2>&1重定向从stderr到stdout的输出,但stdout也获取查询输出,所以当你将它存储在一个变量中时,它将获得查询输出以及额外信息,如“在3秒内获取1行”

我们用的时候

2> a.txt然后只有stderr输出被重定向。所以a.txt只包含“启动impala ......在2秒内获取1行”等信息。然后你可以从文件grep并将其放在一个变量中。

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

© www.soinside.com 2019 - 2024. All rights reserved.