Hive ETL: Ładowanie przykładów JSON, XML i danych tekstowych

⚡ Inteligentne podsumowanie

Hive ETL przekształca pliki tekstowe, XML i JSON w tabele z możliwością zapytania, ładując je do Hive itracwartości za pomocą xpath() i get_json_object(), co zapewnia analitykom interfejs SQL dla półustrukturyzowanych danych Hadoop.

  • 🧱 Ładunki strukturalne: Plik tekstowy z ograniczeniami staje się tabelą z opcją ROW FORMAT DELIMITED plus FIELDS TERMINATED BY, a następnie LOAD DATA LOCAL INPATH.
  • 🏷️ Przykład XMLtraccja: Pojedyncza kolumna STRING zawiera każdy dokument XML, a funkcja xpath() pobiera wartości z nazwanych tagów.
  • 🔑 JSON extraccja: Funkcja get_json_object() odczytuje jedno wyrażenie JSONPath na wywołanie, więc każde pole wymaga osobnego wywołania.
  • 🪜 Zagnieżdżone ładunki: Złożone obiekty JSON ładują się dokładnie w ten sam sposób, a hierarchia jest przeglądana za pomocą wyrażeń JSONPath z kropkami.
  • 📍 Zasady ścieżki: Słowo kluczowe LOCAL odczytuje ścieżkę z systemu plików Linux, natomiast jego pominięcie rozwiązuje ścieżkę w systemie HDFS.
  • 🎯 Gdzie to pasuje: Hive nadaje się do wsadowego magazynowania danych i półustrukturyzowanego ETL, a nie do wyszukiwania rekordów o niskim opóźnieniu.

Hive ETL: ładowanie danych JSON, XML i tekstowych

Hive jako narzędzie ETL i magazynowania danych na platformie Hadoop Ekosystem zapewnia funkcjonalności takie jak modelowanie danych, manipulacja danymi, przetwarzanie danych i wyszukiwanie danych. Dane extracW Hive oznacza to tworzenie tabel w Hive i ładowanie ustrukturyzowanych i półustrukturyzowanych danych, a także wykonywanie zapytań dotyczących danych na podstawie wymagań.

W przypadku przetwarzania wsadowego napiszemy niestandardowe skrypty, używając niestandardowych skryptów map i redukcji w języku skryptowym. Zapewnia to SQL jak środowisko i obsługa łatwego wysyłania zapytań.

Praca z danymi strukturalnymi przy użyciu Hive

Ustrukturyzowane dane oznaczają, że dane mają odpowiedni format wierszy i kolumn. To jest bardziej jak RDBMS dane z odpowiednimi wierszami i kolumnami.

Tutaj załadujemy ustrukturyzowane dane zawarte w plikach tekstowych w Hive.

Krok 1) Na tym etapie tworzymy tabelę „employees_guru” z nazwami kolumn, takimi jak Id, Imię, Wiek, Adres, Wynagrodzenie i Dział pracowników z typami danych.

Tworzenie tabeli employees_guru i ładowanie pliku Employees.txt w Hive

Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy:

  1. Utworzenie tabeli „employees_guru”
  2. Ładowanie danych z pliku Employees.txt do tabeli „employees_guru”

Krok 2) W tym kroku wyświetlamy zawartość zapisaną w tej tabeli za pomocą polecenia „Select”. Zawartość tabeli można zobaczyć na poniższym zrzucie ekranu.

Wybierz wynik zapytania pokazujący wiersze tabeli Hive employees_guru

Przykładowy fragment kodu

Zapytania do wykonania

1) Create table employees_guru(Id INT, Name STRING, Age INT, Address STRING, Salary FLOAT, Department STRING)
> Row format delimited
> Fields terminated by ',';
2) load data local inpath '/home/hduser/Employees.txt' into TABLE employees_guru;
3) select * from employees_guru;

Praca z danymi półustrukturyzowanymi przy użyciu Hive (XML, JSON)

Hive wykonuje funkcjonalności ETL w ekosystemie Hadoop, działając jako Narzędzie ETLW niektórych typach aplikacji wdrożenie MapReduce może być trudne; Hive może zredukować tę złożoność i zapewnić najlepsze rozwiązanie dla aplikacji IT w sektorze magazynowania danych.

Dane półstrukturalne, takie jak XML i JSON, można przetwarzać z mniejszą złożonością za pomocą Hive. Najpierw zobaczymy, jak możemy wykorzystać Hive do… XML.

XML do tabeli Hive

