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 name/value Spaltenkombinationen. 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 Ihre Daten 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 Tabellen mit Partitionen aktualisieren.

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 Konfigurieren Sie den Zugriff auf Datenbanken und Tabellen in AWS Glue Data Catalog. Informationen zur Fehlerbehebung bei Berechtigungen bei der Verwendung von Athena finden Sie im Abschnitt Berechtigungen des Themas Beheben von Problemen in Athena.

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'] [,...]

Parameters

Wenn Sie eine Partition hinzufügen, geben Sie ein oder mehrere name/value Spaltenpaare für die Partition und den Amazon S3 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 name/value Spaltenkombinationen. 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 Ihre Daten partitionieren.

Überlegungen

Amazon Athena legt kein bestimmtes Begrenzung 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 Stapel aufzuteilen, um potenzielle Leistungsprobleme zu vermeiden. Das folgende Beispiel verwendet aufeinanderfolgende Befehle, um Partitionen einzeln hinzuzufügen, und verwendet IF NOT EXISTS, um das Hinzufügen von Duplikaten 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.

Weitere Überlegungen zur Arbeit mit Partitionen in Athena finden Sie unter Ihre Daten 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://amzn-s3-demo-bucket/path/to/INDIA_31_May_2016/' PARTITION (dt = '2016-06-01', country = 'IN') LOCATION 's3://amzn-s3-demo-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 […]