Hive QL (RLIKE) 中的正则表达式 - 性能?
Regex in Hive QL (RLIKE) - performance?
我想知道 how/if 我可以改进我在查询中使用的正则表达式吗?我有一组特定用户组的标识符。它们可以有两种主要格式:
X123
或 XY12
,(类型 1)
- 任意两个字母组合,不包括 XY(类型 2)
类型 1 组的长度始终为 4。它是字母 X 后跟 100 到 999(含)之间的数字或 XY 后跟 0 到 99 之间的数字(用零填充到长度 2)。
类型 2 组是 2 个字母的字符串,允许任何字母,但 XY 除外(尽管我的查询未指定此)。
用户可以属于多个组,在这种情况下,不同的组由井号分隔 (#
)。这是一个例子:
groups user age
X124 john 23
XY22#AB mike 33
AB peter 21
X122#XY01 francis 43
我想计算至少出现一个第二种格式组的行数,即用户不完全是第一种格式组的成员。
我需要捕获不完全属于第一类组的所有行(即用户)。在上面的示例中,我想排除用户 john 和 francis 因为他们只是类型 1 组的成员。
另一方面,mike 可以,因为他是 AB 组的成员(即类型 2 的组)。
我目前是这样做的:
select
count(*)
from
users
where
groups not rlike '^(X[Y1-9][0-9]{2,2})(#X[Y1-9][0-9]{2,2})*$'
这种糟糕的表现是明智的吗?我应该如何解决它?
I want to count rows in which at least one group in second format appears.
好像比select简单一点 where groups like
:
\b(?:(?!XY)[A-Z]{2})\b
\b
是一个单词边界。它不使用字符,而是声明那里不能有非字母数字字符。
我想知道 how/if 我可以改进我在查询中使用的正则表达式吗?我有一组特定用户组的标识符。它们可以有两种主要格式:
X123
或XY12
,(类型 1)- 任意两个字母组合,不包括 XY(类型 2)
类型 1 组的长度始终为 4。它是字母 X 后跟 100 到 999(含)之间的数字或 XY 后跟 0 到 99 之间的数字(用零填充到长度 2)。
类型 2 组是 2 个字母的字符串,允许任何字母,但 XY 除外(尽管我的查询未指定此)。
用户可以属于多个组,在这种情况下,不同的组由井号分隔 (#
)。这是一个例子:
groups user age
X124 john 23
XY22#AB mike 33
AB peter 21
X122#XY01 francis 43
我想计算至少出现一个第二种格式组的行数,即用户不完全是第一种格式组的成员。
我需要捕获不完全属于第一类组的所有行(即用户)。在上面的示例中,我想排除用户 john 和 francis 因为他们只是类型 1 组的成员。 另一方面,mike 可以,因为他是 AB 组的成员(即类型 2 的组)。
我目前是这样做的:
select
count(*)
from
users
where
groups not rlike '^(X[Y1-9][0-9]{2,2})(#X[Y1-9][0-9]{2,2})*$'
这种糟糕的表现是明智的吗?我应该如何解决它?
I want to count rows in which at least one group in second format appears.
好像比select简单一点 where groups like
:
\b(?:(?!XY)[A-Z]{2})\b
\b
是一个单词边界。它不使用字符,而是声明那里不能有非字母数字字符。