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.
Im Laufe der Zeit werden Hunderttausende von Partitionen zu einer Tabelle hinzugefügt. Die GetPartitions API wird verwendet, um die Partitionen in der Tabelle abzurufen. Die API gibt Partitionen zurück, die dem in der Anfrage angegebenen Ausdruck entsprechen.
Nehmen wir als Beispiel eine sales_data-Tabelle, die nach den Schlüsseln Country, Category, Year, Month und CreationDate partitioniert ist. Wenn Sie Verkaufsdaten für alle Artikel erhalten möchten, die im Jahr 2020 nach dem 15.08.2020 für die Kategorie Bücher verkauft wurden, müssen Sie eine GetPartitions
Anfrage mit dem Ausdruck „Kategorie = 'Bücher' und CreationDate > '2020-08-15'“ an den Datenkatalog stellen.
Wenn in der Tabelle keine Partitionsindizes vorhanden sind, AWS Glue lädt alle Partitionen der Tabelle und filtert dann die geladenen Partitionen anhand des vom Benutzer in der GetPartitions
Anforderung angegebenen Abfrageausdrucks. Die Ausführung der Abfrage nimmt mehr Zeit in Anspruch, wenn die Anzahl der Partitionen in einer Tabelle ohne Indizes zunimmt. Mit einem Index versucht die GetPartitions
-Abfrage eine Teilmenge der Partitionen abzurufen, statt alle Partitionen in der Tabelle zu laden.
Themen
Informationen zu Partitionsindizes
Wenn Sie einen Partitionsindex erstellen, geben Sie eine Liste der Partitionsschlüssel an, die bereits in einer bestimmten Tabelle vorhanden sind. Partitionsindex ist eine untergeordnete Liste der Partitionsschlüssel, die in der Tabelle definiert sind. Ein Partitionsindex kann auf jeder Permutation von Partitionsschlüsseln erstellt werden, die in der Tabelle definiert sind. Für die obige sales_data-Tabelle sind die möglichen Indizes (Land, Kategorie, creationDate), (Land, Kategorie, Jahr), (Land, Kategorie), (Land), (Kategorie, Land, Jahr, Monat) usw. möglich.
Der Data Catalog verkettet die Partitionswerte in der Reihenfolge, die zum Zeitpunkt der Indexerstellung angegeben wurde. Der Index wird konsistent erstellt, wenn Partitionen zur Tabelle hinzugefügt werden. Indizes können für die Spaltentypen String (string, char und varchar), Numeric (int, bigint, long, tinyint und smallint) und Date (yyyy-MM-DD) erstellt werden.
Unterstützte Datentypen
Datum — Ein Datum im ISO-Format, z.
YYYY-MM-DD
B. Zum Beispiel Datum2020-08-15
. Das Format verwendet Bindestriche (‐), um Jahr, Monat und Tag zu trennen. Der zulässige Bereich für Datumsangaben für die Indizierung reicht von bis.0000-01-01
9999-12-31
-
Zeichenfolge — Ein Zeichenfolgenliteral, das in einfache oder doppelte Anführungszeichen eingeschlossen ist.
Char — Zeichendaten mit fester Länge und einer angegebenen Länge zwischen 1 und 255, z. B. char (10).
Varchar — Zeichendaten mit variabler Länge und einer angegebenen Länge zwischen 1 und 65535, z. B. varchar (10).
-
Numerisch — int, bigint, long, tinyint und smallint
Indizes für die Datentypen Numeric, String und Date unterstützen die Operatoren =, >, >=, <, <= und zwischen. Die Indexierungslösung unterstützt derzeit nur den logischen Operator AND
. Subausdrücke mit den Operatoren „LIKE“, „IN“, „OR“ und „NOT“ werden im Ausdruck zum Filtern mit einem Index ignoriert. Die Filterung für den ignorierten Subausdruck erfolgt auf den Partitionen, die nach dem Anwenden der Indexfilterung abgerufen werden.
Für jede Partition, die einer Tabelle hinzugefügt wird, wird ein entsprechendes Indexelement erstellt. Für eine Tabelle mit 'n'-Partitionen führt 1 Partitionsindex zu 'n' Partitionsindex-Elementen. Der Partitionsindex „m“ in derselben Tabelle führt zu „m*n“ Partitionsindex-Elementen. Für jedes Element im Partitionsindex wird der aktuelle Wert berechnet AWS Glue Preispolitik für die Speicherung von Datenkatalogen. Einzelheiten zur Preisgestaltung von Speicherobjekten finden Sie unter AWS Glue Preisgestaltung
Erstellen einer Tabelle mit Partitionsindizes
Sie können einen Partitionsindex während der Tabellenerstellung erstellen. Die CreateTable
-Anforderung nimmt eine Liste von PartitionIndex
-Objekten als Eingabe. Für eine bestimmte Tabelle können maximal 3 Partitionsindizes erstellt werden. Jeder Partitionsindex erfordert einen Namen und eine Liste von partitionKeys
, die für die Tabelle definiert ist. Erstellte Indizes für eine Tabelle können mit der GetPartitionIndexes
-API abgerufen werden
Hinzufügen eines Partitionsindexes zu einer vorhandenen Tabelle
Um einen Partitionsindex einer vorhandenen Tabelle hinzuzufügen, verwenden Sie die CreatePartitionIndex
-Operation. Sie können einen PartitionIndex
pro CreatePartitionIndex
-Operation erstellen. Das Hinzufügen eines Index wirkt sich nicht auf die Verfügbarkeit einer Tabelle aus, da die Tabelle während der Erstellung von Indizes weiterhin verfügbar ist.
Der Indexstatus für eine hinzugefügte Partition wird auf CREATING gesetzt und die Erstellung der Indexdaten wird gestartet. Wenn der Prozess zum Erstellen der Indizes erfolgreich ist, wird der indexStatus auf ACTIVE aktualisiert, und für einen nicht erfolgreichen Prozess wird der Indexstatus auf FAILED aktualisiert. Die Indexerstellung kann aus mehreren Gründen fehlschlagen, und Sie können die GetPartitionIndexes
-Operation verwenden, um die Fehlerdetails abzurufen. Mögliche Fehler:
ENCRYPTED_PARTITION_ERROR – Die Indexerstellung für eine Tabelle mit verschlüsselten Partitionen wird nicht unterstützt.
INVALID_PARTITION_TYPE_DATA_ERROR – Wird beobachtet, wenn der
partitionKey
-Wert kein gültiger Wert für den entsprechendenpartitionKey
-Datentyp ist. Beispiel: einpartitionKey
mit dem Datentyp 'int' hat einen Wert 'foo'.MISSING_PARTITION_VALUE_ERROR – Tritt auf, wenn der
partitionValue
für einenindexedKey
nicht vorhanden ist. Dies kann passieren, wenn eine Tabelle nicht konsistent partitioniert wird.UNSUPPORTED_PARTITION_CHARACTER_ERROR – Wird beobachtet, wenn der Wert für einen indizierten Partitionsschlüssel die Zeichen \u0000, \u0001 oder \u0002 enthält
INTERNAL_ERROR – Beim Erstellen von Indizes ist ein interner Fehler aufgetreten.
Beschreiben von Partitionsindizes in einer Tabelle
Verwenden Sie die GetPartitionIndexes
-Operation, um die für eine Tabelle erstellten Partitionsindizes abzurufen. Die Antwort zeigt alle Indizes der Tabelle, zusammen mit deren jeweiligem aktuellen Status (dem IndexStatus
).
Der IndexStatus
für einen Partitionsindex ist einer der Folgenden:
CREATING
– Der Index wird derzeit erstellt und ist noch nicht verfügbar.ACTIVE
– Der Index ist jetzt verfügbar. Anforderungen können den Index verwenden, um eine optimierte Abfrage auszuführen.DELETING
– Der Index wird derzeit gelöscht und kann nicht länger verwendet werden. Ein Index im aktiven Zustand kann mit derDeletePartitionIndex
-Anforderung gelöscht werden, die den Status von AKTIV zu LÖSCHEN ändert.FAILED
– Die Indexerstellung für eine vorhandene Tabelle ist fehlgeschlagen. In jeder Tabelle werden die letzten 10 fehlgeschlagenen Indizes gespeichert.
Die möglichen Zustandsübergänge für Indizes, die für eine vorhandene Tabelle erstellt wurden, sind:
ERSTELLEN → AKTIV → LÖSCHEN
ERSTELLEN → FEHLGESCHLAGEN
Einschränkungen bei der Verwendung von Partitionsindizes
Nachdem Sie einen Partitionsindex erstellt haben, beachten Sie die folgenden Änderungen an der Tabellen- und Partitionsfunktionalität:
Erstellung einer neuen Partition (nach dem Hinzufügen des Index)
Nachdem ein Partitionsindex für eine Tabelle erstellt wurde, werden alle neuen Partitionen, die der Tabelle hinzugefügt wurden, für die Datentypüberprüfungen für indizierte Schlüssel validiert. Der Partitionswert der indizierten Schlüssel wird für das Datentypformat validiert. Wenn die Datentypprüfung fehlschlägt, schlägt der Vorgang zum Erstellen der Partition fehl. Das Erstellen einer neuen Partition mit dem Wert JAHR als „foo“ schlägt für die sales_data-Tabelle fehl, wenn ein Index für die Schlüssel (Kategorie, Jahr) erstellt wird, wobei die Kategorie vom Typ string
und Jahr vom Typ int
ist.
Nachdem Indizes aktiviert sind, schlägt das Hinzufügen von Partitionen mit indizierten Schlüsselwerten mit den Zeichen U+0000, U+00001 und U+0002 fehl.
Tabellen-Aktualisierungen
Sobald ein Partitionsindex für eine Tabelle erstellt wurde, können Sie die Partitionsschlüsselnamen für vorhandene Partitionsschlüssel nicht ändern. Das gleiche gilt für den Typ oder die Reihenfolge der Schlüssel, die mit dem Index registriert sind.
Verwenden von Indizes für einen optimierten Anruf GetPartitions
Wenn Sie GetPartitions
für eine Tabelle mit einem Index verwenden, können Sie einen Ausdruck einschließen, und wenn möglich, verwendet der Data Catalog einen Index. Der erste Schlüssel des Indexes sollte im Ausdruck für die Indizes übergeben werden, die beim Filtern verwendet werden sollen. Die Indexoptimierung in der Filterung wird als Best Effort angewendet. Der Data Catalog versucht, die Indexoptimierung so weit wie möglich zu verwenden, aber im Falle eines fehlenden Index oder nicht unterstützten Operators fällt er auf die vorhandene Implementierung des Ladens aller Partitionen zurück.
Fügen wir für die sales_data-Tabelle oben den Index [Land, Kategorie, Jahr] hinzu. Wenn „Country“ im Ausdruck nicht übergeben wird, kann der registrierte Index keine Partitionen mithilfe von Indizes filtern. Sie können bis zu 3 Indizes hinzufügen, um verschiedene Abfragemuster zu unterstützen.
Nehmen wir einige Beispielausdrücke und sehen, wie Indizes darauf funktionieren:
Ausdrücke | Wie wird der Index verwendet |
---|---|
Land = „USA“ |
Index wird verwendet, um Partitionen zu filtern. |
Land = 'USA' und Kategorie = 'Schuhe' |
Index wird verwendet, um Partitionen zu filtern. |
Kategorie = 'Schuhe' |
Indizes werden nicht verwendet, da „Land“ nicht im Ausdruck angegeben wird. Alle Partitionen werden geladen, um eine Antwort zurückzugeben. |
Land = 'USA' und Kategorie = 'Schuhe' und Jahr > '2018' |
Index wird verwendet, um Partitionen zu filtern. |
Land = 'USA' und Kategorie = 'Schuhe' und Jahr > '2018' und Monat = 2 |
Index wird verwendet, um alle Partitionen abzurufen; Land = „USA“ und Kategorie = „Schuhe“ und Jahr > 2018. Anschließend wird nach dem Ausdruck 'Monat' gefiltert. |
Land = 'USA' UND Kategorie = 'Schuhe' ODER Jahr > '2018' |
Indizes werden nicht verwendet, da ein |
Land = 'USA' UND Kategorie = 'Schuhe' UND (Jahr > 2017 ODER Jahr = '2018') |
Index wird verwendet, um alle Partitionen mit Land = 'USA' und Kategorie = 'Schuhe' abzurufen. Anschließend wird nach dem Ausdruck 'Jahr' gefiltert. |
Land ist ('USA', 'GB') UND Kategorie = 'Schuhe' |
Indizes werden nicht zum Filtern verwendet, da der |
Land = 'USA' UND Kategorie in ('Schuhe', 'Bücher') |
Index wird verwendet, um alle Partitionen mit Land = "USA" abzurufen, und dann wird eine Filterung nach dem Kategorieausdruck durchgeführt. |
Land = 'USA' UND Kategorie in ('Schuhe', 'Bücher') UND (creationDate > '2023-9-01' |
Der Index wird verwendet, um alle Partitionen mit country = „US“ und mit CreationDate > '2023-9-01' abzurufen. Anschließend wird nach dem Categorie-Ausdruck gefiltert. |
Integration mit Engines
Redshift Spectrum, Amazon EMR und AWS Glue ETL Spark DataFrames ist in der Lage, Indizes zum Abrufen von Partitionen zu verwenden, nachdem sich Indizes im Status AKTIV befinden in AWS Glue. Athena und AWS Glue Bei dynamischen ETL-Frames müssen Sie zusätzliche Schritte ausführen, um Indizes zur Verbesserung von Abfragen zu verwenden.
Aktivieren Sie die Partitionsfilterung
Um die Partitionsfilterung in Athena zu aktivieren, müssen Sie die Tabelleneigenschaften wie folgt aktualisieren:
Wählen Sie in der AWS Glue Konsole unter Datenkatalog die Option Tabellen aus.
Wählen Sie eine -Tabelle aus.
Wählen Sie unter Aktionen die Option Tabelle bearbeiten aus.
Fügen Sie unter Tabelleneigenschaften Folgendes hinzu:
Schlüssel —
partition_filtering.enabled
Wert —
true
Wählen Sie Anwenden aus.
Alternativ können Sie diesen Parameter festlegen, indem Sie eine ALTER TABLE SET PROPERTIES-Abfrage in Athena ausführen.
ALTER TABLE partition_index.table_with_index
SET TBLPROPERTIES ('partition_filtering.enabled' = 'true')