Hive ETL: JSON-, XML- en tekstgegevensvoorbeelden laden

⚡ Slimme samenvatting

Hive ETL zet tekst-, XML- en JSON-bestanden om in doorzoekbare tabellen door ze in Hive te laden en te exporteren.tracDoor waarden te koppelen met xpath() en get_json_object(), krijgen analisten een SQL-interface voor semi-gestructureerde Hadoop-gegevens.

  • 🧱 Gestructureerde ladingen: Een tekstbestand met scheidingstekens wordt omgezet in een tabel met ROW FORMAT DELIMITED plus FIELDS TERMINATED BY, en vervolgens LOAD DATA LOCAL INPATH.
  • ???? ️ XML extractie: Elk XML-document bevat één enkele STRING-kolom en xpath() haalt waarden uit de benoemde tags.
  • 🔑 JSON extractie: get_json_object() leest één JSONPath-expressie per aanroep, dus elk veld heeft een eigen aanroep nodig.
  • 🪜 Geneste payloads: Complexe JSON-bestanden worden op exact dezelfde manier geladen, en de hiërarchie wordt doorlopen met JSONPath-expressies met puntnotatie.
  • 📍 Padregels: Het trefwoord LOCAL leest rechtstreeks vanuit het Linux-bestandssysteem, terwijl het weglaten ervan het pad op HDFS oplost.
  • 🎯 Waar het past: Hive is meer geschikt voor batchverwerking en semi-gestructureerde ETL dan voor het opzoeken van records met lage latentie.

Hive ETL: JSON-, XML- en tekstgegevens laden

Hive als ETL- en datawarehouse-tool bovenop de Hadoop Het ecosysteem biedt functionaliteiten zoals datamodellering, datamanipulatie, dataverwerking en dataquery's. Data extracIn Hive houdt het aanmaken van tabellen in Hive in dat gestructureerde en semi-gestructureerde data wordt geladen, en dat er query's op die data worden uitgevoerd op basis van de vereisten.

Voor batchverwerking gaan we aangepaste scripts schrijven met behulp van aangepaste map-and-reduce-scripts in een scripttaal. Dit biedt een SQL zoals omgeving en ondersteuning voor eenvoudig opvragen.

Werken met gestructureerde gegevens met behulp van Hive

Gestructureerde data betekent dat de data de juiste indeling heeft van rijen en kolommen. Dit is meer zoals RDBMS gegevens met de juiste rijen en kolommen.

Hier gaan we gestructureerde data uit tekstbestanden in Hive laden.

Stap 1) In deze stap maken we de tabel “employees_guru” met kolomnamen zoals Id, Naam, Leeftijd, Adres, Salaris en Afdeling van de werknemers met gegevenstypen.

Het aanmaken van de tabel employees_guru en het laden van Employees.txt in Hive.

Uit de bovenstaande schermafbeelding kunnen we het volgende afleiden:

  1. Aanmaak van tabel “employees_guru”
  2. Gegevens uit Employees.txt laden in de tabel “employees_guru”

Stap 2) In deze stap tonen we de inhoud van deze tabel met behulp van de opdracht "Selecteren". De inhoud van de tabel is te zien in de volgende schermafbeelding.

De uitvoer van de selectiequery toont de rijen van de Hive-tabel employees_guru.

Voorbeeldcodefragment

Uit te voeren query's

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;

Werken met semi-gestructureerde data met Hive (XML, JSON)

Hive voert ETL-functionaliteiten uit in het Hadoop-ecosysteem door te fungeren als een ETL-toolMapReduce kan in sommige soorten applicaties lastig zijn; Hive kan die complexiteit verminderen en biedt de beste oplossing voor IT-applicaties in de datawarehouse-sector.

Semi-gestructureerde data zoals XML en JSON kunnen met Hive op een minder complexe manier worden verwerkt. We zullen eerst bekijken hoe we Hive kunnen gebruiken voor XML.

XML naar Hive-tabel

Hierin gaan we XML-gegevens in Hive-tabellen laden en halen we de waarden op die zijn opgeslagen in de XML-tags.

Stap 1) Aanmaken van tabel “xmlsample_guru” met een kolom van het gegevenstype string.

