Подтвердить что ты не робот

У Hive есть функция разделения строк?

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

A|B|C|D|E

Тогда я хочу иметь такую функцию:

array<string> split(string input, char delimiter)

Так что я вернусь:

[A,B,C,D,E]

Существует ли такая встроенная функция разделения в Hive.

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

SELECT split(ipname,'[\.]')[0] FROM tablename;

Ответ 3

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

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

Например,

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

производится:

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

Но,

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

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

["aa","bb"]

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

Для уточнения этого поведения регулярного выражения смотрите: http://www.regular-expressions.info/charclass.html