#arrays #regex #hive #hiveql #ip-address
#массивы #регулярное выражение #улей #hiveql #ip-адрес
Вопрос:
Когда я запускаю
select regexp_extract("hosts: 192.168.1.1 192.168.1.2 host",'((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)',0);
Я получил 192.168.1.1
.
Но то, что я хочу, это 192.168.1.1,192.168.1.2
или ["192.168.1.1","192.168.1.2"]
Что мне делать, изменить reg или создать UDF?
Ответ №1:
Разделите строку, разнесите, проверьте каждую часть на соответствие регулярному выражению, соберите массив совпадающих частей, если необходимо получить строку из массива, используйте concat_ws() для объединения массива:
with your_data as(
select stack(1, 'hosts: 192.168.1.1 192.168.1.2 host' ) as hosts
)
select collect_set(case when part rlike '((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)'
then part
else null end )
from your_data d
lateral view explode(split(hosts, ' ')) s as part;
Результат:
["192.168.1.1","192.168.1.2"]
Комментарии:
1. @billsteve Пожалуйста, подумайте о принятии ответа / голосования, если это действительно полезно