Hive ETL: Indlæser JSON, XML, tekstdataeksempler

⚡ Smart opsummering

Hive ETL omdanner tekst-, XML- og JSON-filer til forespørgselsbaserede tabeller ved at indlæse dem i Hive og extracværdier med xpath() og get_json_object(), hvilket giver analytikere en SQL-grænseflade over semistrukturerede Hadoop-data.

  • 🧱 Strukturerede belastninger: En afgrænset tekstfil bliver til en tabel med ROW FORMAT DELIMITED plus FIELDS TERMINATED BY, og derefter LOAD DATA LOCAL INPATH.
  • 🏷️ XML-eksempeltraction: En enkelt STRING-kolonne indeholder hvert XML-dokument, og xpath() trækker værdier ud af de navngivne tags.
  • 🔑 JSON-eksemplartraction: get_json_object() læser ét JSONPath-udtryk pr. kald, så hvert felt skal bruge sit eget kald.
  • 🪜 Indlejrede nyttelaster: Kompleks JSON indlæses på præcis samme måde, og hierarkiet gennemgås med punkterede JSONPath-udtryk.
  • 📍 Stiregler: Nøgleordet LOCAL læser fra Linux-filsystemet, men hvis det udelades, løses stien på HDFS.
  • 🎯 Hvor det passer: Hive er mere egnet til batchlagring og semistruktureret ETL end opslag af poster med lav latenstid.

Hive ETL: Indlæsning af JSON-, XML- og tekstdata

Hive som et ETL- og datawarehousing-værktøj oven på Hadoop Økosystemet tilbyder funktioner som datamodellering, datamanipulation, databehandling og dataforespørgsler. Dataeks.traction i Hive betyder oprettelse af tabeller i Hive og indlæsning af strukturerede og semistrukturerede data samt forespørgsler på data baseret på kravene.

Til batchbehandling skal vi skrive brugerdefinerede scripts ved hjælp af brugerdefinerede map- og reduce-scripts i et scriptsprog. Det giver en SQL som miljø og support for nem forespørgsel.

Arbejde med strukturerede data ved hjælp af Hive

Strukturerede data betyder, at dataene er i det korrekte format af rækker og kolonner. Dette minder mere om RDBMS data med rigtige rækker og kolonner.

Her skal vi indlæse strukturerede data, der findes i tekstfiler i Hive.

Trin 1) I dette trin opretter vi tabellen "employees_guru" med kolonnenavne som Id, Navn, Alder, Adresse, Løn og Afdeling for de ansatte med datatyper.

Oprettelse af employees_guru-tabellen og indlæsning af Employees.txt i Hive

Fra ovenstående skærmbillede kan vi observere følgende:

  1. Oprettelse af tabellen "employees_guru"
  2. Indlæser data fra Employees.txt til tabellen “employees_guru”

Trin 2) I dette trin viser vi indholdet af tabellen ved hjælp af kommandoen "Select". Vi kan se tabellens indhold på følgende skærmbillede.

Udvalgsforespørgselsoutput, der viser rækker i Hive-tabellen employees_guru

Eksempelkodestykke

Forespørgsler, der skal udføres

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;

Arbejde med semistrukturerede data ved hjælp af Hive (XML, JSON)

Hive udfører ETL-funktionaliteter i Hadoop-økosystemet ved at fungere som en ETL værktøjDet kan være vanskeligt at udføre MapReduce i visse typer applikationer; Hive kan reducere denne kompleksitet og leverer den bedste løsning til IT-applikationer inden for data warehousing-sektoren.

Semistrukturerede data såsom XML og JSON kan behandles med mindre kompleksitet ved hjælp af Hive. Først vil vi se på, hvordan vi kan bruge Hive til XML.

XML til Hive-tabel

I dette skal vi indlæse XML-data i Hive-tabeller, og vi vil hente værdierne gemt inde i XML-tags.

Trin 1) Oprettelse af tabellen “xmlsample_guru” med en str-kolonne af datatypen string.

Oprettelse af xmlsample_guru-tabellen og indlæsning af test.xml i Hive

Fra ovenstående skærmbillede kan vi observere følgende:

  1. Oprettelse af tabellen "xmlsample_guru"
  2. Indlæser data fra test.xml til tabellen “xmlsample_guru”

Trin 2) Brug af XPath metoden xpath(), vil vi være i stand til at hente de data, der er gemt i XML-tags.

xpath()-forespørgsel returnerer ename- og esal-værdier fra XML-kolonnen

Fra ovenstående skærmbillede kan vi observere følgende:

  1. Ved at bruge xpath()-metoden henter vi de værdier, der er gemt under /emp/esal/ og /emp/ename/.
  2. Værdier, der findes i XML-tags. I dette trin viser vi faktiske værdier, der er gemt under XML-tags i tabellen "xmlsample_guru".

Bemærk at xpath() returnerer et array af strenge; xpath_string(), xpath_int() og xpath_double() returnerer en enkelt indtastet værdi.

Trin 3) I dette trin henter og viser vi den rå XML-fil fra tabellen “xmlsample_guru”.

Rå XML-dokumenter gemt i str-kolonnen i xmlsample_guru

Fra ovenstående skærmbillede kan vi observere følgende:

  • De faktiske XML-data vises med tags
  • Hvis vi observerer et enkelt tag, er det med "emp" som overordnet tag med "ename" og "esal" som underordnede tags.

Code uddrag:

Forespørgsler, der skal udføres

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 (JavaScriptobjektnotation)

Data fra sociale medier og websteder gemmes normalt i JSON-format. Når vi forsøger at hente data fra onlineservere, returneres JSON-filer. Ved at bruge Hive som datalager kan vi indlæse JSON-data i Hive-tabeller ved at oprette skemaer.