W tym przypadku załadujemy dane XML do tabel Hive i pobierzemy wartości przechowywane w tagach XML.

Krok 1) Utworzenie tabeli „xmlsample_guru” z kolumną str o typie danych string.

Tworzenie tabeli xmlsample_guru i ładowanie pliku test.xml do Hive

Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy:

  1. Utworzenie tabeli „xmlsample_guru”
  2. Ładowanie danych z pliku test.xml do tabeli „xmlsample_guru”

Krok 2) Korzystanie z XPath Metodą xpath() będziemy mogli pobrać dane zapisane w znacznikach XML.

Zapytanie xpath() zwracające wartości ename i esal z kolumny XML

Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy:

  1. Używając metody xpath() pobieramy wartości przechowywane w /emp/esal/ i /emp/ename/
  2. Wartości obecne w znacznikach XML. W tym kroku wyświetlamy rzeczywiste wartości zapisane w znacznikach XML w tabeli „xmlsample_guru”.

Należy pamiętać, że xpath() zwraca tablicę ciągów znaków; xpath_string(), xpath_int() i xpath_double() zwracają pojedynczą wartość typu.

Krok 3) W tym kroku pobierzemy i wyświetlimy surowy kod XML tabeli „xmlsample_guru”.

Surowe dokumenty XML przechowywane w kolumnie str xmlsample_guru

Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy:

  • Rzeczywiste dane XML wyświetlane ze znacznikami
  • Jeśli zaobserwujemy pojedynczy znacznik, to będzie on miał znacznik nadrzędny „emp” oraz znaczniki podrzędne „ename” i „esal”.

Code skrawek:

Zapytania do wykonania

1) create table xmlsample_guru(str string);                                                                                                   2) load data local inpath '/home/hduser/test.xml' overwrite  into table xmlsample_guru;
3) select xpath(str,'emp/ename/text()'), xpath(str,'emp/esal/text()') from xmlsample_guru;

JSON (JavaNotacja obiektu skryptu)

Dane z mediów społecznościowych i stron internetowych są powszechnie przechowywane w formacie JSON. Za każdym razem, gdy próbujemy pobrać dane z serwerów online, zwracane są pliki JSON. Używając Hive jako magazynu danych, możemy ładować dane JSON do tabel Hive, tworząc schematy.

JSON do tabeli Hive

W tym artykule załadujemy dane JSON do tabel Hive i pobierzemy wartości przechowywane w schemacie JSON.

Krok 1) W tym kroku utworzymy tabelę JSON o nazwie „json_guru”. Po jej utworzeniu ładujemy i wyświetlamy zawartość właściwego schematu.

Tworzenie json_guru, ładowanie pliku test.json i wyświetlanie schematu JSON

Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy:

  1. Utworzenie tabeli „json_guru”
  2. Ładowanie danych z pliku test.json do tabeli „json_guru”
  3. Wyświetlanie rzeczywistego schematu pliku JSON zapisanego w tabeli json_guru

Krok 2) Za pomocą metody get_json_object() możemy pobrać wartości danych przechowywane w hierarchii JSON.

get_json_object() wyświetla listę ecode, ename i salary z json_guru

Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy:

  1. Używając get_json_object(str,'$.ecode'), można pobrać wartości ecode z tabeli json_guru. Analogicznie, używając get_json_object(str,'$.ename') i get_json_object(str,'$.sal'), można pobrać wartości ename i sal z tabeli json_guru.
  2. Wartości przechowywane w hierarchii JSON w json_guru

Ponieważ get_json_object() analizuje dokument raz na wywołanie, json_tuple() jest tańsze, gdy potrzebnych jest kilka kluczy, a JSON SerDe mapuje dokument na kolumny o określonym typie w momencie ładowania.

Code skrawek

Zapytania do wykonania

1) create table json_guru(str string);
2) load data inpath 'home/hduser/test.json' into table json_guru;
3) select * from json_guru;
4) select get_json_object(str,'$.ecode') as ecode, get_json_object(str,'$.ename') as ename ,get_json_object(str,'$.sal') as salary from json_guru;

Złożona tabela JSON do Hive

W tym artykule załadujemy złożone dane JSON do tabel Hive i pobierzemy wartości przechowywane w schemacie JSON.

Krok 1) Tworzenie complexjson_guru z polem jednokolumnowym.

Tworzenie complexjson_guru i ładowanie emp.json do tabeli Hive

Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy:

  1. Utworzenie tabeli complexjson_guru z pojedynczym polem kolumny jako typem danych ciągu
  2. Ładowanie danych do complexjson_guru z pliku JSON emp.json

