Hive ETL: JSON, XML, szöveges adatpéldák betöltése

⚡ Okos összefoglaló

A Hive ETL szöveges, XML és JSON fájlokat alakít lekérdezhető táblázatokká a Hive-ba és ex-be való betöltésükkel.tracértékek kinyerése az xpath() és a get_json_object() függvényekkel, így az elemzők egy SQL interfészt kapnak félig strukturált Hadoop adatokon keresztül.

  • 🧱 Strukturált terhelések: Egy elválasztott szövegfájl táblázattá válik a következő értékekkel: ROW FORMAT DELIMITED plus FIELDS TERMINATED BY, majd LOAD DATA LOCAL INPATH.
  • 🏷️ XML példatracmegad: Egyetlen STRING oszlop tartalmazza az egyes XML dokumentumokat, és az xpath() az elnevezett címkékből húzza ki az értékeket.
  • 🔑 JSON extracmegad: A get_json_object() függvény hívásonként egy JSONPath kifejezést olvas be, így minden mezőhöz külön hívás szükséges.
  • 🪜 Beágyazott hasznos adatok: Az összetett JSON pontosan ugyanúgy töltődik be, és a hierarchiát pontozott JSONPath kifejezésekkel járjuk be.
  • 📍 Útvonal szabályok: A LOCAL kulcsszó a Linux fájlrendszerből olvas, míg elhagyása a HDFS-en lévő elérési utat oldja fel.
  • 🎯 Ahol illik: A Hive inkább a kötegelt raktározáshoz és a félig strukturált ETL-hez illik, mint az alacsony késleltetésű rekordkeresésekhez.

Hive ETL: JSON, XML és szöveges adatok betöltése

A Hive, mint ETL és adattárház eszköz a rendszer tetején Hadoop Az ökoszisztéma olyan funkciókat biztosít, mint az adatmodellezés, az adatmanipuláció, az adatfeldolgozás és az adatlekérdezés. AdatböngészéstracA Hive-ban a bevitel táblák létrehozását, strukturált és félig strukturált adatok betöltését, valamint az adatok lekérdezését jelenti a követelmények alapján.

Kötegelt feldolgozáshoz egyénileg definiált szkripteket fogunk írni egyéni map használatával, és szkriptnyelven redukáljuk a szkripteket. Ez egy SQL mint a környezet és az egyszerű lekérdezés támogatása.

Strukturált adatok kezelése Hive használatával

A strukturált adat azt jelenti, hogy az adatok a megfelelő sor- és oszlopformátumban vannak. Ez inkább a következőhöz hasonló: RDBMS adatok megfelelő sorokkal és oszlopokkal.

Itt fogjuk betölteni a Hive szövegfájljaiban található strukturált adatokat.

Step 1) Ebben a lépésben létrehozzuk az „employees_guru” táblát olyan oszlopnevekkel, mint az Id, Név, Életkor, Cím, Fizetés és Osztály az alkalmazottak adattípusaival.

Az employees_guru tábla létrehozása és az Employees.txt betöltése a Hive-ban

A fenti képernyőképből a következőket figyelhetjük meg:

  1. Az „employees_guru” tábla létrehozása
  2. Adatok betöltése az Employees.txt fájlból az „employees_guru” táblába

Step 2) Ebben a lépésben a „Select” parancs segítségével jelenítjük meg a táblázatban tárolt tartalmat. A táblázat tartalmát a következő képernyőképen figyelhetjük meg.

A employees_guru Hive tábla sorait megjelenítő lekérdezés kimenetének kiválasztása

Minta kódrészlet

Elvégzendő lekérdezések

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;

Félig strukturált adatokkal való munka Hive használatával (XML, JSON)

A Hive ETL funkciókat lát el a Hadoop ökoszisztémában azáltal, hogy egy ETL eszközBizonyos alkalmazástípusokban nehézkes lehet a MapReduce végrehajtása; a Hive csökkentheti ezt a bonyolultságot, és a legjobb megoldást kínálja az IT-alkalmazások számára az adattárház szektor szempontjából.

A félig strukturált adatok, mint például az XML és a JSON, kevésbé bonyolultan feldolgozhatók a Hive segítségével. Először megnézzük, hogyan használhatjuk a Hive-ot a következőkre: XML.

