es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

“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.

  1. 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.

  2. Usando regexp_extract pero nuevamente, debido a que no hay delimitador para encontrar la segunda fila, no parece funcionar.

  3. Usando split o RegexSerDe.

Cualquier entrada será útil.

Tags:  , ,

Answer

  1. Avatar for 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:

    1. Utilice la función split en Hive para dividir la cadena continua en una matriz de subcadenas con una longitud de 5 caracteres cada una. Un posible fragmento de código sería:

    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.

    1. Utilice las funciones lateral view y posexplode en Hive para convertir la matriz en múltiples filas con 3 columnas cada una. Un posible fragmento de código sería:
    select col_array[i1] as first_col, col_array[i1+1] as second_col, col_array[i1+2] as third_col
    from testdb1.example_table lateral view posexplode(col_array) exploded as i1, col_value
    where i1%3=0
    

    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.

Comments are closed.