Datenpartitionierung - AWS Glue

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Datenpartitionierung

Was ist Datenpartitionierung?

Datenpartitionierung ist eine Technik, die große Datensätze in kleinere, besser verwaltbare Segmente unterteilt, die als Partitionen bezeichnet werden. Im Kontext von AWS Glue Zero-ETL-Integrationen organisiert die Partitionierung Ihre Daten am Zielort auf der Grundlage bestimmter Spaltenwerte oder Transformationen dieser Werte.

Vorteile der Datenpartitionierung

Eine effektive Datenpartitionierung bietet mehrere wichtige Vorteile für Analytik-Workloads:

  • Verbesserte Abfrageleistung: Abfragen können irrelevante Partitionen überspringen (Partitionsbereinigung), wodurch die zu scannende Datenmenge reduziert wird.

  • Geringere Kosten: Indem Sie weniger Daten scannen, können Sie den Rechenaufwand und I/O die Kosten für Ihre Analyseanfragen senken.

  • Bessere Skalierbarkeit: Die Partitionierung ermöglicht die parallele Verarbeitung von Datensegmenten und ermöglicht so eine effizientere Skalierung von Analytik-Workloads.

  • Vereinfachtes Datenlebenszyklusmanagement: Sie können Aufbewahrungsrichtlinien auf Partitionsebene verwalten, was das Archivieren oder Löschen älterer Daten erleichtert.

Wichtige Partitionierungskonzepte

Spalten der Partition

Spalten in Ihren Daten, anhand derer bestimmt wird, wie Datensätze in Partitionen eingeteilt werden. Effektive Partitionsspalten orientieren sich an gängigen Abfragemustern und weisen eine angemessene Kardinalität auf.

Partitionsfunktionen

Transformationen, die auf Partitionsspaltenwerte angewendet wurden, um die tatsächlichen Partitionsgrenzen zu erstellen. Beispiele hierfür sind identitäts- (unter Verwendung des Rohwerts) und zeitbasierte Funktionen (Jahr, Monat, Tag, Stunde).

Beschneiden von Partitionen

Bei diesem Prozess identifiziert und überspringt die Abfrage-Engine Partitionen, die keine relevanten Daten für eine Abfrage enthalten, wodurch die Leistung erheblich verbessert wird.

Granularität der Partition

Der Detaillierungsgrad, mit dem Daten partitioniert werden. Eine feinere Granularität (mehr Partitionen) kann die Abfrageleistung verbessern, kann jedoch den Verwaltungsaufwand für Metadaten erhöhen. Eine gröbere Granularität (weniger Partitionen) reduziert den Verwaltungsaufwand für Metadaten, kann aber dazu führen, dass mehr Daten als nötig gescannt werden.

Partitionierung in AWS Glue Zero-ETL-Integrationen

AWS Glue Zero-ETL-Integrationen verwenden das Apache Iceberg-Tabellenformat, das erweiterte Partitionierungsfunktionen bietet. Wenn Sie eine Null-ETL-Integration erstellen, ist Folgendes möglich:

  • Sie können standardmäßige Partitionierungsstrategien verwenden, die für Ihre Datenquelle optimiert sind.

  • Sie können benutzerdefinierte Partitionierungsspezifikationen definieren, die auf Ihre Abfragemuster zugeschnitten sind.

  • Sie können Transformationen auf Partitionsspalten anwenden (besonders nützlich für zeitstempelbasierte Partitionierung).

  • Sie können mehrere Partitionsstrategien für die Partitionierung auf mehreren Ebenen komibinieren.

Partitionierungskonfigurationen werden bei der Einrichtung Ihrer Null-ETL-Integration über die CreateIntegrationTableProperty-API angegeben. Nach der Konfiguration wendet AWS Glue diese Partitionierungsstrategien automatisch an, um Ihre Daten am Zielort zu organisieren.

API-Referenz für Partitionsspezifikationen

Verwenden Sie die folgenden Parameter in der CreateIntegrationTableProperties API, um die Partitionierung zu konfigurieren:

PartitionSpec

Eine Reihe von Partitionsspezifikationen, die definieren, wie Daten am Zielort partitioniert werden.

{ "partitionSpec": [ { "fieldName": "timestamp_col", "functionSpec": "month", "conversionSpec": "epoch_milli" }, { "fieldName": "category", "functionSpec": "identity" } ] }
FieldName

