Wie man einen Inner Join in Hive durchführt

HadoopHadoopBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In der Welt der Big-Data-Verarbeitung hat sich Hadoop als leistungsstarkes Framework etabliert, und Hive, eine SQL-ähnliche Schnittstelle (Interface) für Hadoop, ist zu einem beliebten Werkzeug für viele Datenanalysten und Ingenieure geworden. In diesem Tutorial werden Sie durch den Prozess des Durchführens eines Inner Joins in Hive geführt, einer entscheidenden Datenmanipulationstechnik zum Kombinieren von Daten aus mehreren Quellen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hadoop(("Hadoop")) -.-> hadoop/HadoopHiveGroup(["Hadoop Hive"]) hadoop/HadoopHiveGroup -.-> hadoop/hive_setup("Hive Setup") hadoop/HadoopHiveGroup -.-> hadoop/hive_shell("Hive Shell") hadoop/HadoopHiveGroup -.-> hadoop/create_tables("Creating Tables") hadoop/HadoopHiveGroup -.-> hadoop/describe_tables("Describing Tables") hadoop/HadoopHiveGroup -.-> hadoop/join("join Usage") hadoop/HadoopHiveGroup -.-> hadoop/sort_by("sort by Usage") hadoop/HadoopHiveGroup -.-> hadoop/explain_query("Explaining Query Plan") subgraph Lab Skills hadoop/hive_setup -.-> lab-414547{{"Wie man einen Inner Join in Hive durchführt"}} hadoop/hive_shell -.-> lab-414547{{"Wie man einen Inner Join in Hive durchführt"}} hadoop/create_tables -.-> lab-414547{{"Wie man einen Inner Join in Hive durchführt"}} hadoop/describe_tables -.-> lab-414547{{"Wie man einen Inner Join in Hive durchführt"}} hadoop/join -.-> lab-414547{{"Wie man einen Inner Join in Hive durchführt"}} hadoop/sort_by -.-> lab-414547{{"Wie man einen Inner Join in Hive durchführt"}} hadoop/explain_query -.-> lab-414547{{"Wie man einen Inner Join in Hive durchführt"}} end

Einführung in Hive und Inner Joins

Was ist Hive?

Hive ist eine Open-Source-Data-Warehouse-Software, die auf Apache Hadoop aufbaut, um Datenabfragen und -analysen zu ermöglichen. Es ermöglicht Benutzern, große Datensätze, die im verteilten Dateisystem (Distributed File System, HDFS) von Hadoop gespeichert sind, mithilfe einer SQL-ähnlichen Sprache namens HiveQL zu verwalten, abzufragen und zu analysieren.

Was ist ein Inner Join?

Ein Inner Join ist eine Art von Join-Operation in SQL, die einen Ergebnismenge zurückgibt, die nur die Zeilen enthält, die in beiden Tabellen übereinstimmende Werte haben. Mit anderen Worten, es kombiniert Zeilen aus zwei oder mehr Tabellen basierend auf einer verwandten Spalte zwischen ihnen und gibt nur die Zeilen zurück, bei denen die Bedingung wahr ist.

Warum Inner Joins in Hive verwenden?

Inner Joins in Hive sind nützlich, wenn Sie Daten aus mehreren Tabellen basierend auf einer gemeinsamen Spalte oder einem gemeinsamen Schlüssel kombinieren müssen. Dies ist eine häufige Operation in der Datenanalyse und Business Intelligence, bei der Sie möglicherweise Daten aus verschiedenen Quellen zusammenführen müssen, um ein umfassenderes Verständnis Ihrer Daten zu erhalten.

Hive Inner Join Syntax

Die grundlegende Syntax für einen Inner Join in Hive lautet:

SELECT column1, column2, ...
FROM table1
INNER JOIN table2
ON table1.column = table2.column;

Hier sind table1 und table2 die beiden Tabellen, die Sie zusammenführen möchten, und die ON-Klausel gibt die Spalte(n) an, auf der der Join durchgeführt werden soll.

Implementieren von Inner Joins in Hive

Erstellen von Beispieltabellen

Erstellen wir zwei Beispieltabellen in Hive, um Inner Joins zu demonstrieren:

CREATE TABLE customers (
  customer_id INT,
  customer_name STRING,
  city STRING
)
STORED AS TEXTFILE;

CREATE TABLE orders (
  order_id INT,
  customer_id INT,
  order_amount DOUBLE
)
STORED AS TEXTFILE;

Durchführen eines Inner Joins

Um einen Inner Join zwischen den Tabellen customers und orders durchzuführen, können wir die folgende SQL-Abfrage verwenden:

SELECT c.customer_name, o.order_id, o.order_amount
FROM customers c
INNER JOIN orders o
ON c.customer_id = o.customer_id;

