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

Execute an Impala query and get query time

我希望能够执行多个 Impala 个查询和 return 每个查询执行所花费的时间。使用 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+"

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

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

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

请注意,可能需要正面前瞻 (?=s) 以避免捕获版本号