Verarbeiten von Schema-Updates - 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.

Verarbeiten von Schema-Updates

In diesem Abschnitt finden Sie Anleitungen zum Umgang mit Schema-Updates für verschiedene Datenformate. Athena ist eine schema-on-read Abfrage-Engine. Dies bedeutet, dass beim Anlegen einer Tabelle in Athena Schemata beim Lesen der Daten angewendet werden. Dabei werden die zugrunde liegenden Daten nicht geändert oder überschrieben.

Wenn Sie Änderungen in Tabellenschemata vorweg nehmen, sollten Sie diese in einem für Ihre Bedürfnisse geeigneten Datenformat anlegen. Ihr Ziel ist es, vorhandene Athena-Abfragen bei sich weiterentwickelnden Schemata wiederzuverwenden und beim Abfragen von Tabellen mit Partitionen Fehler aufgrund von Schemakonflikten zu vermeiden.

Um diese Ziele zu erreichen, wählen Sie das Datenformat basierend auf der Tabelle im folgenden Thema.

Zusammenfassung: Updates und Datenformate in Athena

Die folgende Tabelle enthält eine Übersicht über die Datenspeicherungsformate und ihre unterstützten Schema-Manipulationen. Verwenden Sie diese Tabelle, um das Format zu wählen, mit dem Sie weiterhin Athena-Abfragen verwenden können, auch wenn sich Ihre Schemata im Lauf der Zeit ändern.

Beachten Sie, dass Parquet und ORC in dieser Tabelle Spaltenformate mit unterschiedlichen Standard-Spaltenzugriffsmethoden sind. Standardmäßig greift Parquet dem Namen nach auf Spalten zu, ORC dem Index nach (Ordnungswert). Daher stellt Athena eine SerDe Eigenschaft bereit, die beim Erstellen einer Tabelle definiert wird, um die Standardmethode für den Spaltenzugriff umzuschalten, was eine größere Flexibilität bei der Schemaentwicklung ermöglicht.

Für Parquet kann die parquet.column.index.access-Eigenschaft auf true gesetzt werden, sodass die Spaltenzugriffsmethode die Ordinalzahl für die Spalte verwendet. Wenn Sie diese Eigenschaft auf false setzen, ändert sich die Spaltenzugriffsmethode auf die Verwendung des Spaltennamens. Analog dazu verwenden Sie für ORC die orc.column.index.access -Eigenschaft, um die Spaltenzugriffsmethode festzulegen. Weitere Informationen finden Sie unter Index-Zugriff in ORC und Parquet.

Mit CSV und TSV können Sie alle Schema-Manipulationen durchführen, mit Ausnahme der Neuanordnung von Spalten oder des Hinzufügens von Spalten am Anfang der Tabelle. Wenn Ihre Schemaentwicklung z. B. nur das Umbenennen von Spalten, nicht aber deren Entfernung erfordert, können Sie Ihre Tabellen in CSV oder TSV erstellen. Wenn Sie Spalten entfernen möchten, verwenden Sie nicht CSV oder TSV, sondern eines der anderen unterstützten Formate, vorzugsweise ein Spaltenformat wie Parquet oder ORC.

Schema-Updates und Datenformate in Athena
Erwarteter Typ des Schema-Updates Übersicht CSV (mit und ohne Header) und TSV JSON AVRO PARQUET: Lesen nach Namen (Standard) PARQUET: Lesen nach Index ORC: Lesen nach Index (Standard) ORC: Lesen nach Namen
Spalten umbenennen Speichern Sie Ihre Daten in CSV und TSV oder in ORC und Parquet, wenn sie nach dem Index gelesen werden. Y N N N Y Y N
Hinzufügen von Spalten am Anfang oder in der Mitte der Tabelle Speichern Sie Ihre Daten in JSON, AVRO oder in Parquet und ORC, wenn sie nach dem Namen gelesen werden. Verwenden Sie nicht CSV und TSV. N Y Y Y N N Y
Hinzufügen von Spalten am Ende der Tabelle Speichern Sie Ihre Daten im CSV-, TSV-, JSON-, AVRO-, ORC- oder Parquet-Format. Y Y Y Y Y Y Y
Spalten entfernen Speichern Sie Ihre Daten in JSON, AVRO oder in Parquet und ORC, wenn sie nach dem Namen gelesen werden. Verwenden Sie nicht CSV und TSV. N Y Y Y N N Y
Neuanordnen von Spalten Speichern Sie Ihre Daten in AVRO, JSON oder ORC und Parquet, wenn sie nach dem Namen gelesen werden. N Y Y Y N N Y
Ändern des Datentyps einer Spalte Speichern Sie Ihre Daten in einem beliebigen Format, testen Sie Ihre Abfrage jedoch in Athena, um sicherzustellen, dass die Datentypen kompatibel sind. Für Parquet und ORC ist eine Änderung des Datentyps nur für partitionierte Tabellen möglich. Y Y Y Y Y Y Y

