REGEXP_EXTRACT в улье, чтобы получить подстроку строки - PullRequest
0 голосов
/ 13 февраля 2019

Привет, я новичок в улье. Я использую regexp_extract для получения подстроки из строки

my string is '/abc/def/ghi/'

как получить abc, def или ghi с помощью функции regexp_extract

Ответы [ 3 ]

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

Ниже будет запрос.

   hive> select regexp_extract('/abc123./def456./ghi789/', '\/([\\w\\d.]*)\/([\\w\\d.]*)\/([\\w\\d.]*)',1);
OK
abc123.
Time taken: 0.103 seconds, Fetched: 1 row(s)
hive> select regexp_extract('/abc123./def456./ghi789/', '\/([\\w\\d.]*)\/([\\w\\d.]*)\/([\\w\\d.]*)',2);
OK
def456.
Time taken: 0.1 seconds, Fetched: 1 row(s)
hive> select regexp_extract('/abc123./def456./ghi789/', '\/([\\w\\d.]*)\/([\\w\\d.]*)\/([\\w\\d.]*)',3);
OK
ghi789
Time taken: 0.124 seconds, Fetched: 1 row(s)
0 голосов
/ 13 февраля 2019

Удалите ведущие и конечные '/' и используйте split(), чтобы получить массив. split () также использует регулярное выражение:

hive> select split(regexp_replace('/abc/def/ghi/','^/|/$',''),'/')[0];

abc

hive> select split(regexp_replace('/abc/def/ghi/','^/|/$',''),'/')[1];

def

hive> select split(regexp_replace('/abc/def/ghi/','^/|/$',''),'/')[2];

ghi

Или в подзапросе:

hive> select array[0], array[1], array[2] 
      from (select split(regexp_replace('/abc/def/ghi/','^/|/$',''),'/') as array) s;
OK
_c0     _c1     _c2
abc     def     ghi
Time taken: 0.192 seconds, Fetched: 1 row(s)
0 голосов
/ 13 февраля 2019

Мы можем использовать regexp_extract, предоставляя шаблон с группами захвата, нацеленными на то, что мы хотим сопоставить.Затем мы можем указать, какая группа должна служить заменой.

В качестве примера, чтобы найти содержимое между вторым и третьим разделителями пути, мы можем попробовать:

regexp_extract('/abc/def/ghi/', '/[^/]+/([^/]+).*', 1)

Примечание:Вышеуказанное не проверено и может привести к ошибке, если необходимо избежать прямой косой черты.В этом случае используйте следующее:

regexp_extract('/abc/def/ghi/', '\/[^\/]+\/([^\/]+).*', 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...