使用正则表达式提取配置单元计数字符串
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)
详情
\|
- 一个 |
字符
\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 的更多详细信息。
我正在尝试使用 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)
详情
\|
- 一个|
字符\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 的更多详细信息。