Index-Zugriff in ORC und Parquet

PARQUET und ORC sind spaltenbasierte Dateiformaten, die nach Index gelesen werden können, oder nach Namen. Wenn Sie Ihre Daten in einem dieser Formate speichern, können Sie alle Operationen an Schemata durchführen und Athena-Abfragen ohne Schema-Fehler ausführen.

  • Athena liest ORC standardmäßig nach dem Index, wie in SERDEPROPERTIES ( 'orc.column.index.access'='true') definiert. Weitere Informationen finden Sie unter ORC: Lesen nach Index.

  • Athena liest Parquet standardmäßig nach dem Namen, wie in SERDEPROPERTIES ( 'parquet.column.index.access'='false') definiert. Weitere Informationen finden Sie unter Parquet: Lesen nach Namen.

Da es sich um Standardwerte handelt, ist die Angabe dieser SerDe Eigenschaften in Ihren CREATE TABLE Abfragen optional, sie werden implizit verwendet. Wenn sie verwendet werden, gestatten sie Ihnen die Ausführung einiger Schema-Update-Operationen, während sie andere solcher Operationen verhindern. Um diese Operationen zu aktivieren, führen Sie eine weitere CREATE TABLE Abfrage aus und ändern Sie die SerDe Einstellungen.

Anmerkung

Die SerDe Eigenschaften werden nicht automatisch auf jede Partition übertragen. Verwenden Sie ALTER TABLE ADD PARTITION Anweisungen, um die SerDe Eigenschaften für jede Partition festzulegen. Um diesen Prozess zu automatisieren, schreiben Sie ein Skript, das ALTER TABLE ADD PARTITION-Anweisungen ausführt.

In den folgenden Abschnitten werden diese Fälle ausführlich beschrieben.

ORC: Lesen nach Index

Eine Tabelle wird in ORC standardmäßig nach dem Index gelesen. Dies wird durch die folgende Syntax definiert:

WITH SERDEPROPERTIES ( 'orc.column.index.access'='true')

Lesen nach Index erlaubt, die Spalten umzubenennen. Sie verlieren damit jedoch die Möglichkeit, Spalten zu entfernen oder in der Mitte der Tabelle hinzuzufügen.

Damit ORC nach Namen gelesen wird, was es Ihnen ermöglicht, Spalten in der Mitte der Tabelle hinzuzufügen oder Spalten in ORC zu entfernen, setzen Sie die SerDe Eigenschaft false in der orc.column.index.access CREATE TABLE Anweisung auf. In dieser Konfiguration verlieren Sie die Möglichkeit, Spalten umzubenennen.

Anmerkung

Wenn in Athena-Engine-Version 2 ORC-Tabellen so eingestellt sind, dass sie nach Namen lesen, erfordert Athena, dass alle Spaltennamen in den ORC-Dateien in Kleinbuchstaben sind. Da Apache Spark beim Generieren von ORC-Dateien keine Feldnamen in Kleinbuchstaben enthält, kann Athena die so generierten Daten möglicherweise nicht lesen. Die Abhilfe besteht darin, die Spalten in Kleinbuchstaben umzubenennen oder Athena-Engine-Version 3 zu verwenden.

Das folgende Beispiel zeigt, wie Sie die ORC abändern, um nach Namen zu lesen:

CREATE EXTERNAL TABLE orders_orc_read_by_name ( `o_comment` string, `o_orderkey` int, `o_custkey` int, `o_orderpriority` string, `o_orderstatus` string, `o_clerk` string, `o_shippriority` int, `o_orderdate` string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' WITH SERDEPROPERTIES ( 'orc.column.index.access'='false') STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' LOCATION 's3://DOC-EXAMPLE-BUCKET/orders_orc/';

Parquet: Lesen nach Namen

Eine Tabelle wird in Parquet standardmäßig nach dem Namen gelesen. Dies wird durch die folgende Syntax definiert:

WITH SERDEPROPERTIES ( 'parquet.column.index.access'='false')

Lesen nach Namen ermöglicht Ihnen das Hinzufügen von Spalten in der Mitte der Tabelle und das Entfernen von Spalten. Aber dann verlieren Sie die Möglichkeit, Spalten umzubenennen.

Um Parquet nach Index lesen zu lassen, sodass Sie Spalten umbenennen können, müssen Sie eine Tabelle mit der parquet.column.index.access SerDe Eigenschaft auf erstellen. true