У 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()
.
Ответы
Ответ 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