Apache hive MSCK REPAIR TABLE nova partição não adicionada
Eu sou novo no Apache Hive. Enquanto trabalho na partição de tabela externa, se eu adicionar uma nova partição diretamente ao HDFS, a nova partição não será adicionada após a execução da tabela MSCK REPAIR. Abaixo estão os códigos que tentei,
- criando tabela externa
hive> create external table factory(name string, empid int, age int) partitioned by(region string)
> row format delimited fields terminated by ',';
- Informações detalhadas da tabela
Location: hdfs://localhost.localdomain:8020/user/hive/warehouse/factory
Table Type: EXTERNAL_TABLE
Table Parameters:
EXTERNAL TRUE
transient_lastDdlTime 1438579844
- criando diretório no HDFS para carregar dados para a fábrica de tabelas
[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'
- dados da tabela
cat factory1.txt
emp1,500,40
emp2,501,45
emp3,502,50
cat factory2.txt
EMP10,200,25
EMP11,201,27
EMP12,202,30
- copiando do local para o 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'
- Alterando a tabela para atualizar no 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
Agora criei um novo arquivo factory3.txt para adicionar como nova partição para a tabela de fábrica
cat factory3.txt
user1,100,25
user2,101,27
user3,102,30
- criando o caminho e copiando dados da tabela
[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'
agora executei a consulta abaixo para atualizar o metastore para a nova partição adicionada
MSCK REPAIR TABLE factory;
Agora a tabela não está fornecendo o novo conteúdo da partição do arquivo factory3. Posso saber onde estou cometendo um erro ao adicionar uma partição para a fábrica de tabelas?
enquanto que, se eu executar o comando alter, ele estará mostrando os novos dados da partição.
hive> alter table f,actory add partition(region='eastregion') location '/user/hive/testing/testing1/factory3';
Posso saber por que o comando MSCK REPAIR TABLE não está funcionando?