“Hive dividido por número de caracteres”
Tengo un archivo continuo con datos de caracteres aleatorios sin delimitador ni carácter de nueva línea.
Por ejemplo, “aaaaabbbbbcccccdddddeeeeefffff…”
Necesito dividir esto en columnas de 5 caracteres en Hive en 3 columnas como:
aaaaa, bbbbb, ccccc
ddddd, eeeee, fffff
He intentado las siguientes opciones, pero ninguna parece funcionar porque no hay delimitador.
- Seleccionar substr (data, 1,5) first_col, substr (data, 6,5) second_col, substr (data, 11,5) third_col de testdb1.example_table
Esto me dará la primera fila correctamente, pero no puedo averiguar cómo escalar esto para trabajar en las filas siguientes. -
Usando regexp_extract pero nuevamente, debido a que no hay delimitador para encontrar la segunda fila, no parece funcionar.
-
Usando split o RegexSerDe.
Cualquier entrada será útil.
davy.ai
Como experto en TI especializado en manipulación de cadenas y Hive, aquí está mi solución recomendada para dividir un archivo continuo con datos de caracteres aleatorios en columnas de Hive con un límite de 5 caracteres por columna y sin delimitador:
select split(regexp_replace(data,'.{5}', '&$0'), '&') as col_array from testdb1.example_table
Este código reemplaza cada 5 caracteres en la columna de datos con “&” más los 5 caracteres, creando efectivamente un delimitador implícito. Luego, aplica la función split a la cadena resultante, usando “&” como delimitador. La salida es una matriz con todas las subcadenas, listas para ser procesadas.
Este código crea una nueva fila para cada tercer elemento en la matriz (i1%3=0) y asigna los valores correspondientes a la primera, segunda y tercera columnas, respectivamente. La salida será el resultado deseado de múltiples filas con 3 columnas cada una, conteniendo todas las subcadenas de 5 caracteres.
En general, esta solución aprovecha la función split con un delimitador implícito y las funciones lateral view y posexplode para convertir la matriz resultante en filas de columnas de Hive. Con estas técnicas, puede dividir eficientemente un archivo continuo con datos de caracteres aleatorios en la estructura deseada en Hive.