Het aanmaken van de tabel xmlsample_guru en het laden van test.xml in Hive.

Uit de bovenstaande schermafbeelding kunnen we het volgende afleiden:

  1. Aanmaak van tabel “xmlsample_guru”
  2. Gegevens laden vanuit het test.xml-bestand in de tabel "xmlsample_guru".

Stap 2) De XPath Met de methode xpath() kunnen we de gegevens ophalen die in XML-tags zijn opgeslagen.

xpath() query die de waarden ename en esal uit de XML-kolom retourneert

Uit de bovenstaande schermafbeelding kunnen we het volgende afleiden:

  1. Met behulp van de xpath()-methode halen we de waarden op die zijn opgeslagen onder /emp/esal/ en /emp/ename/.
  2. Waarden die zich binnen XML-tags bevinden. In deze stap tonen we de werkelijke waarden die onder de XML-tags zijn opgeslagen in de tabel "xmlsample_guru".

Merk op dat xpath() een array van strings retourneert; xpath_string(), xpath_int() en xpath_double() retourneren een enkele getypte waarde.

Stap 3) In deze stap halen we de ruwe XML van de tabel "xmlsample_guru" op en tonen we deze.

Ruwe XML-documenten opgeslagen in de kolom 'str' van xmlsample_guru

Uit de bovenstaande schermafbeelding kunnen we het volgende afleiden:

  • De daadwerkelijke XML-gegevens die met tags worden weergegeven
  • Als we naar één enkele tag kijken, zien we dat "emp" de bovenliggende tag is met "ename" en "esal" als onderliggende tags.

Code fragment:

Uit te voeren query's

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 (JavaNotatie van scriptobjecten)

Gegevens van sociale media en websites worden doorgaans opgeslagen in JSON-formaat. Wanneer we gegevens van online servers proberen op te halen, krijgen we JSON-bestanden terug. Door Hive als datastore te gebruiken, kunnen we JSON-gegevens in Hive-tabellen laden door schema's aan te maken.

JSON naar Hive-tabel

In deze stap gaan we JSON-gegevens in Hive-tabellen laden en de waarden ophalen die in het JSON-schema zijn opgeslagen.

Stap 1) In deze stap gaan we een JSON-tabel aanmaken met de naam "json_guru". Zodra deze is aangemaakt, laden en tonen we de inhoud van het daadwerkelijke schema.

Het aanmaken van json_guru, het laden van test.json en het weergeven van het JSON-schema.

Uit de bovenstaande schermafbeelding kunnen we het volgende afleiden:

  1. Aanmaak van tabel “json_guru”
  2. Gegevens laden vanuit test.json in tabel “json_guru”
  3. Het daadwerkelijke schema van het JSON-bestand dat is opgeslagen in de tabel json_guru wordt weergegeven.

Stap 2) Met behulp van de get_json_object() methode kunnen we de gegevenswaarden ophalen die in de JSON-hiërarchie zijn opgeslagen.

get_json_object() geeft een lijst weer van ecode, ename en salary van json_guru

Uit de bovenstaande schermafbeelding kunnen we het volgende afleiden:

  1. Met `get_json_object(str,'$.ecode')` kunnen de `ecode`-waarden uit de tabel `json_guru` worden opgehaald. Op dezelfde manier kunnen met `get_json_object(str,'$.ename')` en `get_json_object(str,'$.sal')` de `ename`- en `sal`-waarden uit de tabel `json_guru` worden opgehaald.
  2. Waarden die zijn opgeslagen in de JSON-hiërarchie in json_guru

Omdat get_json_object() het document slechts één keer per aanroep parseert, is json_tuple() goedkoper wanneer meerdere sleutels nodig zijn, en een JSON SerDe zet het document tijdens het laden om naar getypte kolommen.

Code snipper

Uit te voeren query's

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;

Complexe JSON naar Hive-tabel

In deze module gaan we complexe JSON-gegevens in Hive-tabellen laden en de waarden ophalen die in het JSON-schema zijn opgeslagen.

Stap 1) ComplexJSON_Guru maken met een veld met één kolom.

Het aanmaken van complexjson_guru en het laden van emp.json in de Hive-tabel.

