使用正则表达式提取配置单元计数字符串

Extract hive count string using regex

我正在尝试使用 paramiko 获取配置单元 table 中的记录总数。我知道我们可以使用 Pyhive 或 pyhs2,但它需要一定的配置,而且我的 IT 团队需要很多时间才能完成。

所以我正在使用 paramiko 执行以下命令并获取计数:

beeline -u jdbc:hive2://localhost:10000 -n hive -e 'select count(*) from table_name'

我得到以下结果,

+----------+--+
|   _c0    |
+----------+--+
| 1232322  |
+----------+--+

我需要从输出中提取这个计数。

我尝试了以下代码和 RE,但它不起作用,

pattern="""
+----------+--+
|   _c0    |
+----------+--+
| [0-9]*   |
+----------+--+
"""

import paramiko


si, so, se=ssh_con.exec_command("beeline -u jdbc:hive2://localhost:10000 -n hive -e 'select count(*) from table_name'")
print(so.read().decode())
print(re.match(pattern,so.read().decode()))

我能够检索计数并打印出来。只是寻找正则表达式来提取计数。

您的意思是匹配整个字符串,只提取 table 名称下方的数字。

这是修正您方法的正则表达式:

^\+-+\+--\+\n\| *\w+ *\|\n\+-+\+--\+\n\| *(\d+) *\|\n\+-+\+--\+$

regex demo\w+ 匹配一个或多个单词字符并匹配任何 table 名称。

但是,您似乎只需要一个正则表达式来匹配 | ... |.

之间的数字

使用

result = ''
m = re.search(r'\|\s*(\d+)\s*\|', so.read().decode()) 
if m:
    result = m.group(1)

this regex demo

详情

  • \| - 一个 | 字符
  • \s* - 0+ 个空格
  • (\d+) - 第 1 组:一个或多个数字
  • \s*\| - 0+ 个空格和一个 | 个字符。

在直线中,结果可以以不同的格式显示。默认情况下,结果打印在 table 和 header 中。您可以删除 header 和 table,不需要使用正则表达式解析结果。添加这些选项:--showHeader=false --outputformat=tsv2

beeline --showHeader=false --outputformat=tsv2 -u jdbc:hive2://localhost:10000 -n hive -e 'select count(*) from table_name'

阅读有关 Output Formats 的更多详细信息。