2014-11-03 10 views
5

Prima i creata tabella esterna alveare partizionata per codice e quellaalveare tabella partizionata esterno

CREATE EXTERNAL TABLE IF NOT EXISTS XYZ 
(
ID STRING, 
SAL BIGINT, 
NAME STRING, 

) 
PARTITIONED BY (CODE INT,DATE STRING) 
ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe' 
STORED AS 
INPUTFORMAT "parquet.hive.DeprecatedParquetInputFormat" 
OUTPUTFORMAT "parquet.hive.DeprecatedParquetOutputFormat" 
LOCATION '/old_work/XYZ'; 

e poi eseguo inserto sovrascrivere su questa tabella prendere i dati da altra tabella

INSERT OVERWRITE TABLE XYZ PARTITION (CODE,DATE) 
SELECT 
* 
FROM TEMP_XYZ; 

e dopo che i contare il numero di record nell'alveare selezionare il conteggio (*) da XYZ; mi mostra 1000 record ci sono e poi ho rinominare o spostare la posizione '/ old_work/XYZ' a '/ new_work/XYZ'

e poi ho di nuovo eliminare la tabella XYZ e ha creato di nuovo indicando luogo a nuova directory significa '/ new_work/XYZ'

CREATE EXTERNAL TABLE IF NOT EXISTS XYZ 
(
ID STRING, 
SAL BIGINT, 
NAME STRING, 

) 
PARTITIONED BY (CODE INT,DATE STRING) 
ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe' 
STORED AS 
INPUTFORMAT "parquet.hive.DeprecatedParquetInputFormat" 
OUTPUTFORMAT "parquet.hive.DeprecatedParquetOutputFormat" 
LOCATION '/new_work/XYZ'; 

Ma poi quando eseguo select count (*) dalla tabella XYZ in alveare, mostra 0 documenti penso che ho perso qualcosa, please help me su questo ?? ??

risposta

5

è necessario far cadere il tavolo e ri creare la seconda volta:

Non appena si sposta o rinominare un HDFS posizione esterna della tabella solo fare questo:

msck repair table <table_name> 

Nel tuo caso l'errore era perché, il metastore dell'alveare non era aggiornato con il nuovo percorso.

+0

Perché non dovrebbe essere aggiornato? Sto guardando questo e non vedo alcun motivo per cui questo non funzionerebbe ... – Avius