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.

VISTA LATERAL de la función EXPLODE en HIVE.

Estoy intentando exportar datos de Excel a una tabla Hive. Al hacerlo, tengo una columna ‘ABC’ que tiene valores como ‘1, 2, 3’. Usé la función de vista lateral de explode, pero no hace nada con mis datos.

A continuación se muestra mi fragmento de código:
CREATE TABLE nombre_de_tabla
(
id cadena,
marca cadena,
nombre_de_dato cadena,
nombre cadena,
dirección cadena,
país cadena,
bandera cadena,
lista_de_muestra array )
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’
ALMACENADO COMO TEXTO;
LOAD DATA LOCAL INPATH ‘ubicación’ EN LA TABLA nombre_de_tabla;

Salida de ejemplo:

id marca nombre_de_dato nombre dirección país bandera lista_de_muestra
19 1 ABC SQL ABC almidón de maíz EN 1 [“[1,2,3]”]

Entonces hago:
SELECT * FROM franquicia
LATERAL VIEW EXPLODE (lista_de_SE) lista_de_SE como final_se;

Muestra de salida:

id marca nombre_de_dato nombre dirección país bandera lista_de_muestra
19 1 ABC SQL ABC almidón de maíz EN 1 [1,2,3]

También intenté:
SELECT * DE franquicia
LATERAL VIEW EXPLODE (split (lista_de_SE, ‘,’)) lista_de_SE como final_se;
Pero obtuve un error:
FAILED: ClassCastException org.apache.hadoop.hive.serde2.objectinspector.StandardListObjectInspector cannot be cast to org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector

Lo que necesito es:
id marca nombre_de_dato nombre dirección país bandera lista_de_muestra
19 1 ABC SQL ABC almidón de maíz EN 1 1
19 1 ABC SQL ABC almidón de maíz EN 1 2
19 1 ABC SQL ABC almidón de maíz EN 1 3

¡Cualquier ayuda será muy apreciada! Gracias

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando dividir los valores en la columna “sample_list” en varias filas usando la función explode de lateral view, pero no está funcionando como se espera.

    Una forma de resolver este problema es utilizar en su lugar la función lateral view inline, la cual puede manejar tipos de datos de arreglo. Puedes modificar tu consulta de la siguiente manera:

    SELECT id, brand, data_name, name, address, country, flag, SEs
    FROM table_name
    LATERAL VIEW inline(sample_list) exploded AS SEs;
    

    Esto debería darte la salida deseada donde cada valor en la columna “sample_list” es explotado en una fila separada.

    Ten en cuenta que es posible que debas modificar los nombres de las columnas según el esquema de tu tabla. ¡Espero que esto ayude!

Comments are closed.