2014-05-21 6 views
5

Mamy nadzieję, że ktoś może mi pomóc w tworzeniu zewnętrznych tabel partycjonowanych HIVE, automatycznie dodając dane oparte na plikach rozdzielanych przecinkami, znajdujących się w katalogu HDFS. Moje zrozumienie, lub jego brak, polega na tym, że definiując UTWÓRZ STOLIKĘ ZEWNĘTRZNĄ, PARTYJOWĄ i udostępniając LOCATION, należy rekurencyjnie skanować/czytać każdy podkatalog i ładować dane do nowo utworzonej partycjonowanej tabeli zewnętrznej. Poniższa powinna zapewnić pewne dodatkowe wgląd moich kłopotów ...Stwórz tabelę podzielonego na partycje Pomoc w zakresie rozmieszczenia plików HDFS

Sample HDFS directory structure:<br> 
/data/output/dt=2014-01-01<br> 
/data/output/dt=2014-01-02<br> 
/data/output/dt=2014-01-03 ...<br> 
/data/output/dt=2014-05-21<br> 

I każdy „dt =” sub-katalog zawiera plik rozdzielany.

Oto przykład mojej instrukcji CREATE ZEWNĘTRZNEJ składni tabeli:

CREATE EXTERNAL TABLE master_test (UID string, 
    lname string, 
    fname string, 
    addr string, 
    city string, 
    state string, 
    orderdate string, 
    shipdate string) 

    PARTITIONED BY (dt STRING) 
    ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY ',' 
    STORED AS TEXTFILE 
    LOCATION '/data/output/'; 

Po stworzeniu mojej master_test tabeli zewnętrznej, myślałem, że wszyscy moi rozdzielany plików byłby już zawarty w tabeli na CREATE. Jedynym sposobem, w jaki mogę uzyskać dane do nowo zdefiniowanej tabeli zewnętrznej, jest instrukcja ALTER TABLE ADD PARTITION, na przykład: ALTER TABLE master_test ADD PARTITION (dt = '2014-04-16'). Lub, jeśli jawnie zdefiniuję położenie pliku rozdzielanego, doda pojedynczy plik do zdefiniowanej tabeli.

Wszelkie sugestie lub wskazówki są mile widziane.

Odpowiedz

6

Możesz użyć narzędzia MSCK REPAIR, aby automatycznie wykryć partycje. Spójrz na dokument: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-RecoverPartitions(MSCKREPAIRTABLE)

+1

Gwen, dziękuję. To działało jak czar! Z jakiegoś powodu, ponieważ jestem nowym członkiem, nie pozwoliłbym, aby głosować na twoją odpowiedź. – user3662090

+1

Bez obaw. zapłać dalej, odpowiadając na inne pytania :) –

+0

@GwenShapira Po przeczytaniu dokumentu/linku z podanego przez ciebie Apache'a nie wiedziałem, czy możliwe jest "dynamiczne" tworzenie partycji. Mam na myśli to, że można utworzyć nowy katalog say/data/output/dt = 2014-01-01. i automatycznie dodawać do przyszłych zapytań opartych na partycjach bez konieczności "dodawania" nowej partycji do definicji Hive. Wydaje się, że potencjał podobny do tego, jak błąd popełnienia "wielofazowego" może powodować kaskadowe niepowodzenia w RDBM. –

Powiązane problemy