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 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 in IAM Richtlinien (einschließlichglue:CreatePartition
) erforderlichen Berechtigungen auf Ressourcenebene finden Sie unter AWS Glue APIBerechtigungen: 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 Probleme in Athena beheben.
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.
- [WENN] NOT EXISTS
-
Führt in dem Fall, dass bereits eine Partition mit derselben Definition vorhanden ist, zu einer Fehlerunterdrückung.
- PARTITION(Partitionsspaltenname = Partitionsspaltenwert [,...])
-
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['Standort']
-
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 URI wird der vollständige Amazon S3 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 Limit für die Anzahl der Partitionen fest, die Sie in einer einzigen 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 TABLEtable_name
ADD IF NOT EXISTS PARTITION (ds='2023-01-02') ALTER TABLEtable_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 unterIhre 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
werden in Simple Storage Service (Amazon S3) erstellt. Sie müssen diese Dateien manuell entfernen.partition_value
_$folder$
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 […]