Video: Vaillant vsmart thermostat review 2024
Je weet waarschijnlijk al dat experts in relationele databasemodellering en -ontwerp meestal veel tijd besteden aan het ontwerpen van genormaliseerde databases of -schema's <. Database normalisatie is een techniek die beschermt tegen gegevensverlies, redundantie en andere anomalieën wanneer gegevens worden bijgewerkt en opgehaald. De experts volgen een aantal regels om te komen tot een genormaliseerde database, maar regel 1 is dat u moet eindigen met een
groep tabellen. (Eén grote tafel die al uw gegevens opslaat is niet normaal - woordspeling bedoeld.) Er zijn uitzonderingen, afhankelijk van de use case, maar de wet van veel tabellen wordt meestal nauwlettend gevolgd, vooral voor databases die transacties ondersteunen of analytische verwerking (business intelligence, bijvoorbeeld).
Wat heeft dit allemaal te maken met joins in Hive? Welnu, onthoud dat het onderliggende besturingssysteem voor Hive (verrassing!) Apache Hadoop is: MapReduce is de engine voor toetreding tot tabellen en het Hadoop-bestandssysteem (HDFS) is de onderliggende opslag. Het is allemaal goed nieuws voor de gebruiker die grote tabellen met Hive wil maken, beheren en analyseren.
Houd er rekening mee dat MapReduce en HDFS zijn geoptimaliseerd voor doorvoer met big data-analyse en dat in deze wereld
latenties - reactietijden van gebruikers, met andere woorden - meestal hoog zijn. Hive is ontworpen voor analytische verwerking in batchstijl, niet voor snelle online transactieverwerking. Gebruikers die de best mogelijke prestaties willen met SQL op Apache Hadoop hebben oplossingen beschikbaar.
Omdat de Hive-tabel leest en schrijft via HDFS meestal zeer grote datablokken omvat, des te meer gegevens u volledig in één tabel kunt beheren, hoe beter de algehele prestaties.
Schijf- en netwerktoegang is een stuk langzamer dan geheugentoegang, dus minimaliseer HDFS zo veel mogelijk lezen en schrijven.
Met deze achtergrondinformatie in gedachten kunt u het maken van joins met Hive aan. Gelukkig was de Hive-ontwikkelingsgemeenschap realistisch en begreep hij dat gebruikers tabellen met HiveQL willen en moeten gebruiken. Deze kennis wordt vooral belangrijk met EDW-augmentatie. Use cases zoals "queryable" -archieven vereisen vaak joins voor data-analyse.
Hier is een voorbeeld van een Hive-join met behulp van vluchtgegevenstabellen. De lijst toont u hoe u een myflightinfo2007-tabel en een myflightinfo2008-tabel kunt maken en weergeven vanuit de grotere FlightInfo2007- en FlightInfo2008-tabellen. Het plan was altijd om de tabellen CTAS myflightinfo2007 en myflightinfo2008 te gebruiken om te illustreren hoe je joins in Hive kunt uitvoeren.
De afbeelding toont het resultaat van een inner join met de tabellen myflightinfo2007 en myflightinfo2008 met behulp van de SQuirreL SQL-client.
Hive ondersteunt
equi-joins, een specifiek type join dat alleen gelijkheidsvergelijkingen gebruikt in het join-predikaat. (ON m8. FlightNum = m7. FlightNum is een voorbeeld van een equi-join.) Andere comparators zoals Less than (<) worden niet ondersteund. Deze beperking is alleen vanwege beperkingen van de onderliggende MapReduce-engine. U kunt OR ook niet gebruiken in de AAN-clausule. De afbeelding illustreert het eerdere voorbeeld van de inner join en twee andere Hive join-typen. Merk op dat u de resultaten van een inner join kunt bevestigen door de inhoud van de tabellen myflight2007 en myflight2008 te bekijken.
De volgende afbeelding illustreert hoe een inner join werkt met een Venn-diagram, voor het geval u niet bekend bent met de techniek. Het basisidee hier is dat een inner join de records retourneert die overeenkomen tussen twee tabellen. Dus een inner join is een perfecte analysetool om te bepalen welke vluchten hetzelfde zijn van JFK (New York) naar ORD (Chicago) in juli 2007 en juli 2008.
Het optimaliseren van Hive-joins is een hot topic in de Hive-community. Zie de pagina Join Optimization op de Hive-wiki voor meer informatie over de huidige optimalisatietechnieken.