XML-ből Hive táblába

Ebben az XML-adatokat fogjuk betölteni a Hive-táblázatokba, és lekérjük az XML-címkékben tárolt értékeket.

Step 1) „xmlsample_guru” tábla létrehozása str adattípusú str oszloppal.

Az xmlsample_guru tábla létrehozása és a test.xml betöltése a Hive-ba

A fenti képernyőképből a következőket figyelhetjük meg:

  1. Az „xmlsample_guru” tábla létrehozása
  2. Adatok betöltése a test.xml fájlból az „xmlsample_guru” táblába

Step 2) az XPath Az xpath() metódussal lekérhetjük az XML címkékben tárolt adatokat.

xpath() lekérdezés, amely az XML oszlop ename és esal értékeit adja vissza

A fenti képernyőképből a következőket figyelhetjük meg:

  1. Az xpath() metódus használatával lekérjük az /emp/esal/ és /emp/ename/ alatt tárolt értékeket.
  2. XML címkékben található értékek. Ebben a lépésben az „xmlsample_guru” táblázatban XML címkék alatt tárolt tényleges értékeket jelenítjük meg.

Megjegyzendő, hogy az xpath() függvény karakterláncok tömbjét adja vissza; az xpath_string(), az xpath_int() és az xpath_double() függvények pedig egyetlen típusos értéket adnak vissza.

Step 3) Ebben a lépésben lekérjük és megjelenítjük az „xmlsample_guru” tábla nyers XML-jét.

A nyers XML dokumentumok az xmlsample_guru str oszlopában tárolódnak.

A fenti képernyőképből a következőket figyelhetjük meg:

  • A tényleges XML adatok megjelenítése címkékkel
  • Ha egyetlen címkét figyelünk meg, akkor annak a szülőcímke az „emp”, az alárendelt címkék pedig az „ename” és az „esal”.

Code töredék:

Elvégzendő lekérdezések

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 (JavaScript objektum jelölés)

A közösségi média és a weboldalak adatait általában JSON formátumban tárolják. Amikor online szerverekről próbálunk adatokat letölteni, JSON fájlokat adunk vissza. A Hive adattárolóként való használatával sémák létrehozásával JSON adatokat tölthetünk be a Hive táblázatokba.

JSON-ból Hive táblába

Ebben JSON adatokat fogunk betölteni a Hive táblákba, és lekérjük a JSON sémában tárolt értékeket.

Step 1) Ebben a lépésben létrehozunk egy „json_guru” nevű JSON-táblát. Létrehozás után betöltjük és megjelenítjük a tényleges séma tartalmát.

json_guru létrehozása, test.json betöltése és JSON séma megjelenítése

A fenti képernyőképből a következőket figyelhetjük meg:

  1. A „json_guru” tábla létrehozása
  2. Adatok betöltése a test.json fájlból a „json_guru” táblába
  3. A json_guru táblában tárolt JSON fájl tényleges sémájának megjelenítése

Step 2) A get_json_object() metódus segítségével lekérhetjük a JSON hierarchiában tárolt adatértékeket.

get_json_object() kimenet, amely felsorolja a json_guru által generált ecode-ot, ename-et és salary-t

A fenti képernyőképből a következőket figyelhetjük meg:

  1. A get_json_object(str,'$.ecode') használatával a json_guru táblából kérhető le az ecode értékek. Hasonlóképpen, a get_json_object(str,'$.ename') és a get_json_object(str,'$.sal') használatával a json_guru táblából kérhető le az ename és sal értékek.
  2. A JSON hierarchiában a json_guru fájlban tárolt értékek

Mivel a get_json_object() függvény hívásonként egyszer elemzi a dokumentumot, a json_tuple() függvény olcsóbb, ha több kulcsra van szükség, és egy JSON SerDe függvény a dokumentumot betöltéskor típusos oszlopokra képezi le.

Code töredék

Elvégzendő lekérdezések

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;

Komplex JSON-ból Hive táblába

Ebben a lépésben összetett JSON adatokat fogunk betölteni a Hive táblákba, és lekérjük a JSON sémában tárolt értékeket.

Step 1) Egyetlen oszlopmezővel rendelkező complexjson_guru létrehozása.

A complexjson_guru létrehozása és az emp.json betöltése a Hive táblába

