hadoop - funciones - ¿Hive tiene una función de división de cadenas?
tipos de dato en hive (3)
Estoy buscando una función de división de cadenas incorporada en Hive? Por ejemplo, si String es
A | B | C | D | E
entonces quiero tener una función como array split (string input, char delimitador)
para que regrese [A, B, C, D, E].
¿Existe una función dividida integrada en Hive? Solo puedo ver regexp_extract y regexp_replace. Me encantaría ver las funciones de cadena indexOf () y split ().
Gracias
Ajay
Existe una función dividida basada en expresiones regulares. No aparece en el tutorial , pero aparece en el manual del idioma en la wiki :
split(string str, string pat)
Split str around pat (pat is a regular expression)
En su caso, el delimitador " |
" tiene un significado especial como expresión regular, por lo que debe denominarse " //|
".
Otro caso de uso interesante para dividir en Hive es cuando, por ejemplo, una columna ipname
en la tabla tiene un valor "abc11.def.ghft.com" y desea sacar "abc11":
SELECT split(ipname,''[/.]'')[0] FROM tablename;
Solo una aclaración sobre la respuesta dada por Bkkbrad.
Intenté esta sugerencia y no funcionó para mí.
Por ejemplo,
split(''aa|bb'',''//|'')
producido:
["","a","a","|","b","b",""]
Pero,
split(''aa|bb'',''[|]'')
produjo el resultado deseado:
["aa","bb"]
Incluyendo el metacarácter ''|'' dentro de los corchetes hace que se interprete literalmente, como se pretende, en lugar de como un metacarácter.
Para la elaboración de este comportamiento de regexp, consulte: http://www.regular-expressions.info/charclass.html