Apache hive MSCK REPAIR TABLE nueva partición no agregada
Soy nuevo en Apache Hive. Mientras trabajo en una partición de tabla externa, si agrego una nueva partición directamente a HDFS, la nueva partición no se agrega después de ejecutar la tabla MSCK REPAIR. Debajo están los códigos que probé,
- crear tabla externa
hive> create external table factory(name string, empid int, age int) partitioned by(region string)
> row format delimited fields terminated by ',';
- Información detallada de la tabla
Location: hdfs://localhost.localdomain:8020/user/hive/warehouse/factory
Table Type: EXTERNAL_TABLE
Table Parameters:
EXTERNAL TRUE
transient_lastDdlTime 1438579844
- Crear directorio en HDFS para cargar datos para la fábrica de tablas
[cloudera@localhost ~]$ hadoop fs -mkdir 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory1'
[cloudera@localhost ~]$ 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
[cloudera@localhost ~]$ hadoop fs -copyFromLocal '/home/cloudera/factory1.txt' 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory1'
[cloudera@localhost ~]$ hadoop fs -copyFromLocal '/home/cloudera/factory2.txt' 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory2'
- Alteración de 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 creé el nuevo archivo factory3.txt para agregarlo como nueva partición para la fábrica de tablas
cat factory3.txt
user1,100,25
user2,101,27
user3,102,30
- crear la ruta y copiar datos de la tabla
[cloudera@localhost ~]$ hadoop fs -mkdir 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory2'
[cloudera@localhost ~]$ hadoop fs -copyFromLocal '/home/cloudera/factory3.txt' 'hdfs://localhost.localdomain:8020/user/hive/testing/testing1/factory3'
ahora ejecuté la consulta a continuación para actualizar el metastore para la nueva partición agregada
MSCK REPAIR TABLE factory;
Ahora la tabla no proporciona el nuevo contenido de partición del archivo factory3. ¿Puedo saber dónde estoy cometiendo un error al agregar la partición para la fábrica de tablas?
mientras que si ejecuto el comando alter, entonces muestra los nuevos datos de partición.
hive> alter table f,actory add partition(region='eastregion') location '/user/hive/testing/testing1/factory3';
¿Puedo saber por qué el comando MSCK REPAIR TABLE TABLE no funciona?