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_valuenur 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 TABLEtable_nameADD IF NOT EXISTS PARTITION (ds='2023-01-01') ALTER TABLEtable_nameADD IF NOT EXISTS PARTITION (ds='2023-01-02') ALTER TABLEtable_nameADD 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 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 […]