Soy nuevo por Apache Hive. Mientras trabajaba en la tabla externa de la partición, si puedo añadir nueva partición directamente a HDFS, la nueva partición no se agrega después de la ejecución de MSCK REPARACIÓN de la tabla. A continuación están los códigos que he probado,

– la creación de la tabla externa

hive> create external table factory(name string, empid int, age int) partitioned by(region string)  
    > row format delimited fields terminated by ','; 

–Detallada Información De La Tabla De

Location:  hdfs://localhost.localdomain:8020/user/hive/warehouse/factory     
Table Type:             EXTERNAL_TABLE           
Table Parameters:        
    EXTERNAL                TRUE                
    transient_lastDdlTime   1438579844  

— crear un directorio en HDFS para cargar los datos de la tabla de fábrica

[[email protected] ~]$ hadoop fs -mkdir 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory1'
[c[email protected] ~]$ hadoop fs -mkdir 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory2'

— Datos de la tabla

cat factory1.txt
emp1,500,40
emp2,501,45
emp3,502,50

cat factory2.txt
EMP10,200,25
EMP11,201,27
EMP12,202,30

— copia de local a HDFS

[[email protected] ~]$ hadoop fs -copyFromLocal '/home/cloudera/factory1.txt' 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory1'
[[email protected] ~]$ hadoop fs -copyFromLocal '/home/cloudera/factory2.txt' 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory2'

, Alterando la tabla para actualizar en el metastore

hive> alter table factory add partition(region='southregion') location '/user/hive/testing/testing1/factory2';
hive> alter table factory add partition(region='northregion') location '/user/hive/testing/testing1/factory1';            
hive> select * from factory;                                                                      
OK
emp1    500 40  northregion
emp2    501 45  northregion
emp3    502 50  northregion
EMP10   200 25  southregion
EMP11   201 27  southregion
EMP12   202 30  southregion

Ahora he creado un nuevo archivo factory3.txt para agregar una nueva partición de la tabla de fábrica

cat factory3.txt
user1,100,25
user2,101,27
user3,102,30

– la creación de la ruta de acceso y la copia de los datos de la tabla

[[email protected] ~]$ hadoop fs -mkdir 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory2'
[[email protected] ~]$ hadoop fs -copyFromLocal '/home/cloudera/factory3.txt' 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory3'

ahora me ejecuta la siguiente consulta para actualizar el metastore para la nueva partición añadido

MSCK REPAIR TABLE factory;

Ahora la tabla no está dando el nuevo contenido de la partición de factory3 archivo. Puedo saber donde estoy haciendo error, mientras que la adición de la partición de tabla de fábrica?

mientras que, si ejecuto el comando alter, a continuación, se trata de mostrar los nuevos datos de la partición.

hive> alter table factory add partition(region='eastregion') location '/user/hive/testing/testing1/factory3';

Puedo saber por qué el MSCK REPARACIÓN de la TABLA de comandos no está funcionando?

OriginalEl autor Green | 2015-08-03

2 Comentarios

  1. 10

    Para la MSCK para el trabajo, la convención de nomenclatura /partition_name=partition_value/ debe ser utilizado.

    OriginalEl autor HakkiBuyukcengiz

  2. 0

    Tienes que poner los datos en el directorio llamado ‘región=eastregio’ en la tabla de ubicación de directorio:

    $ hadoop fs -mkdir 'hdfs://localhost.localdomain:8020/user/hive/warehouse/factory/region=eastregio'
    $ hadoop fs -copyFromLocal '/home/cloudera/factory3.txt' 'hdfs://localhost.localdomain:8020/user/hive/warehouse/factory/region=eastregio'
    

    OriginalEl autor Ruslan Ostafiichuk

Dejar respuesta

Please enter your comment!
Please enter your name here