Hive QL (RLIKE) 中的正则表达式 - 性能?

Regex in Hive QL (RLIKE) - performance?

我想知道 how/if 我可以改进我在查询中使用的正则表达式吗?我有一组特定用户组的标识符。它们可以有两种主要格式:

类型 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

我想计算至少出现一个第二种格式组的行数,即用户不完全是第一种格式组的成员。

我需要捕获不完全属于第一类组的所有行(即用户)。在上面的示例中,我想排除用户 johnfrancis 因为他们只是类型 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是一个单词边界。它不使用字符,而是声明那里不能有非字母数字字符。

Live demo.