2014-11-03 23 views
5

İlk ben kodu ve tarihkovan dış bölümlenmiş tablo

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'; 

tarafından bölümlenmiş kovan dış tablo oluşturulur ve sonra ben eklemek diğer masanın

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

gelen ve bu i sonra veri alarak bu masada üzerine yürütmek kovandaki kayıt sayısını saymak XYZ seçim sayısını (*); 1000 kayıtları vardır ve sonra ben yeniden adlandırmak veya '/ new_work/XYZ'

ve sonra tekrar açılan XYZ masaya konumu '/ old_work/ABC' taşımak ve tekrar yeni dizine mevkilerini belirtmek oluşturulan bana gösteriyor vasıta '/ new_work/ABC'

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'; 

Ama kovanında XYZ tablodan select count (*) yürüttüğünüzde sonra, 0 kayıt, ben bir şey kaçırmış düşünüyorum gösterir, bu konuda bana yardım edin ?? ??

cevap

5

Tabloyu bırak ve ona ikinci kez yeniden oluşturmak gerekmez: Senin durumunda

msck repair table <table_name> 

: sadece bunu kısa sürede siz hareket ettikçe

veya tablonun bir dış HDF'ler konumunu yeniden adlandırmak hata, çünkü kovan metastore yeni yol ile güncellendi değildi.

+0

Neden olmasa da güncellenemedi? Buna bakıyorum ve bunun neden işe yaramayacağına dair bir sebep göremiyorum ... – Avius