A fenti képernyőképből a következőket figyelhetjük meg:

  1. Egyetlen oszlopmezővel karakterlánc adattípusú complexjson_guru tábla létrehozása
  2. Adatok betöltése a complexjson_guru-ba az emp.json komplex JSON fájlból

Step 2) A get_json_object használatával lekérhetjük a JSON fájlhierarchiában tárolt tényleges tartalmat.

A következő képernyőképen láthatjuk a complexjson_guru-ban tárolt adatok kimenetét.

Extracted ecode és beágyazott kulcsértékek az összetett JSON dokumentumból

Step 3) Ebben a lépésben a „Select” parancs használatával megtekinthetjük a „complexjson_guru” táblában tárolt összetett JSON adatokat.

Nyers komplex JSON sorokat megjelenítő kimenet kiválasztása a complexjson_guru-ban

Minta kódrészlet

Elvégzendő lekérdezések

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;

Hive valós idejű projektekben – Mikor és hol használható

Mikor és hol használjuk a Hive-ot a Hadoop ökoszisztémában:

Amikor

  • Ha erős és hatékony statisztikai függvényekkel dolgozunk a Hadoop ökoszisztémán
  • Strukturált és félig strukturált adatfeldolgozás esetén
  • Adattárház eszközként Hadoop segítségével
  • Valós idejű adatfeldolgozás HBase-zel, ahol a Hive is használható

Hol

  • Az ETL és adattárház eszközként való egyszerű használat érdekében
  • SQL típusú környezet biztosítása és SQL-hez hasonló lekérdezések HiveQL használatával
  • Egyénileg megadott térkép- és reduktorszkriptek használata és telepítése adott ügyféligényekhez

GYIK

A LOCAL paraméterrel a fájl a kliens gép fájlrendszeréből másolva jelenik meg. LOCAL nélkül a Hive HDFS-ként kezeli az elérési utat, és áthelyezi a fájlt, így egy relatív elérési út a felhasználó HDFS-alapkönyvtárához kerül feloldásra.

A json_tuple() általában gyorsabb: egyszer elemzi a dokumentumot, és több kulcsot ad vissza egyszerre, míg a get_json_object() minden mezőhöz újra elemzi a karakterláncot. Egyetlen értékhez használd a get_json_object() függvényt.

Nem. Egyetlen STRING oszlop plusz a JSON függvények működnek. Egy SerDe, mint például az org.apache.hive.hcatalog.data.JsonSerDe, alkalmas ismételt éles lekérdezésekre, mapping a kulcsokat a típusos oszlopokra csak egyszer, nem pedig minden olvasáskor kell ráhelyezni.

Általában egy szépen kinyomtatott fájl: A Hive soronként egy teljes JSON dokumentumot vár, így a sorokra osztott dokumentum érvénytelen sorokká válik. A JSONPath-ban elgépelt kulcs vagy rossz kis- és nagybetűhasználat is ugyanezt teszi.

Az xpath() mindig karakterláncok tömbjét adja vissza. Használjon helyette egy típusos változatot: xpath_string(), xpath_int(), xpath_long(), xpath_float(), xpath_double() vagy xpath_boolean(). Mindegyik egy adott típusú skalárt ad vissza.

A külső megoldás biztonságosabb a nyers leszállási adatokhoz, mivel a dropping A tábla a fájlokat a helyén hagyja. Egy felügyelt tábla törli az adatkönyvtárát a DROP parancs futtatásakor – ez kényelmes a vázlatos tábláknál, de káros a megosztott fájloknál.

A gépi tanulási eszközök profilokat készítenek a mintafájlokból a típusok kikövetkeztetéséhez, a ritka kulcsok megjelöléséhez és a partíciós oszlopok javaslatához a lekérdezési mintákból. A kimenetet vázlatként kezelik – a típusokat és a partíciókat továbbra is ellenőrizni kell a valós kötetekkel szemben.

CREATE TABLE utasításokat, LOAD DATA parancsokat és JSONPath kifejezéseket készít egy, a szerkesztőbe beillesztett mintarekordból. Nem látja a fürtöt, ezért először ellenőrizni kell a nevek, elérési utak és kulcsok helyesírását.

Foglald össze ezt a bejegyzést a következőképpen: