Pytanie Ładowanie danych z pliku .txt do tabeli Zapisane jako ORC w gałęzi


Mam plik danych, który jest w .txt format. Używam tego pliku do ładowania danych do tabel Hive. Kiedy ładuję plik w tabeli jak

CREATE TABLE test_details_txt(
visit_id INT,
store_id SMALLINT) STORED AS TEXTFILE;

dane są poprawnie ładowane za pomocą

LOAD DATA LOCAL INPATH '/home/user/test_details.txt' INTO TABLE test_details_txt;

i mogę uruchomić SELECT * FROM test_details_txt; na stole w Hive.

Jednak jeśli próbuję załadować dane w tabeli, która jest

CREATE TABLE test_details_txt(
visit_id INT,
store_id SMALLINT) STORED AS ORC; 

Podczas próby uruchomienia SELECT pojawia się następujący błąd:

Failed with exception java.io.IOException:java.io.IOException: Malformed ORC file hdfs://master:6000/user/hive/warehouse/test.db/transaction_details/test_details.txt. Invalid postscript.

Podczas ładowania danych za pomocą powyższej instrukcji LOAD nie otrzymuję żadnego błędu ani wyjątku.

Jest tu cokolwiek innego, co trzeba zrobić podczas korzystania z LOAD DATA IN PATH.. polecenie do przechowywania danych do tabeli ORC?


31
2018-02-12 07:23


pochodzenie


Czy możesz opublikować swoje CREATE TABLE, LOAD DATA, i SELECT zapytania? - Sunny Nanda
Gotowe. Sprawdź teraz. - Neels


Odpowiedzi:


LOAD DATA po prostu kopiuje pliki do plików danych ula. Hive nie dokonuje żadnej transformacji podczas ładowania danych do tabel.

Tak więc w tym przypadku plik wejściowy /home/user/test_details.txt musi być w formacie ORC, jeśli ładujesz go do tabeli ORC.

Możliwym rozwiązaniem jest utworzenie tabeli tymczasowej z STORED AS TEXT, następnie LOAD DATA do niego, a następnie skopiuj dane z tej tabeli do tabeli ORC.

Oto przykład:

CREATE TABLE test_details_txt( visit_id INT, store_id SMALLINT) STORED AS TEXTFILE;
CREATE TABLE test_details_orc( visit_id INT, store_id SMALLINT) STORED AS ORC;

-- Load into Text table
LOAD DATA LOCAL INPATH '/home/user/test_details.txt' INTO TABLE test_details_txt;

-- Copy to ORC table
INSERT INTO TABLE test_details_orc SELECT * FROM test_details_txt;

53
2018-02-12 07:50



Tak, już zrobiłem to podejście do tabeli tymczasowej. Dzięki temu mogę ładować dane w tabeli ORC przy użyciu innej tabeli Hive TXT. Interesuje mnie znalezienie sposobu bezpośredniego wczytywania danych do tabeli ORC z pliku. Czy przechowywanie pliku wejściowego w formacie ORC pomaga? Nie próbowałem go jeszcze. - Neels
Tak, jak wspomniano w odpowiedzi, możesz zachować plik wejściowy w formacie ORC i po prostu ZAŁADUJ go do tabeli ORC. - Sunny Nanda


Kroki:

  1. Najpierw utwórz tabelę przy użyciu zapisanego jako TEXTFILE (tj. Domyślnie lub w jaki format chcesz utworzyć tabelę)
  2. Załaduj dane do tabeli tekstowej.
  3. Stwórz tabelę używając zapisanego jako ORC jako wybierz * z text_table;
  4. Wybierz * z tabeli orc.

Przykład:

CREATE TABLE text_table(line STRING);

LOAD DATA 'path_of_file' OVERWRITE INTO text_table;

CREATE TABLE orc_table STORED AS ORC AS SELECT * FROM text_table;

SELECT * FROM orc_table;   /*(it can not be read)*/

4
2017-07-27 07:47





Ponieważ Hive nie dokonuje żadnych przekształceń w naszych danych wejściowych, format musi być taki sam: albo plik powinien być w formacie ORC, albo możemy załadować dane z pliku tekstowego do tabeli tekstowej w Hive.


1
2018-03-29 13:34





Kroki, aby załadować dane do formatu pliku ORC w ulu

1. Stwórz jedną normalną tabelę przy użyciu formatu textFile

2. Przesyłaj dane normalnie do tej tabeli

3. Stwórz jedną tabelę ze schematem oczekiwanych wyników normalnej tabeli ula, używając pliku przechowywanego jako orc

4. Wstaw kwerendę nadpisującą, aby skopiować dane z tabeli textFile do tabeli plików orc

Zapoznaj się z blogiem, aby dowiedzieć się, jak załadować dane do wszystkich formatów plików w ulu

Załaduj dane do wszystkich formatów plików w ulu


0
2017-12-09 07:40





Plik ORC jest binarnym formatem pliku, więc nie można bezpośrednio załadować plików tekstowych do tabel ORC. ORC oznacza Optimized Row Columnar, co oznacza, że ​​może przechowywać dane w zoptymalizowany sposób, niż inne formaty plików. ORC zmniejsza rozmiar oryginalnych danych do 75%. W rezultacie zwiększa się szybkość przetwarzania danych. ORC pokazuje lepszą wydajność niż formaty plików tekstowych, sekwencyjnych i RC. Plik ORC zawiera dane wierszy w grupach zwanych jako paski wraz ze stopką pliku. Format ORC poprawia wydajność, gdy Hive przetwarza dane.

Najpierw należy utworzyć jedną normalną tabelę jako textFile, załadować dane do tabeli textFile, a następnie można użyć kwerendy wstawiania wstawiania, aby zapisać dane do pliku ORC.

create table table_name1 (schema of the table) row format delimited by ',' | stored as TEXTFILE

create table table_name2 (schema of the table) row format delimited by ',' | stored as ORC

load data local inpath ‘path of your file’ into table table_name1;(loading data from a local system)

INSERT OVERWRITE TABLE table_name2 SELECT * FROM table_name1;

Teraz wszystkie twoje dane będą przechowywane w pliku ORC. Podobna procedura jest stosowana do wszystkich formatów plików binarnych, tj. Plików sekwencji, plików RC i plików parkietu w gałęzi.

Aby uzyskać więcej informacji, skorzystaj z linku poniżej.

https://acadgild.com/blog/file-formats-in-apache-hive/


-1
2017-07-05 07:18



Cześć .. Ta sama odpowiedź została już wysłana !! Dzięki - Neels
Cześć ... jest to uniwersalna odpowiedź, którą miałem powiedzieć, że to samo działa dla wszystkich plików binarnych i wyjaśnił wyraźnie przy użyciu bloga. Dziękuję Ci. - Kiran Krishna Innamuri