ALTER TABLE ADD PARTITION - Amazon Athena

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.

ALTER TABLE ADD PARTITION

Erstellt eine oder mehrere Partitionsspalten für die Tabelle. Jede Partition besteht aus einer oder mehreren unterschiedlichen Spaltenname/Wert-Kombinationen. Für jede angegebene Kombination wird ein eigenes Datenverzeichnis erstellt. Dies kann die Abfrageleistung in einigen Fällen verbessern. Partitionierte Spalten sind nicht in den Tabellendaten selbst vorhanden. Falls Sie also einen Spaltennamen angeben, der mit einer Spalte in der Tabelle übereinstimmt, wird ein Fehler ausgegeben. Weitere Informationen finden Sie unter Daten in Athena partitionieren.

In Athena müssen eine Tabelle und ihre Partitionen die gleichen Datenformate verwenden, ihre Schemata können aber unterschiedlich sein. Weitere Informationen finden Sie unter Updates in Tabellen mit Partitionen.

Informationen zu den Berechtigungen auf Ressourcenebene, die in IAM-Richtlinien (einschließlich glue:CreatePartition) erforderlich sind, finden Sie unter AWS Glue -API-Berechtigungen: Referenz zu Aktionen und Ressourcen und Detaillierter Zugriff auf Datenbanken und Tabellen in der AWS Glue Data Catalog. Informationen zur Fehlerbehebung bei Berechtigungen bei der Verwendung von Athena finden Sie im Abschnitt Berechtigungen des Themas Athena-Fehlerbehebung.

Syntax

ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION (partition_col1_name = partition_col1_value [,partition_col2_name = partition_col2_value] [,...]) [LOCATION 'location1'] [PARTITION (partition_colA_name = partition_colA_value [,partition_colB_name = partition_colB_value [,...])] [LOCATION 'location2'] [,...]

Parameter

Wenn Sie eine Partition hinzufügen, geben Sie ein oder mehrere Spaltenname/Wert-Paare für die Partition und den Amazon-S3-Pfad an, in dem sich die Datendateien für diese Partition befinden.

[IF NOT EXISTS]

Führt in dem Fall, dass bereits eine Partition mit derselben Definition vorhanden ist, zu einer Fehlerunterdrückung.

PARTITION (partition_col_name = partition_col_value [,...])

Erstellt eine Partition mit den von Ihnen angegebenen Spaltenname/Wert-Kombinationen. Binden Sie partition_col_value nur als Zeichenfolgenzeichen ein, wenn der Datentyp der Spalte eine Zeichenfolge ist.

[LOCATION 'location']

Gibt das Verzeichnis an, in dem die in der vorherigen Anweisung definierten Partitionen gespeichert werden. Die LOCATION-Klausel ist optional, wenn die Daten Partitionierung (pk1=v1/pk2=v2/pk3=v3) im Hive-Stil verwenden. Bei der Partitionierung im Hive-Stil wird der vollständige Amazon-S3-URI automatisch aus dem Speicherort der Tabelle, den Partitionsschlüsselnamen und den Partitionsschlüsselwerten erstellt. Weitere Informationen finden Sie unter Daten in Athena partitionieren.

Überlegungen

Amazon Athena legt kein bestimmtes Limit für die Anzahl der Partitionen fest, die Sie in einer einzelnen ALTER TABLE ADD PARTITION DDL-Anweisung hinzufügen können. Wenn Sie jedoch eine beträchtliche Anzahl von Partitionen hinzufügen müssen, sollten Sie erwägen, den Vorgang in kleinere Batches aufzuteilen, um potenzielle Leistungsprobleme zu vermeiden. Das folgende Beispiel verwendet aufeinanderfolgende Befehle, um Partitionen einzeln hinzuzufügen, und verwendet, um das Hinzufügen von Duplikaten IF NOT EXISTS zu vermeiden.

ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-01') ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-02') ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-03')

Beachten Sie bei der Arbeit mit Partitionen in Athena auch die folgenden Punkte:

  • Athena unterstützt zwar das Abfragen von AWS Glue Tabellen mit 10 Millionen Partitionen, Athena kann jedoch nicht mehr als 1 Million Partitionen in einem einzigen Scan lesen.

  • Um Ihre Abfragen zu optimieren und die Anzahl der gescannten Partitionen zu reduzieren, sollten Sie Strategien wie das Bereinigen von Partitionen oder die Verwendung von Partitionsindizes in Betracht ziehen.

  • Wenn Sie dies nicht verwenden AWS Glue Data Catalog, beträgt die maximale Anzahl von Partitionen pro Tabelle 20.000. Sie können eine Kontingenterhöhung beantragen.

Weitere Überlegungen zur Arbeit mit Partitionen in Athena finden Sie unterDaten in Athena partitionieren.

Beispiele

Das folgende Beispiel fügt einer Tabelle für partitionierte Daten im Hive-Stil eine einzelne Partition hinzu.

ALTER TABLE orders ADD PARTITION (dt = '2016-05-14', country = 'IN');

Das folgende Beispiel fügt einer Tabelle für partitionierte Daten im Hive-Stil mehrere Partitionen hinzu.

ALTER TABLE orders ADD PARTITION (dt = '2016-05-31', country = 'IN') PARTITION (dt = '2016-06-01', country = 'IN');

Wenn die Tabelle nicht für partitionierte Daten im Hive-Stil bestimmt ist, ist die LOCATION-Klausel erforderlich und sollte der vollständige Amazon-S3-URI für das Präfix sein, das die Daten der Partition enthält.

ALTER TABLE orders ADD PARTITION (dt = '2016-05-31', country = 'IN') LOCATION 's3://DOC-EXAMPLE-BUCKET/path/to/INDIA_31_May_2016/' PARTITION (dt = '2016-06-01', country = 'IN') LOCATION 's3://DOC-EXAMPLE-BUCKET/path/to/INDIA_01_June_2016/';

Um Fehler zu ignorieren, wenn die Partition bereits existiert, verwenden Sie die IF NOT EXISTS-Klausel, wie folgt.

ALTER TABLE orders ADD IF NOT EXISTS PARTITION (dt = '2016-05-14', country = 'IN');

Null Byte _$folder$-Datei

Wenn du eine ALTER TABLE ADD PARTITION-Anweisung ausführst und fälschlicherweise eine Partition angibts, die bereits vorhanden ist, und einen falschen Ort für Simple Storage Service (Amazon S3), Null-Byte-Platzhalterdateien des Formats partition_value_$folder$ werden in Simple Storage Service (Amazon S3) erstellt. Sie müssen diese Dateien manuell entfernen.

Um dies zu verhindern, verwenden Sie die ADD IF NOT EXISTS-Syntax in Ihrer ALTER TABLE ADD PARTITION-Anweisung wie folgt.

ALTER TABLE table_name ADD IF NOT EXISTS PARTITION […]