Tabellen mit Partitionen aktualisieren - Amazon Athena

Tabellen mit Partitionen aktualisieren

In Athena müssen eine Tabelle und ihre Partitionen die gleichen Datenformate verwenden, ihre Schemata können aber unterschiedlich sein. Wenn Sie eine neue Partition erstellen, erbt die Partition in der Regel das Schema der Tabelle. Im Laufe der Zeit können sich die Schemas ggf. unterscheiden. Gründe sind u. a.:

  • Wenn sich das Schema der Tabelle ändert, werden die Schemas für Partitionen nicht aktualisiert, um weiterhin dem Schema der Tabelle zu entsprechen.

  • Mit dem AWS Glue Crawler können Sie Daten in Partitionen mit abweichenden Schemata finden. Das bedeutet: Wenn Sie eine Tabelle in Athena mit AWS Glue erstellen, können sich die Schemata für die Tabelle und ihre Partitionen unterscheiden, nachdem der Crawler mit der Verarbeitung fertig ist.

  • Wenn Sie Partitionen direkt mit einer AWS-API hinzufügen.

Athena verarbeitet Tabellen mit Partitionen erfolgreich, wenn sie die folgenden Beschränkungen erfüllen. Wenn diese Beschränkungen nicht erfüllt sind, gibt Athena einen HIVE_PARTITION_SCHEMA_MISMATCH-Fehler aus.

  • Das Schema jeder Partition ist kompatibel mit dem Tabellenschema.

  • Das Datenformat der Tabelle ermöglicht die Art der Aktualisierung, die Sie ausführen möchten: Spalten hinzufügen, löschen, ihre Reihenfolge ändern oder den Datentyp einer Spalte ändern.

    Beispiel: In den Formaten CSV und TSV können Sie Spalten umbenennen, neue Spalten am Ende der Tabelle hinzufügen und den Datentyp einer Spalte ändern, falls die Typen kompatibel sind. Sie können aber keine Spalten entfernen. Bei anderen Formaten können Sie Spalten hinzufügen oder entfernen oder den Datentyp in einen anderen ändern, wenn die Typen kompatibel sind. Weitere Informationen finden Sie unter Zusammenfassung: Updates und Datenformate in Athena.

Vermeiden von Schemakonflikt-Fehlern für Tabellen mit Partitionen

Zu Beginn der Abfrageausführung überprüft Athena das Schema einer Tabelle, indem überprüft wird, dass der Datentyp jeder Spalte in der Tabelle und der Partition kompatibel ist.

  • Für Parquet- und ORC-Datenspeichertypen stützt sich Athena auf die Spaltennamen und verwendet sie für die auf Spaltennamen basierte Überprüfung des Schemas. Dadurch werden HIVE_PARTITION_SCHEMA_MISMATCH-Fehler für Tabellen mit Partitionen in Parquet und ORC verhindert. (Dies gilt für ORC, wenn die SerDe-Eigenschaft für den Zugriff auf den Index nach Name festgelegt ist: orc.column.index.access=FALSE. Parquet liest den Index standardmäßig nach Namen).

  • Für CSV, JSON und Avro verwendet Athena eine Index-basierte Schemaverifizierung. Das bedeutet: Wenn bei Ihnen ein Schemakonflikt-Fehler auftritt, sollten Sie die Partition löschen, die einen Schemakonflikt auslöst, und sie erneut erstellen. So kann Athena sie ohne Fehler abfragen.

Athena vergleicht das Schema der Tabelle mit den Partitionsschemata. Wenn Sie eine Tabelle in CSV, JSON und AVRO in Athena mit AWS Glue Crawler erstellen, können sich die Schemata für die Tabelle und ihre Partitionen unterscheiden, nachdem der Crawler mit der Verarbeitung fertig ist. Tritt ein Konflikt zwischen dem Tabellen- und dem Partitionsschema auf, scheitern Ihre Abfragen in Athena wegen eines Fehlers beim Überprüfen des Schemas, ähnlich dem Folgenden: „‚crawler_test.click_avro‘ ist als Typ ‚string‘ deklariert, in der Partition ‚partition_0=2017-01-17‘ ist die Spalte ‚col68‘ aber mit dem Typ ‚double‘ deklariert.“

Eine typische Behelfslösung für diesen Fehler besteht darin, dass die Partition entfernt wird, die den Fehler auslöst, und Sie sie dann erneut erstellen. Weitere Informationen finden Sie unter ALTER TABLE DROP PARTITION und ALTER TABLE ADD PARTITION.