Как извлечь часть строки в HIVE? - PullRequest
0 голосов
/ 19 ноября 2018

Я хочу сделать это в Улей. Ниже приведен запрос, который работает на сервере sql.

select LEFT('ENTERPRISE > DEMO', CHARINDEX('>', 'ENTERPRISE > DEMO') - 2)

В основном я хочу извлечь все символы в моей строке слева от >. Кроме того, число символов, которые могут появляться перед этим знаком >, является переменным. В улье нет функции LEFT. Как я могу использовать substr или regexp_extract для этого?

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

Вы можете использовать

1) комбинацию substring и instr

trim(substring(val,1,instr(val,'>')-1))

2) regexp_extract

trim(regexp_extract(val,'(^.*)>',1))
0 голосов
/ 19 ноября 2018

Также в дополнение к уже предоставленным решениям с regexp_extract и substr() + instr(), вы можете использовать split():

hive> select split('ENTERPRISE > DEMO','>')[0];
OK
ENTERPRISE
Time taken: 0.099 seconds, Fetched: 1 row(s)
hive> select split('ENTERPRISE > DEMO','>')[1];
OK
 DEMO
Time taken: 0.072 seconds, Fetched: 1 row(s)

Примените trim (), если вы хотите удалить пробелы:

hive> select trim(split('ENTERPRISE > DEMO','>')[0]);
OK
ENTERPRISE

Или вы можете разделить на любое количество пробелов + '>' + любое количество пробелов. split () использует регулярное выражение, нет необходимости использовать trim ():

hive> select trim(split('ENTERPRISE >DEMO',' *?> *?')[0]);
OK
ENTERPRISE
Time taken: 0.075 seconds, Fetched: 1 row(s)
0 голосов
/ 19 ноября 2018

HIVE поддерживает INSTR, который возвращает в основном ту же функцию, что и CHARINDEX, но поле ввода и тестовое значение противоположны в функции, поэтому я бы попробовал

SELECT SUBSTR('ENTERPRISE > DEMO',1,INSTR('ENTERPRISE > DEMO','>') -2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...