Eine UTF-8-Zeichenfolge (1–128 Byte), die den Spaltennamen angibt, der für die Partitionierung verwendet werden soll.

FunctionSpec

Spezifiziert die Partitionierungsfunktion. Zulässige Werte:

  • identity – verwendet Quellwerte direkt ohne Transformation

  • year – extrahiert das Jahr aus Zeitstempelwerten (z. B. 2023)

  • month – extrahiert den Monat aus Zeitstempelwerten (z. B. 2023-01)

  • day – extrahiert den Tag aus Zeitstempelwerten (z. B. 2023-01-15)

  • hour – extrahiert die Stunde aus Zeitstempelwerten (z. B. 2023-01-15-14)

Anmerkung

Zeitbasierte Funktionen (year, month, day und hour) erfordern, dass der ConversionSpec-Parameter das Quell-Zeitstempelformat angibt.

ConversionSpec

Eine UTF-8-Zeichenfolge, die das Zeitstempelformat der Quelldaten angibt. Folgende sind gültige Werte:

  • epoch_sec – Zeitstempel der Unix-Epoche in Sekunden

  • epoch_milli – Zeitstempel der Unix-Epoche in Millisekunden

  • iso – Zeitstempel im ISO-8601-Format

Partitionierungsstrategien

Standardpartitionierung

Wenn keine Partitionsspalten angegeben sind, wendet AWS Glue Zero-ETL standardmäßige Partitionierungsstrategien an, die für Ihre Datenquelle optimiert sind:

  • Primärschlüsselbasierte Partitionierung: Bei Quellen mit Primärschlüsseln (wie DynamoDB-Tabellen) partitioniert AWS -Glue-Null-ETL Daten automatisch mithilfe des Primärschlüssels mit Bucketing, um eine übermäßig große Anzahl an Partitionen zu verhindern.

Die Standardpartitionierung ist so konzipiert, dass sie sich gut für gängige Abfragemuster eignet, ohne dass eine manuelle Konfiguration erforderlich ist. Für bestimmte Abfragemuster oder Leistungsanforderungen sollten Sie jedoch benutzerdefinierte Partitionierungsstrategien definieren.

Benutzerdefinierte Partitionierungsstrategien

AWS Mit Glue Zero-ETL können Sie mithilfe des Parameters benutzerdefinierte Partitionierungsstrategien definieren. PartitionSpec Sie können eine oder mehrere Partitionsspalten angeben und auf jede Spalte unterschiedliche Partitionierungsfunktionen anwenden.

Bei der Identitätspartitionierung werden die Rohwerte einer Spalte verwendet, um Partitionen zu erstellen. Diese Strategie ist nützlich für Spalten mit niedriger bis mittlerer Kardinalität, z. B. Kategorie-, Regions- oder Statusfelder.

Beispiel Beispiele für Identitätspartitionierung
{ "partitionSpec": [ { "fieldName": "category", "functionSpec": "identity" } ] }

Dadurch werden separate Partitionen für jeden eindeutigen Wert in der Spalte „Kategorie“ erstellt.

Warnung

Vermeiden Sie die Identitätspartitionierung mit Spalten hoher Kardinalität (wie Primärschlüssel oder Zeitstempel), da dies zu einer übermäßig hohen Anzahl an Partitionen führen kann, was die Leistung beeinträchtigt und den Verwaltungsaufwand für Metadaten erhöht.

Die zeitbasierte Partitionierung organisiert Daten auf der Grundlage von Zeitstempelwerten in unterschiedlichen Granularitäten (Jahr, Monat, Tag oder Stunde). Diese Strategie ist ideal für Zeitreihendaten und ermöglicht effiziente Zeitbereichsabfragen.

Bei Verwendung der zeitbasierten Partitionierung kann AWS Glue Zero-ETL verschiedene Zeitstempelformate automatisch in ein standardisiertes Format konvertieren, bevor die Partitionsfunktion angewendet wird. Diese Konvertierung wird mithilfe des ConversionSpec-Parameters angegeben.

Beispiel Beispiele für zeitbasierte Partitionierung
{ "partitionSpec": [ { "fieldName": "created_at", "functionSpec": "month", "conversionSpec": "epoch_milli" } ] }

Dabei werden Daten auf der Grundlage der Spalte „created_at“, die Zeitstempel der Unix-Epoche in Millisekunden enthält, nach Monaten partitioniert.