Diese Abfrage gibt nur die Zeilen zurück, bei denen es eine Übereinstimmung in der Spalte customer_id in beiden Tabellen gibt.

Verknüpfen mehrerer Tabellen

Sie können auch Inner Joins für mehr als zwei Tabellen durchführen. Beispielsweise können Sie die folgenden Tabellen customers, orders und eine products-Tabelle mit der folgenden Abfrage verknüpfen:

SELECT c.customer_name, o.order_id, p.product_name, o.order_amount
FROM customers c
INNER JOIN orders o ON c.customer_id = o.customer_id
INNER JOIN products p ON o.product_id = p.product_id;

Dies gibt den Kundenamen, die Auftragsnummer, den Produktnamen und den Auftragswert für alle Aufträge zurück, bei denen es eine Übereinstimmung in den drei Tabellen gibt.

Umgang mit Nullwerten

Wenn es in den Join-Spalten Nullwerte gibt, wird der Inner Join diese Zeilen aus der Ergebnismenge ausschließen. Wenn Sie Zeilen mit Nullwerten einschließen möchten, können Sie stattdessen einen Left Join oder einen Full Outer Join verwenden.

Optimieren von Inner-Join-Abfragen

Partitionselektierung (Partition Pruning)

Partitionselektierung ist eine Technik, die in Hive verwendet wird, um Abfragen zu optimieren, indem die Menge der zu scannenden Daten reduziert wird. Wenn Sie partitionierte Tabellen haben, kann Hive das Lesen unnötiger Partitionen basierend auf den Bedingungen in Ihrer Abfrage überspringen.

Um von der Partitionselektierung zu profitieren, stellen Sie sicher, dass Sie Ihre Tabellen anhand der in den Join-Bedingungen verwendeten Spalten partitionieren. Beispiel:

CREATE TABLE orders (
  order_id INT,
  customer_id INT,
  order_amount DOUBLE
)
PARTITIONED BY (order_date STRING)
STORED AS TEXTFILE;

Wenn Sie dann einen Inner Join mit der Tabelle orders durchführen, wird Hive nur die relevanten Partitionen basierend auf den Bedingungen in Ihrer Abfrage lesen.

Bucketing und Sortieren

Bucketing und Sortieren sind weitere Techniken, die Sie verwenden können, um Inner-Join-Abfragen in Hive zu optimieren. Bucketing teilt die Daten in eine feste Anzahl von Buckets (Eimern) basierend auf dem Hash einer oder mehrerer Spalten auf, während Sortieren die Daten anhand einer oder mehrerer Spalten sortiert.

Bucketing und Sortieren können dazu beitragen, die Leistung von Inner Joins zu verbessern, indem die Menge der Daten reduziert wird, die während der Join-Operation umsortiert und sortiert werden muss. Hier ist ein Beispiel:

CREATE TABLE customers (
  customer_id INT,
  customer_name STRING,
  city STRING
)
CLUSTERED BY (customer_id) INTO 8 BUCKETS
SORTED BY (customer_id) STORED AS TEXTFILE;

CREATE TABLE orders (
  order_id INT,
  customer_id INT,
  order_amount DOUBLE
)
CLUSTERED BY (customer_id) INTO 8 BUCKETS
SORTED BY (customer_id) STORED AS TEXTFILE;

Indem Sie beide Tabellen anhand der Spalte customer_id bucketen und sortieren, kann Hive einen effizienteren Map-Side-Join durchführen, wodurch die Menge der zu umsortierenden und zu sortierenden Daten reduziert wird.

Geeignete Join-Strategien verwenden

Hive unterstützt verschiedene Join-Strategien, wie Map-Side Joins, Sort-Merge Joins und Broadcast Joins. Die Wahl der Join-Strategie kann sich erheblich auf die Leistung Ihrer Inner-Join-Abfragen auswirken.

Hive wählt automatisch die geeignete Join-Strategie basierend auf der Größe der Tabellen und anderen Faktoren aus. Sie können jedoch auch die Join-Strategie manuell angeben, indem Sie die Hinweise /*+ MAPJOIN */ oder /*+ STREAMTABLE */ in Ihrer Abfrage verwenden.

Durch die Verwendung der richtigen Join-Strategie und anderer Optimierungstechniken können Sie die Leistung Ihrer Inner-Join-Abfragen in Hive erheblich verbessern.

Zusammenfassung

Am Ende dieses Tutorials werden Sie ein solides Verständnis davon haben, wie man Inner Joins in Hive implementiert, eine Schlüsselkompetenz für die Arbeit mit Hadoop und Big Data. Sie werden auch Techniken lernen, um Ihre Hive-Inner-Join-Abfragen zu optimieren und so eine bessere Leistung zu erzielen, was eine effiziente Datenverarbeitung in Ihren Hadoop-basierten Anwendungen gewährleistet.