Regex HiveQL:解析字符串和计数

Regex HiveQL:解析字符串和计数,regex,hive,hiveql,Regex,Hive,Hiveql,我使用HiveQL处理存储在HDFS中的数百万行域名文本数据。下面是一个手工选择的子集,用于说明词汇多样性。有重复的条目 dnsvm.mgmtsubnet.mgmtvcn.oraclevcn.com. mgmtsubnet.mgmtvcn.oraclevcn.com. asdf.mgmtvcn.oraclevcn.com. dnsvm.mgmtsubnet.mgmtvcn.oraclevcn.com. localhost. a.localhost. img.pulsemgr.com. 36.13

我使用HiveQL处理存储在HDFS中的数百万行域名文本数据。下面是一个手工选择的子集,用于说明词汇多样性。有重复的条目

dnsvm.mgmtsubnet.mgmtvcn.oraclevcn.com.
mgmtsubnet.mgmtvcn.oraclevcn.com.
asdf.mgmtvcn.oraclevcn.com.
dnsvm.mgmtsubnet.mgmtvcn.oraclevcn.com.
localhost.
a.localhost.
img.pulsemgr.com.
36.136.154.156.in-addr.arpa.
accounts.spotify.com.
_dmarc.ixia-devops.com.
&eventtype=close&reason=4&duration=35.
&eventtype=close&reason=3&duration=10336.
我试图根据域的最后两个级别获取行数,其中有时缺少第二个级别(即
localhost.
)。例如:

domain_root     count
oraclevcn.com.  4
localhost.      1
a.localhost.    1
pulsemgr.com.   1
in-addr.arpa.   1
spotify.com.    1
ixia-devops.com 1
这将是很高兴也看到如何筛选出域名第二级是缺席

我不知道从哪里开始。我见过使用
SPLIT()
函数,但这可能并不可靠,因为一个域名可能有很多级别,例如:a.b.c.d.e.f.g.h.I等


如有任何想法,我们将不胜感激。

下面是带有regexp\u extract的查询

select domain_root, count(*) from (select regexp_extract('dnsvm.mgmtsubnet.mgmtvcn.oraclevcn.com.', '[A-Za-z0-9-]+\.[A-Za-z0-9-]+\.$', 0) as domain_root from table) A group by A.domain_root -- replace first argument with column name
正则表达式将为具有字母数字和特殊字符'-'的域根进行提取

希望这有帮助