2012-10-30 23 views
8

Mam plik dziennika w systemie plików HDFS, wartości są rozdzielane przecinkami. Na przykład:Ładowanie gałęzi w podzielonej na partycje tabeli

2012-10-11 12:00,opened_browser,userid111,deviceid222

Teraz chcę, aby załadować ten plik do ula stołowego, które kolumny „timestamp”, „działanie” i podzielono przez „id_uzytkownika”, „DeviceID”. W jaki sposób mogę poprosić Hive, aby zabrał 2 ostatnie kolumny w pliku dziennika jako partycję dla tabeli? Wszystkie przykłady e.g. "hive> LOAD DATA INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');" wymagają definicji partycji w skrypcie, ale chcę, aby partycje były konfigurowane automatycznie z pliku HDFS.

Jedynym rozwiązaniem jest utworzenie pośredniej niepartycjonowanej tabeli z wszystkimi czterema kolumnami, wypełnienie jej z pliku, a następnie utworzenie INSERT into first_table PARTITION (userid,deviceid) select from intermediate_table timestamp,action,userid,deviceid;, ale to jest i dodatkowe zadanie, a będziemy mieć 2 bardzo podobne tabele .. Lub powinniśmy stworzyć zewnętrzny stół jako pośredni.

Odpowiedz

12

Ning Zhang ma świetną odpowiedź na ten temat pod adresem http://grokbase.com/t/hive/user/114frbfg0y/can-i-use-hive-dynamic-partition-while-loading-data-into-tables.

Szybkie kontekst jest to, że:

  1. dane obciążenia po prostu kopiuje dane, nie czytać, więc nie może dowiedzieć się, co do podziału
  2. sugerowałoby, że załadowanie danych do tabeli pośredniej pierwszy (lub użycie zewnętrznej tabeli wskazującej wszystkie pliki), a następnie zezwolenie na wstawienie dynamicznej wstawki partycji, aby załadować ją do tabeli podzielonej na partycje.
+0

Dzięki, Denny. W ten sposób rozwiązałem ten problem - za pomocą zewnętrznej tabeli wskazującej na plik surowy, a następnie dane z niego wstawiono do podzielonej na partycje tabeli z wybranymi partycjami. Jest to jedyne proste rozwiązanie takiego przypadku. –

+0

Fajne rzeczy - cieszę się, że się udało, co ?! –

+0

Tak, to jest magia :) Rozwiązałem go w tym samym czasie, kiedy dodałeś swój komentarz :) Może możesz mi pomóc z innym problemem? http://stackoverflow.com/questions/13240409/hadoop-eof-exception-after-map-step –

1

Ten sam scenariusz został opracowany, ale zamiast tego, stworzyliśmy oddzielny Pliki danych HDFS dla każdej partycji musisz załadować.

Ponieważ nasze dane pochodzą z zadania MapReduce, użyliśmy MultipleOutputs w naszej klasie Reducer, aby zmultipleksować dane do odpowiadających im plików partycji. Później chodzi tylko o zbudowanie skryptu przy użyciu partycji z nazwy pliku HDFS.

0
  1. Jak wspomniano w odpowiedzi @Denny Lee, musimy zaangażować tabelę pomostowy (invites_stg) zarządzanej lub zewnętrzne, a następnie włóż z tabeli tymczasowej do zaproszeń podzielono tabeli (w tym przypadku).

  2. Upewnij mamy te dwie właściwości ustawione na: SET hive.exec.dynamoc.partition = true SET hive.exec.dynamic.partition.mode = nonstrict

  3. I wreszcie wstawić na zaproszenia, WSTAW NADAWAĆ TABELĘ Indie PARTYCJA (PAŃSTWO) WYBIERZ KOLEKA Z invite_stg;

Patrz link o pomoc: http://www.edupristine.com/blog/hive-partitions-example

Powiązane problemy