执行Impala查询并获取查询时间

时间:2017-10-31 16:34:43

标签: impala

我希望能够执行许多Impala查询并返回每个查询执行所花费的时间。使用Impala shell,我可以使用以下命令执行此操作:

impl -q "select count(*) from database.table;"

这给了我输出

Using service name 'impala'
SSL is enabled. Impala server certificates will NOT be verified (set --ca_cert to change)
Connected to *****.************:21000
Server version: impalad version 2.6.0-cdh5.8.3 RELEASE (build c644f476b774db9db87a619628f7a6ecc5f843e0)
Query: select count(*) from database.table
+----------+
| count(*) |
+----------+
| 1130976  |
+----------+
Fetched 1 row(s) in 0.86s

我希望能够获取最后一行并提取时间。这并不重要,这就是我没有标记语言的原因。我尝试过像这样使用grep:

impl -q "select count(*) from database.table" | grep -Po "\d+\.\d+"

但这除了删除表外什么也没做。将查询放在python脚本中并使用子进程无法找到impl作为命令,对于scala也是如此。

1 个答案:

答案 0 :(得分:1)

奇怪的是impala-shell将这些消息转储到stderr而不是stdout,所以要获取最后一行,你必须附加一个2>&1来将stderr重定向到stdout

impala-shell -q "query string" 2>&1 | grep -Po "\d+\.\d+(?=s)"

请注意,可能需要使用正向前瞻(?=s)来避免捕获版本号