Regex HiveQL:解析字符串和计数
我使用HiveQL处理存储在HDFS中的数百万行域名文本数据。下面是一个手工选择的子集,用于说明词汇多样性。有重复的条目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
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
正则表达式将为具有字母数字和特殊字符'-'的域根进行提取
希望这有帮助