【问题标题】:HiveQL: Parse strings and countHiveQL:解析字符串和计数
【发布时间】:2020-07-25 16:34:16
【问题描述】:

我正在使用 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 等。

任何想法都是实现的。

【问题讨论】:

    标签: regex hive hiveql


    【解决方案1】:

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

    正则表达式将提取具有字母数字和特殊字符“-”的域根

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      • 2016-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多