AWS Glue Zero-ETL unterstützt die folgenden zeitbasierten Partitionsfunktionen:

  • Jahr: partitioniert Daten nach Jahren (z. B. 2023, 2024)

  • Monat: partitioniert Daten nach Monaten (z. B. 2023-01, 2023-02)

  • Tag: partitioniert Daten nach Tagen (z. B. 2023-01-01, 2023-01-02)

  • Stunde: partitioniert Daten nach Stunden (z. B. 2023-01-01-01, 2023-01-01-02)

AWS Glue Zero-ETL unterstützt über den Parameter die folgenden Zeitstempelformate: ConversionSpec

  • epoch_sec: Zeitstempel der Unix-Epoche in Sekunden

  • epoch_milli: Zeitstempel der Unix-Epoche in Millisekunden

  • iso: Zeitstempel im ISO-8601-Format

Anmerkung

Die ursprünglichen Spaltenwerte bleiben in Ihren Quelldaten unverändert. AWS Glue wandelt in der Zieldatenbanktabelle nur Partitionsspaltenwerte in den Timestamp-Typ um. Die Transformationen gelten nur für den Partitionierungsprozess.

Die Multi-Level-Partitionierung kombiniert mehrere Partitionsstrategien, um ein hierarchisches Partitionierungsschema zu erstellen. Dies ist nützlich, um verschiedene Arten von Abfragen für denselben Datensatz zu optimieren.

Beispiel Beispiele für Multi-Level-Partitionierung
{ "partitionSpec": [ { "fieldName": "created_at", "functionSpec": "month", "conversionSpec": "iso" }, { "fieldName": "region", "functionSpec": "identity" } ] }

Dadurch wird ein zweistufiges Partitionierungsschema erstellt: zuerst nach Monat (aus der Spalte „created_at“), dann nach Region. Dies ermöglicht effiziente Abfragen, die nach Datumsbereichen, bestimmten Regionen oder einer Kombination dieser Dimensionen filtern.

Beim Entwerfen von Partitionierungsschemata mit mehreren Ebenen müssen Sie Folgendes berücksichtigen:

  • Platzieren Sie Spalten mit höherer Selektivität an erster Stelle in der Partitionshierarchie.

  • Gleichen Sie die Partitionsgranularität mit der Anzahl an Partitionen aus.

  • Richten Sie das Partitionierungsschemas an Ihren gängigsten Abfragemustern aus.

Best Practices

Auswählen der Partitionsspalten

  • Verwenden Sie bei der identity-Partitionsfunktion keine Spalten mit hoher Kardinalität. Durch die Verwendung von Spalten mit hoher Kardinalität und Identitätspartitionierung entstehen viele kleine Partitionen, wodurch die Aufnahmeleistung erheblich beeinträchtigt werden kann. Spalten mit hoher Kardinalität können Folgendes beinhalten:

    • Primärschlüssel

    • Zeitstempelfelder (z. B. LastModifiedTimestamp und CreatedDate)

    • Vom System generierte Zeitstempel

  • Wählen Sie nicht mehrere Zeitstempelpartitionen in derselben Spalte aus. Beispiel:

    "partitionSpec": [ {"fieldName": "col1", "functionSpec": "year", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "month", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "day", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "hour", "conversionSpec" : "epoch_milli"} ]

Auswahl der Partition FunctionSpec/ConversionSpec

  • Geben Sie das korrekte Format ConversionSpec (epoch_sec | epoch_milli | iso) an, das das Format der Spaltenwerte darstellt, die für die zeitstempelbasierte Partitionierung ausgewählt wurden, wenn Sie zeitstempelbasierte Partitionsfunktionen verwenden. AWS Glue Zero-ETL verwendet diesen Parameter, um Quelldaten vor der Partitionierung korrekt in das Zeitstempelformat umzuwandeln.

  • Verwenden Sie die entsprechende Granularität (year/month/day/hour), die auf dem Datenvolumen basiert.

  • Berücksichtigen Sie bei der Verwendung von ISO-Zeitstempeln die Auswirkungen auf die Zeitzone. AWS Glue Zero-ETL füllt alle Datensatzwerte der ausgewählten Zeitstempelspalte mit der UTC-Zeitzone.

Fehlerbehandlung

Status NEEDS_ATTENTION

Eine Integration wechselt in den Status NEEDS_ATTENTION, wenn:

  • die angegebenen Partitionsspalten in der Quelle nicht vorhanden sind

  • die Zeitstempelkonvertierung für Partitionsspalten fehlschlägt