hiveql:解析字符串并计数

new9mtju  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(344)

我使用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等。
如有任何想法,我们将不胜感激。

quhf5bfb

quhf5bfb1#

下面是带有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

正则表达式将提取带有字母数字和特殊字符“-”的域根
希望这有帮助。

相关问题