Krok 2) Używając get_json_object możemy pobrać faktyczną zawartość przechowywaną w hierarchii plików JSON.

Na poniższym zrzucie ekranu możemy zobaczyć dane wyjściowe zapisane w complexjson_guru.

ExtracEkod ted i zagnieżdżone wartości kluczy ze złożonego dokumentu JSON

Krok 3) W tym kroku, używając polecenia „Select”, możemy zobaczyć złożone dane JSON zapisane w tabeli „complexjson_guru”.

Wybierz dane wyjściowe pokazujące surowe, złożone wiersze JSON w complexjson_guru

Przykładowy fragment kodu

Zapytania do wykonania

1) create table complexjson_guru(json string);
2) load data inpath 'home/hduser/emp.json' into table complexjson_guru;
3) select get_json_object(json,'$.ecode') as ecode ,get_json_object(json,'$.b') as code, get_json_object(json,'$.c') from complexjson_guru;
4) select * from complexjson_guru;

Projekty Hive w czasie rzeczywistym – kiedy i gdzie używać

Kiedy i gdzie używać Hive w ekosystemie Hadoop:

Kiedy

  • Podczas pracy z silnymi i wydajnymi funkcjami statystycznymi w ekosystemie Hadoop
  • Podczas pracy z przetwarzaniem danych ustrukturyzowanych i półustrukturyzowanych
  • Jako narzędzie magazynu danych z Hadoop
  • Pobieranie danych w czasie rzeczywistym za pomocą HBase, gdzie można używać Hive

Gdzie

  • Dla łatwości użytkowania jako narzędzie ETL i magazynowania danych
  • Aby zapewnić środowisko typu SQL i wykonywać zapytania podobne do SQL przy użyciu HiveQL
  • Aby używać i wdrażać niestandardowe skrypty map i reduktorów dla określonych wymagań klienta

FAQ

Polecenie LOCAL kopiuje plik z systemu plików komputera klienta. Bez polecenia LOCAL, Hive traktuje ścieżkę jako HDFS i przenosi plik, więc ścieżka względna jest rozwiązywana w systemie plików HDFS użytkownika.

Funkcja json_tuple() jest zazwyczaj szybsza: analizuje dokument raz i zwraca kilka kluczy jednocześnie, podczas gdy get_json_object() analizuje ponownie ciąg dla każdego pola. Użyj get_json_object() dla pojedynczej wartości.

Nie. Wystarczy pojedyncza kolumna STRING i funkcje JSON. SerDe, taki jak org.apache.hive.hcatalog.data.JsonSerDe, obsługuje powtarzające się zapytania produkcyjne, mapowanieping klawisze do wpisywanych kolumn są wprowadzane jednorazowo, zamiast przy każdym odczycie.

Zazwyczaj jest to ładnie wydrukowany plik: Hive oczekuje jednego kompletnego dokumentu JSON w każdym wierszu, więc dokument podzielony na wiersze staje się nieprawidłowym wierszem. Błędnie wpisany klucz lub nieprawidłowa wielkość liter w ścieżce JSONPath powoduje to samo.

Funkcja xpath() zawsze zwraca tablicę ciągów znaków. Zamiast tego użyj wariantu z określonym typem: xpath_string(), xpath_int(), xpath_long(), xpath_float(), xpath_double() lub xpath_boolean(). Każda z nich zwraca jeden skalar tego typu.

Zewnętrzny jest bezpieczniejszy dla surowych danych lądowania, ponieważ upuszczanieping Tabela pozostawia pliki na swoim miejscu. Zarządzana tabela usuwa swój katalog danych podczas DROP — wygodne w przypadku tabel roboczych, ale destrukcyjne w przypadku plików współdzielonych.

Narzędzia uczenia maszynowego profilują pliki przykładowe, aby wnioskować o typach, oznaczać rzadkie klucze i proponować kolumny partycji na podstawie wzorców zapytań. Dane wyjściowe należy traktować jako wersję roboczą — typy i partycje nadal wymagają sprawdzenia w odniesieniu do rzeczywistych woluminów.

Generuje polecenia CREATE TABLE, LOAD DATA i wyrażenia JSONPath z przykładowego rekordu wklejonego do edytora. Nie widzi klastra, więc nazwy, ścieżki i pisownia kluczy wymagają wcześniejszej weryfikacji.

Podsumuj ten post następująco: