Есть ли в Hive функция разделения строк? - PullRequest
39 голосов
/ 01 ноября 2010

Я ищу встроенную функцию разделения строк в Hive? Например. если строка

A | B | C | D | Е

тогда я хочу иметь такую ​​функцию, как разделение массива (ввод строки, разделитель символов)

чтобы я вернулся [A, B, C, D, E].

Существует ли такая встроенная функция разделения в Hive. Я могу видеть только regexp_extract и regexp_replace. Я хотел бы видеть indexOf () и split () строковые функции.

Спасибо

Аджай

Ответы [ 3 ]

50 голосов
/ 04 ноября 2010

Существует функция разбиения на основе регулярных выражений. Его нет в списке в учебнике , но он указан в руководстве по языку в вики :

split(string str, string pat)
   Split str around pat (pat is a regular expression) 

В вашем случае разделитель "|" имеет особое значение в качестве регулярного выражения, поэтому его следует называть "\\|".

38 голосов
/ 16 ноября 2012

Еще один интересный вариант использования для разделения в Hive - это когда, например, столбец ipname в таблице имеет значение «abc11.def.ghft.com» и вы хотите извлечь «abc11»:

SELECT split(ipname,'[\.]')[0] FROM tablename;
6 голосов
/ 09 июня 2017

Просто разъяснение ответа, данного Бккбрадом.

Я попробовал это предложение, и оно не сработало для меня.

Например,

split('aa|bb','\\|')

произведено:

["","a","a","|","b","b",""]

Но,

split('aa|bb','[|]')

дал желаемый результат:

["aa","bb"]

Включая метасимвол '|'внутри квадратных скобок приводит к тому, что он интерпретируется буквально, как и предполагалось, а не как метасимвол.

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