Was ist Parquet?

Apache Parquet ist ein Open-Source-Dateiformat, das häufig für big data in Hadoop-Clustern verwendet wird. Parquet speichert Daten in einem flachen, komprimierten Datenformat Vertikale Speicherung . Apache Spark bietet Entwicklern APIs auf hoher Ebene, einschließlich Unterstützung für Java, Skala, Python und R. Parquet eignet sich gut für die effiziente Speicherung verschachtelter Datenstrukturen.
Merkmale von Parquet
Das Verständnis der Eigenschaften von Parquet kann Aufschluss darüber geben, warum es für Datenexperten so attraktiv ist:
- Vertikale Speicherung: Parquet speichert Daten in Spalten, was ideal für analytische Abfragen ist. Bei der Vertikale Speicherung wird jede Spalte unabhängig gespeichert, was im Vergleich zu zeilenbasierten Formaten einen viel schnelleren Zugriff auf bestimmte Datenpunkte ermöglicht.
- Effiziente Komprimierung: Eine der bemerkenswertesten Eigenschaften von Parquet ist seine Fähigkeit, Daten effektiv zu komprimieren. Durch Vertikale Speicherung können ähnliche Datentypen zusammen gespeichert werden, wodurch Kompressionsalgorithmen wie Snappy, Gzip und LZO sehr effektiv sind. Dies verringert die Gesamtgröße der Datei und führt zu Einsparungen bei den Speicherkosten.
- Schema-Unterstützung: Parquet enthalten eingebettet Metadaten , die die Struktur der Daten beschreiben, was die Verarbeitung vereinfacht und Beständigkeit über verschiedene Systeme hinweg gewährleistet. Das Schema wird zusammen mit den Daten gespeichert, was es für Datenverarbeitungsprogramme einfacher macht, die Daten richtig zu verstehen und zu interpretieren.
- Open-Source und plattformübergreifend: Parquet ist ein Open-Source-Format, dessen Flexibilität gewährleistet, dass es auf verschiedenen Datenplattformen und Verarbeitungsframeworks funktioniert. Da es in der Open-Source-Gemeinschaft weit verbreitet ist, wird es von verschiedenen big data und -Plattformen unterstützt, was es äußerst vielseitig macht.
Vorteile von Parquet
Die Vorteile des Einsatzes von Parquet gehen über seine technischen Eigenschaften hinaus und bieten Unternehmen, die mit großen Datenmengen arbeiten, einen echten Mehrwert:
- Verbesserte Leistung: Parquet unterstützen Prädikat-Pushdown, eine Funktion, die es Abfragen ermöglicht, unnötige Daten zu überspringen und nur die relevanten Abschnitte der Datei zu scannen. Dies führt zu einer schnelleren Anfrage im Vergleich zu anderen Formaten wie CSV, insbesondere bei komplexen analytischen Abfragen.
- Niedrigere Speicherkosten: Die Komprimierungsvorteile von Parquet sind erheblich. Da die Daten effizienter gespeichert werden, benötigen sie weniger Platz, was zu geringeren Speicherkosten führt. Dies ist besonders wichtig in big data , in denen das Datenvolumen schnell enorm werden kann.
- Optimiert für analytische Workloads: Parquet wurde speziell für analytische Workloads entwickelt. In Umgebungen, in denen häufige Abfragen und umfangreiche Datenverarbeitung erforderlich sind, ist Parquet das Format der Wahl. Es ermöglicht Unternehmen, Daten schneller und effizienter zu verarbeiten.
- Kompatibilität mit Datenverarbeitungs-Frameworks: Parquet lässt sich nahtlos in gängige Datenverarbeitungs-Frameworks wie Apache Spark, Apache Hive und Apache Flink integrieren. Dies macht es zu einer natürlichen Wahl für Unternehmen, die diese Tools bereits verwenden.
Vorteile der Speicherung von Daten in einem spaltenförmigen Format
Die Speicherung von Daten in einem Spaltenformat wie Parquet hat erhebliche Vorteile gegenüber herkömmlichen zeilenbasierten Formaten wie CSV:
- Effiziente Anfrage : Einer der Hauptvorteile von spaltenbasierten Formaten ist, dass bei Abfragen nur die relevanten Spalten gelesen werden, was den Datenabruf erheblich beschleunigt. Im Gegensatz dazu muss bei zeilenbasierten Formaten die gesamte Datei gelesen werden, auch wenn nur ein kleiner Teil der Daten benötigt wird.
- Bessere Komprimierungsraten: Da Daten in einem Spaltenformat oft den gleichen Typ und die gleiche Struktur aufweisen, können sie effizienter komprimiert werden. Dadurch wird der Gesamtspeicherbedarf der Daten verringert und die Anzahl der für die Datenübertragung und -speicherung benötigten Ressourcen minimiert.
- Flexibilität bei komplexen Datenstrukturen: Parquet ermöglicht die Speicherung komplexer verschachtelter Datenstrukturen, wie Arrays, Maps und Structs. Diese Fähigkeit macht es besonders nützlich für die Speicherung von Daten in modernen, verteilten Systemen, wo Beziehungen zwischen verschiedenen Datenpunkten kompliziert sein können.
Parquet vs. CSV: Hauptunterschiede
Beim Vergleich von Parquet mit dem traditionelleren CSV-Format treten mehrere wichtige Unterschiede zutage:
- Effiziente Speicherung: Parquet sind wesentlich platzsparender als CSV-Dateien, vor allem aufgrund ihrer Spaltenstruktur und besserer Komprimierungstechniken. Eine CSV-Datei kann sehr viel größer sein, insbesondere bei großen Datensätzen.
- Anfrage Leistung: Das spaltenförmige Format von Parquetermöglicht schnellere und gezieltere Abfragen, während bei CSV-Dateien der gesamte Datensatz in den Speicher geladen werden muss. Dies kann die Anfrage drastisch verlangsamen, insbesondere bei großen Datensätzen.
- Scalability: Parquet ist weitaus skalierbar als CSV. Wenn Ihr Datensatz in den Terabyte- oder sogar Petabyte-Bereich wächst, bewältigt Parquet die Größe und Komplexität weitaus besser als CSV.
- Integrität der Daten: Bei Parquet werden die Metadaten und das Schema zusammen mit den Daten gespeichert, was dazu beiträgt, die Integrität und Struktur des Datensatz zu erhalten. Im Gegensatz dazu fehlen bei CSV-Dateien die Schemainformationen, was zu Inkonsistenzen und Fehlern führen kann, wenn Daten über verschiedene Systeme hinweg übertragen werden.
Lagerung
Eine Parquet besteht aus Zeilengruppen. Zeilengruppen enthalten eine Teilmenge der als Seiten gespeicherten Daten. Die Seiten sind in Spaltenchunks gruppiert. Columns chunks enthalten Metadaten wie die Anzahl der definierten Werte, ihre Größe und Statistiken wie die Anzahl der Null- und Min/Max-Werte.
Parquet
Parquet unterstützt mehrere 320-Bit-Datentypen. Dazu gehören die folgenden:
- BOOLEAN: 1-Bit-Boolescher Wert
- INT32: 32-Bit-Ints mit Vorzeichen
- INT64: 64-Bit-Ints mit Vorzeichen
- INT96: 96-Bit-Ints mit Vorzeichen
- FLOAT: IEEE 32-Bit-Gleitkommawerte
- DOUBLE: IEEE 64-Bit-Gleitkommawerte
- BYTE_ARRAY: Beliebig lange Byte-Arrays
- FIXED_LEN_BYTE_ARRAY: Byte-Arrays mit fester Länge
Komprimierung im Parquet
Parquet speichert große Datenmengen, daher ist die Komprimierung ein wichtiges Merkmal dieses Dateiformats. Pro Spalte können verschiedene Kompressionsalgorithmen angewendet werden. Die folgenden Kompressionscodecs werden mit der Basisdistribution bereitgestellt:
- GZIP: eignet sich für die langfristige statische Speicherung, z. B. für die Archivierung von Daten. GZIP bietet eine stärkere Komprimierung als Snappy, verbraucht aber mehr CPU .
- Snappy: ist eine gute Wahl für heiße Daten, auf die häufig zugegriffen wird. Die Dekomprimierungsgeschwindigkeit von Snappy ist geringer als die von GZIP. Snappy ist aufteilbar (im Gegensatz zu GZIP).
- LZO: ist eine gute Wahl, wenn Ihre Anwendung hohe Dekomprimierungsgeschwindigkeiten erfordert.
Hadoop
Hadoop ist eine Open-Source-Plattform, die horizontal skaliert werden kann, um big data Workloads zu bewältigen. Parquet wurde in erster Linie für Hadoop-Umgebungen entwickelt. Viele Unternehmen haben in der Blütezeit der big data Hadoop-Cluster erstellt. Leider sind die Kenntnisse für das Hadoop-Tuning knapp geworden, so dass die Unternehmen ihre Parquet auf modernere Architekturen übertragen. Hadoop-Systeme wie Pig, Hive und Spark verwenden Parquet. Spark bietet die beste API für den Zugriff auf Parquet . Moderne Data-Warehousing-Systeme wie die Actian Data Platform verwenden einen Konnektor , um auf Parquet zuzugreifen, egal wo sie sich befinden, ob vor Ort oder in der Cloud.
Actian Data Platform
Mit einem Konnektor kann die Actian Data Platform auf Parquet als externes Objekt zugreifen. Prädikate können auf Parquet heruntergeladen werden, um die Zugriffsgeschwindigkeit zu erhöhen. Externe Parquet sind einfach zu laden, da Anfragen in SQL verpackt werden können. Das Laden von parquet in Tabellen bietet den schnellsten Zugriff auf Daten dank der Vektorverarbeitung, die spaltenweise Daten in den CPU eines Servers oder Cluster lädt, um die parallele Verarbeitung von Abfragen zu maximieren. Benchmarks haben gezeigt, dass die Actian Data Platform um Größenordnungen besser skalieren kann als Hive.
In den folgenden Beispielen wird eine externe Parquet als externe Tabelle abgebildet, bevor ihre Daten in eine interne Tabelle geladen werden, um einen schnelleren Anwendungszugriff zu ermöglichen.
Laden von Parquet aus Google Cloud Storage:
DROP TABLE IF EXISTS pemdata_gs;
CREATE EXTERNAL TABLE pemdata_gs (
Zeitspanne VARCHAR(20),
flow1 VARCHAR(20),
flow2 VARCHAR(20),
Belegung1 VARCHAR(20),
Geschwindigkeit1 VARCHAR(20)
) unter Verwendung von Funken
MIT
reference='gs://avpemdata/part*parquet',
format='parquet';
DROP TABLE IF EXISTS pemdata;
CREATE TABLE pemdata (
Zeitspanne TIMESTAMP,
flow1 VARCHAR(20),
flow2 VARCHAR(20),
Belegung1 VARCHAR(20),
Geschwindigkeit1 VARCHAR(20)
);
Laden von Parquet aus Azure Blob Storage:
DROP TABLE IF EXISTS pemdata_adl;
CREATE EXTERNAL TABLE pemdata_adl (
Zeitspanne VARCHAR(20),
flow1 VARCHAR(20),
flow2 VARCHAR(20),
Belegung1 VARCHAR(20),
Geschwindigkeit1 VARCHAR(20)
) unter Verwendung von Funken
MIT
reference='abfs://parquetdata@mydata.dfs.core.windows.net//part*parquet',
format='parquet';
DROP TABLE IF EXISTS pemdata;
CREATE TABLE pemdata (
Zeitspanne TIMESTAMP,
flow1 VACHAR(20),
flow2 VARCHAR(20),
Belegung1 VARCHAR(20),
Geschwindigkeit1 VARCHAR(20)
);
INSERT INTO pemdata SELECT * FROM pemdata_adl;
Laden von Parquet aus AWS S3-Speicher:
DROP TABLE IF EXISTS pemdata_s3;
CREATE EXTERNAL TABLE pemdata_s3 (
Zeitspanne VARCHAR(20),
flow1 VARCHAR(20),
flow2 VARCHAR(20),
Belegung1 VARCHAR(20),
Geschwindigkeit1 VARCHAR(20)
) unter Verwendung von Funken
MIT
reference='s3a://avpemdata/part*parquet',
format='parquet';
DROP TABLE IF EXISTS pemdata;
CREATE TABLE pemdata (
Zeitspanne TIMESTAMP,
flow1 VARCHAR(20),
flow2 VARCHAR(20),
Belegung1 VARCHAR(20),
Geschwindigkeit1 VARCHAR(20)
);
INSERT INTO pemdata SELECT * FROM pemdata_s3;