Hive-Partitionen und Buckets mit Beispiel
Tabellen, Partitionen und Buckets sind die Teile der Hive-Datenmodellierung.
Was sind Partitionen?
Hive-Partitionen sind eine Möglichkeit, Tabellen in Partitionen zu organisieren, indem Tabellen basierend auf Partitionsschlüsseln in verschiedene Teile unterteilt werden.
Die Partitionierung ist hilfreich, wenn die Tabelle über einen oder mehrere Partitionsschlüssel verfügt. Partitionsschlüssel sind grundlegende Elemente zur Bestimmung, wie die Daten in der Tabelle gespeichert werden.
Für Beispiel: -
„Der Kunde besitzt einige E-Commerce-Daten, die zu indischen Operationen gehören, in denen alle Operationen eines Bundesstaates (38 Bundesstaaten) als Ganzes aufgeführt sind. Wenn wir die Spalte „Bundesstaat“ als Partitionsschlüssel verwenden und Partitionen für diese Indien-Daten als Ganzes durchführen, können wir eine Anzahl von Partitionen (38 Partitionen) ermitteln, die der Anzahl der in Indien vorhandenen Bundesstaaten (38) entspricht. So können die Daten jedes Bundesstaates separat in Partitionstabellen angezeigt werden.
Beispielcode-Snippet für Partitionen
- Erstellung einer Tabelle aller Zustände
create table all states(state string, District string,Enrolments string) row format delimited fields terminated by ',';
- Daten werden in alle Status der erstellten Tabelle geladen
Load data local inpath '/home/hduser/Desktop/AllStates.csv' into table allstates;
- Erstellung einer Partitionstabelle
create table state_part(District string,Enrolments string) PARTITIONED BY(state string);
- Für die Partition müssen wir diese Eigenschaft festlegen
set hive.exec.dynamic.partition.mode=nonstrict
- Daten werden in die Partitionstabelle geladen
INSERT OVERWRITE TABLE state_part PARTITION(state) SELECT district,enrolments,state from allstates;
- Tatsächliche Verarbeitung und Bildung von Partitionstabellen basierend auf dem Status als Partitionsschlüssel
- Im HDFS-Speicher wird es 38 Partitionsausgaben mit dem Dateinamen als Statusnamen geben. Wir werden dies in diesem Schritt überprüfen
Die folgenden Screenshots zeigen die Ausführung des oben genannten Codes
Aus dem obigen Code machen wir folgende Dinge
- Erstellung einer Tabelle aller Bundesstaaten mit 3 Spaltennamen wie Bundesstaat, Bezirk und Einschreibung
- Daten werden in die Tabelle aller Zustände geladen
- Erstellung einer Partitionstabelle mit Status als Partitionsschlüssel
- In diesem Schritt wird der Partitionsmodus als nicht streng festgelegt (dieser Modus aktiviert den dynamischen Partitionsmodus).
- Daten werden in die Partition tablestate_part geladen
- Tatsächliche Verarbeitung und Bildung von Partitionstabellen basierend auf dem Status als Partitionsschlüssel
- Es gibt 38 Partitionsausgaben im HDFS-Speicher mit dem Dateinamen als Statusnamen. Wir werden dies in diesem Schritt überprüfen. In diesem Schritt sehen wir die 38 Partitionsausgaben in HDFS
Was sind Eimer?
Buckets in Hive werden zum Aufteilen von Hive-Tabellendaten in mehrere Dateien oder Verzeichnisse verwendet. Es dient der effizienten Abfrage.
- Die in diesen Partitionen vorhandenen Daten können weiter in Buckets unterteilt werden
- Die Aufteilung erfolgt basierend auf dem Hash bestimmter Spalten, die wir in der Tabelle ausgewählt haben.
- Buckets verwenden im Backend eine Art Hashing-Algorithmus, um jeden Datensatz zu lesen und ihn in Buckets zu platzieren
- In Hive müssen wir Buckets mithilfe von aktivieren set.hive.enforce.bucketing=true;
Schritt 1) Erstellen Sie einen Bucket wie unten gezeigt.
Aus dem obigen Screenshot
- Wir erstellen „sample_bucket“ mit Spaltennamen wie „Vorname“, „Job_ID“, „Abteilung“, „Gehalt“ und „Land“.
- Wir erstellen hier 4 Eimer.
- Sobald die Daten automatisch geladen wurden, platzieren Sie sie in 4 Buckets
Schritt 2) Daten werden in den Tabellenbeispiel-Bucket geladen
Vorausgesetzt, dass die „Mitarbeitertabelle“ bereits im Hive-System erstellt wurde. In diesem Schritt sehen wir das Laden von Daten aus der Mitarbeitertabelle in den Tabellenbeispiel-Bucket.
Bevor wir mit dem Verschieben von Mitarbeiterdaten in Buckets beginnen, stellen Sie sicher, dass diese aus Spaltennamen wie „Vorname“, „Job_ID“, „Abteilung“, „Gehalt“ und „Land“ bestehen.
Hier laden wir Daten aus der Mitarbeitertabelle in den Beispiel-Bucket.
Schritt 3)Es werden 4 Buckets angezeigt, die in Schritt 1 erstellt wurden
Auf dem obigen Screenshot können wir sehen, dass die Daten aus der Mitarbeitertabelle in 4 Buckets übertragen werden, die in Schritt 1 erstellt wurden.