Uit de bovenstaande schermafbeelding kunnen we het volgende afleiden:

  1. Aanmaken van tabel complexjson_guru met één kolomveld van het gegevenstype string.
  2. Gegevens laden in complexjson_guru vanuit het complexe JSON-bestand emp.json

Stap 2) Met behulp van `get_json_object` kunnen we de daadwerkelijke inhoud ophalen die in de JSON-bestandshiërarchie is opgeslagen.

Op de volgende schermafbeelding zien we de uitvoer van de gegevens die zijn opgeslagen in complexjson_guru.

Extracted ecode en geneste sleutelwaarden uit het complexe JSON-document

Stap 3) In deze stap kunnen we met behulp van het commando "Select" de complexe JSON-gegevens bekijken die zijn opgeslagen in de tabel "complexjson_guru".

Selecteer de uitvoer met onbewerkte complexe JSON-rijen in complexjson_guru

Voorbeeldcodefragment

Uit te voeren query's

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 in realtimeprojecten: wanneer en waar te gebruiken?

Wanneer en waar Hive te gebruiken in het Hadoop-ecosysteem:

.

  • Bij het werken met krachtige statistische functies binnen het Hadoop-ecosysteem
  • Bij het werken met gestructureerde en semi-gestructureerde gegevensverwerking
  • Als datawarehouse-tool met Hadoop
  • Realtime data-invoer met HBase, waarbij Hive gebruikt kan worden.

Waar

  • Voor gebruiksgemak als ETL- en datawarehouse-tool
  • Het doel is om een ​​SQL-achtige omgeving te bieden en query's uit te voeren zoals in SQL, met behulp van HiveQL.
  • Het doel is om aangepaste map- en reducer-scripts te gebruiken en te implementeren voor specifieke klantvereisten.

Veelgestelde vragen

LOCAL kopieert het bestand vanuit het bestandssysteem van de clientmachine. Zonder LOCAL behandelt Hive het pad als HDFS en verplaatst het bestand, waardoor een relatief pad wordt opgelost onder de HDFS-thuisdirectory van de gebruiker.

`json_tuple()` is meestal sneller: het parseert het document één keer en retourneert meerdere sleutels tegelijk, terwijl `get_json_object()` de string voor elk veld opnieuw parseert. Gebruik `get_json_object()` voor een enkele waarde.

Nee. Een enkele STRING-kolom in combinatie met de JSON-functies werkt. Een SerDe zoals org.apache.hive.hcatalog.data.JsonSerDe is geschikt voor herhaalde productiequery's en mappings.ping De sleutels worden eenmalig in de ingevoerde kolommen geplaatst in plaats van bij elke leesbewerking.

Normaal gesproken een netjes opgemaakt bestand: Hive verwacht één compleet JSON-document per regel, dus een document dat over meerdere regels is verdeeld, wordt als ongeldige regel beschouwd. Een verkeerd gespelde sleutel of een onjuiste hoofdlettergevoeligheid in het JSONPath heeft hetzelfde effect.

xpath() retourneert altijd een array van strings. Gebruik in plaats daarvan een getypte variant: xpath_string(), xpath_int(), xpath_long(), xpath_float(), xpath_double() of xpath_boolean(). Elk van deze functies retourneert één scalaire waarde van dat type.

Externe opslag is veiliger voor onbewerkte landingsgegevens, omdat dropping De tabel laat de bestanden op hun plaats. Een beheerde tabel verwijdert de gegevensmap bij het verwijderen van bestanden — handig voor tijdelijke tabellen, maar nadelig voor gedeelde bestanden.

Machine learning-tools profileren voorbeeldbestanden om gegevenstypen af ​​te leiden, schaarse sleutels te markeren en partitiekolommen voor te stellen op basis van querypatronen. Beschouw de uitvoer als een conceptversie: typen en partities moeten nog worden gecontroleerd aan de hand van echte volumes.

Het genereert CREATE TABLE-instructies, LOAD DATA-opdrachten en JSONPath-expressies op basis van een voorbeeldrecord dat in de editor is geplakt. Het kan het cluster niet zien, dus namen, paden en de spelling van sleutels moeten eerst worden gecontroleerd.

Vat dit bericht samen met: