HiveQL: разбирать строки и считать - PullRequest
0 голосов
/ 06 февраля 2019

Я использую 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.

Я пытаюсь получить количество строк на основе последних двух уровней домена, где иногда отсутствует 2-й уровень (т. Е. 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

Было бы неплохо также посмотреть, как отфильтровывать домены 2-го уровня.

Я не уверен, с чего начать.Я видел использование функции SPLIT(), но она не может быть надежной, так как доменное имя может иметь много уровней, например: abcdefghi и т. Д.

Любые идеи являются реализациями приветствуются.

1 Ответ

0 голосов
/ 06 февраля 2019

Ниже приведен запрос с 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 arguement with column name

regex извлечет для корневого домена с буквенно-цифровым и специальным символом '-'

надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...