2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Es handelt sich um einen Tabellentyp in Hive. Durch die Aufteilung der Daten in der Tabelle in mehrere Teilmengen (Partitionen) entspricht jede Partition einem bestimmten Spaltenwert in der Tabelle, wodurch die Abfrageleistung und die Datenverwaltungseffizienz verbessert werden können. Jede Partition einer partitionierten Tabelle wird in einem separaten Verzeichnis gespeichert und die Partition wird basierend auf einer oder mehreren Spalten in der Tabelle definiert. Der Hauptzweck der Verwendung partitionierter Tabellen besteht darin, die Menge der von Abfragen gescannten Daten zu reduzieren und dadurch die Abfrageeffizienz zu verbessern.
Eine übermäßige Partitionierung kann zur Generierung einer großen Anzahl kleiner Dateien führen, was die HDFS-Leistung und die Effizienz von MapReduce-Aufgaben beeinträchtigt. Kleinere Dateizusammenführungsvorgänge müssen regelmäßig durchgeführt werden.
- CREATE TABLE customer_data (
- customer_id STRING,
- name STRING,
- age INT,
- email STRING
- )
- PARTITIONED BY (city STRING)
- STORED AS ORC;
-
- select *
- from customer_data;
-
- -- 插入 New York 的数据
- INSERT INTO TABLE customer_data PARTITION (city='New York')
- VALUES
-
- -- 插入 Los Angeles 的数据
- INSERT INTO TABLE customer_data PARTITION (city='Los Angeles')
- VALUES
-
- -- 插入 Chicago 的数据
- INSERT INTO TABLE customer_data PARTITION (city='Chicago')
- VALUES
Sie können sehen, dass auf HDFS drei Verzeichnisse erstellt wurden, die drei Partitionen entsprechen. Durch die Verwendung von „select“ mit „where“-Abfragebedingungen werden Daten direkt aus den entsprechenden Partitionsverzeichnissen gefunden, wodurch die von der Abfrage gescannte Datenmenge reduziert und die Leistung verbessert wird.
SELECT * FROM customer_data WHERE city='New York';
Es handelt sich um einen weiteren Tabellentyp in Hive. Durch Hash-Bucketing der Daten in der Tabelle kann die Abfrageleistung weiter verbessert werden, insbesondere bei der Durchführung von Join- und Aggregationsvorgängen. Bucketing-Tabellen unterteilen Daten in eine feste Anzahl von Buckets, und jeder Bucket wird in einer separaten Datei gespeichert.
-------------------------------------------------- -Eigenschaften der Eimertabelle----------------- - -------
Datenpartitionierung: Verteilen Sie Daten basierend auf dem Hashwert einer oder mehrerer Spalten auf eine feste Anzahl von Buckets.
Dateispeicherung: Die Daten jedes Buckets werden in einer separaten Datei gespeichert.
Gleichmäßige Verteilung: Im Idealfall werden die Daten gleichmäßig auf alle Buckets verteilt, wodurch die Abfrageleistung verbessert wird.
- CREATE TABLE customer_data2 (
- customer_id STRING,
- name STRING,
- age INT,
- email STRING
- )
- CLUSTERED BY (customer_id) INTO 4 BUCKETS
- STORED AS ORC;
- -- 插入数据到分桶表
- --通过这些步骤,我们创建了一个按 customer_id 列进行分桶的 Hive 表 customer_data,并插入了具体的数据。
- INSERT INTO TABLE customer_data2 VALUES
-
- select *
- from customer_data2;
Wenn wir uns den Pfad auf HDFS ansehen, können wir sehen, dass die Daten entsprechend dem Hashwert der entsprechenden Spalte in verschiedene Buckets aufgeteilt werden.