JSON til Hive-tabel

I dette indlæser vi JSON-data i Hive-tabeller, og vi henter de værdier, der er gemt i JSON-skemaet.

Trin 1) I dette trin skal vi oprette en JSON-tabel med navnet "json_guru". Når den er oprettet, indlæser og viser vi indholdet af det faktiske skema.

Oprettelse af json_guru, indlæsning af test.json og visning af JSON-skemaet

Fra ovenstående skærmbillede kan vi observere følgende:

  1. Oprettelse af tabellen "json_guru"
  2. Indlæser data fra test.json til tabellen “json_guru”
  3. Viser det faktiske skema for JSON-filen, der er gemt i json_guru-tabellen

Trin 2) Ved at bruge metoden get_json_object() kan vi hente de dataværdier, der er gemt i JSON-hierarkiet.

get_json_object() output med en liste over e-kode, e-navn og løn fra json_guru

Fra ovenstående skærmbillede kan vi observere følgende:

  1. Ved at bruge get_json_object(str,'$.ecode') kan den hente ecode-værdier fra tabellen json_guru. På samme måde kan den ved at bruge get_json_object(str,'$.ename') og get_json_object(str,'$.sal') hente ename- og sal-værdierne fra tabellen json_guru.
  2. Værdier gemt i JSON-hierarkiet i json_guru

Fordi get_json_object() analyserer dokumentet én gang pr. kald, er json_tuple() billigere, når der er behov for flere nøgler, og en JSON SerDe mapper dokumentet til typede kolonner ved indlæsning.

Code uddrag

Forespørgsler, der skal udføres

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;

Kompleks JSON til Hive-tabel

I dette skal vi indlæse komplekse JSON-data i Hive-tabeller, og vi henter de værdier, der er gemt i JSON-skemaet.

Trin 1) Opretter complexjson_guru med et felt i en enkelt kolonne.

Oprettelse af complexjson_guru og indlæsning af emp.json i Hive-tabellen

Fra ovenstående skærmbillede kan vi observere følgende:

  1. Oprettelse af tabellen complexjson_guru med et enkelt kolonnefelt som strengdatatype
  2. Indlæser data i complexjson_guru fra den komplekse JSON-fil emp.json

Trin 2) Ved at bruge get_json_object kan vi hente det faktiske indhold, der er gemt i JSON-filhierarkiet.

Fra det følgende skærmbillede kan vi se outputtet af de data, der er gemt i complexjson_guru.

Extracted ecode og indlejrede nøgleværdier fra det komplekse JSON-dokument

Trin 3) I dette trin kan vi ved hjælp af kommandoen "Select" se de komplekse JSON-data, der er gemt i tabellen "complexjson_guru".

Vælg output, der viser rå komplekse JSON-rækker i complexjson_guru

Eksempelkodestykke

Forespørgsler, der skal udføres

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 i realtidsprojekter – hvornår og hvor skal det bruges

Hvornår og hvor skal Hive bruges i Hadoop-økosystemet:

Når

  • Når man arbejder med stærke og effektive statistiske funktioner på Hadoop-økosystemet
  • Når man arbejder med struktureret og semistruktureret databehandling
  • Som et datalagerværktøj med Hadoop
  • Dataindtagelse i realtid med HBase, hvor Hive kan bruges

Hvor

  • For nem brug som et ETL- og datawarehousing-værktøj
  • At levere et SQL-type miljø og at forespørge som SQL ved hjælp af HiveQL
  • At bruge og implementere brugerdefinerede kort- og reducer-scripts til specifikke klientkrav

Ofte Stillede Spørgsmål

LOCAL kopierer filen fra klientmaskinens filsystem. Uden LOCAL behandler Hive stien som HDFS og flytter filen, så en relativ sti opløses under brugerens HDFS-hjemmeside.

json_tuple() er normalt hurtigere: den analyserer dokumentet én gang og returnerer flere nøgler sammen, mens get_json_object() analyserer strengen igen for hvert felt. Brug get_json_object() til en enkelt værdi.

Nej. En enkelt STRING-kolonne plus JSON-funktionerne fungerer. En SerDe som f.eks. org.apache.hive.hcatalog.data.JsonSerDe passer til gentagne produktionsforespørgsler, kortping taster på typede kolonner én gang i stedet for ved hver læsning.

Normalt en pænt udskrevet fil: Hive forventer ét komplet JSON-dokument pr. linje, så et dokument opdelt på tværs af linjer bliver til ugyldige rækker. En forkert stavet nøgle eller forkert store/små bogstaver i JSONPath gør det samme.

xpath() returnerer altid et array af strenge. Brug i stedet en typebestemt variant: xpath_string(), xpath_int(), xpath_long(), xpath_float(), xpath_double() eller xpath_boolean(). Hver returnerer én skalar af den type.

Ekstern er sikrere for rå landingsdata, fordi dropping Tabellen lader filerne være på plads. En administreret tabel sletter sin datamappe på DROP – praktisk for arbejdstabeller, destruktivt for delte filer.

Maskinlæringsværktøjer profilerer eksempelfiler for at udlede typer, markere sparse nøgler og foreslå partitionskolonner fra forespørgselsmønstre. Behandl outputtet som en kladde – typer og partitioner skal stadig kontrolleres i forhold til reelle volumener.

Den laver udkast til CREATE TABLE-sætninger, LOAD DATA-kommandoer og JSONPath-udtryk fra en eksempelpost, der er indsat i editoren. Den kan ikke se klyngen, så navne, stier og nøglestavemåder skal først verificeres.

Opsummer dette indlæg med: