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 – filas incompletas en la selección de una tabla gestionada particionada.

Necesito copiar datos de un archivo CSV a una tabla particionada administrada en Hive.

Las filas del archivo CSV son las siguientes:

id,nome,cognome,ruolo
16,Mike,Maignan,Portiere
23,Fikayo,Tomori,Centrale
24,Simon,Kjaer,Centrale
19,Theo,Hernandez,Terzino


He creado una tabla particionada administrada en la columna ‘ruolo’.

create table squadre_part (id int, nome string, cognome string) partitioned by (ruolo string) row format delimited fields terminated by ‘,’ stored as textfile TBLPROPERTIES (“skip.header.line.count”=”1”);


Luego he creado una tabla externa para cargar los datos desde el archivo CSV (luego seleccionaré los datos de la tabla externa y los copiaré en la tabla particionada administrada)

create external table external_squadre (id int, nome string, cognome string, ruolo string) row format delimited fields terminated by ‘,’ stored as textfile location ‘/ulisse/prove/external/’ TBLPROPERTIES (“skip.header.line.count”=”1”);


Primero configuré estas 2 propiedades:

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;


Cuando coloco el archivo CSV en la carpeta HDFS /ulisse/prove/external/ y ejecuto la selección desde la tabla externa, veo TODAS LAS FILAS.


Después de la “copia” de la tabla externa a la tabla administrada:

insert into squadre_part partition (ruolo) select * from external_squadre;

Solo veo POCAS FILAS en la tabla administrada (???).

Lo extraño es que en HDSF, bajo /user/hive/warehouse///…

Veo todos los subdirectorios (y archivos de texto dentro del subdirectorio), con TODAS LAS FILAS del archivo CSV original.


El comando:

msck repair table squadre_part

(después del comando insert into…) no solucionó el problema.

Gracias de antemano por cualquier respuesta.

Moreno

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Posible solución:

    Parece que los datos no fueron correctamente particionados al ser insertados en la tabla gestionada. Para solucionar esto, intenta seguir los siguientes pasos:

    1. Asegúrate de que la columna ruolo existe en la tabla externa y tiene el mismo tipo de datos que en la tabla gestionada.
    2. Agrega la columna ruolo en la sentencia select al copiar los datos de la tabla externa a la tabla gestionada. Esto asegurará que los datos estén correctamente particionados.

      insert into squadre_part partition (ruolo) select id, nome, cognome, ruolo from external_squadre;
      

    3. Ejecuta nuevamente el comando msck repair table para actualizar los metadatos de la tabla gestionada.
      msck repair table squadre_part;
      

    Esto debería particionar correctamente los datos en la tabla gestionada y mostrar todas las filas.

Comments are closed.