Schemaaktualisierungen handhaben - 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.

Schemaaktualisierungen handhaben

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.

Unterstützte Schemaaktualisierungsvorgänge nach Datenformat

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 in dieser Tabelle, dass es sich bei Parquet und um spaltenorientierte Formate mit unterschiedlichen Standardzugriffsmethoden für Spalten ORC handelt. Standardmäßig greift Parquet auf Spalten nach Namen und ORC Index (Ordinalwert) zu. 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. Ähnliches gilt für die ORC Verwendung der orc.column.index.access Eigenschaft zur Steuerung der Spaltenzugriffsmethode. Weitere Informationen finden Sie unter Verstehen Sie den Indexzugriff für Apache ORC und Apache Parquet.

CSVund TSV ermöglichen es Ihnen, alle Schema-Manipulationen durchzuführen, mit Ausnahme der Neuanordnung von Spalten oder des Hinzufügens von Spalten am Anfang der Tabelle. Wenn Ihre Schemaentwicklung beispielsweise nur das Umbenennen, aber nicht das Entfernen von Spalten erfordert, können Sie wählen, ob Sie Ihre Tabellen in oder erstellen möchten. CSV TSV Wenn Sie Spalten entfernen müssen, verwenden Sie nicht CSV oder TSV und verwenden Sie stattdessen eines der anderen unterstützten Formate, vorzugsweise ein spaltenförmiges Format wie Parquet oder. ORC

Schema-Updates und Datenformate in Athena
Erwarteter Typ des Schema-Updates Übersicht CSV(mit und ohne Überschriften) und TSV JSON AVRO PARQUET: Nach Namen lesen (Standard) PARQUET: Nach Index gelesen ORC: Nach Index gelesen (Standard) ORC: Nach Namen gelesen
Spalten umbenennen Speichern Sie Ihre Daten in CSV und oder in ORC und ParquetTSV, wenn sie per 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 JSONAVRO, oder in Parquet und ORC ob sie gelesen werden, nach Namen. Verwenden Sie nicht CSV undTSV. N Y Y Y N N Y
Hinzufügen von Spalten am Ende der Tabelle Speichern Sie Ihre Daten in CSV oderTSV,JSON, AVROORC, oder Parquet. Y Y Y Y Y Y Y
Spalten entfernen Speichern Sie Ihre Daten inJSON,AVRO, oder Parquet undORC, falls sie gelesen werden, namentlich. Verwenden Sie nicht CSV undTSV. N Y Y Y N N Y
Neuanordnen von Spalten Speichern Sie Ihre Daten inAVRO, JSON oder ORC und Parquet, wenn sie namentlich 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. Bei Parquet und ORC funktioniert das Ändern eines Datentyps nur für partitionierte Tabellen. Y Y Y Y Y Y Y

Verstehen Sie den Indexzugriff für Apache ORC und Apache Parquet

PARQUETund ORC sind spaltenförmige Datenspeicherformate, die nach Index oder Namen gelesen werden können. 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 Index, wie unter definiert. SERDEPROPERTIES ( 'orc.column.index.access'='true') Weitere Informationen finden Sie unter ORC: Nach Index gelesen.

  • 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: Nach Index gelesen

Eine Tabelle in ORCwird standardmäßig per 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.

Um den Namen ORC gelesen zu haben, sodass Sie Spalten in der Mitte der Tabelle hinzufügen oder Spalten entfernen könnenORC, setzen Sie die SerDe Eigenschaft false in der CREATE TABLE Anweisung orc.column.index.access 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 gelesen werden, verlangt Athena, dass alle Spaltennamen in den ORC Dateien in Kleinbuchstaben geschrieben sind. Da Apache Spark beim Generieren von ORC Dateien keine Feldnamen in Kleinbuchstaben schreibt, 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 man das so ändertORC, dass es nach Namen gelesen wird:

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://amzn-s3-demo-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.

Damit Parquet nach Index gelesen wird, sodass Sie Spalten umbenennen können, müssen Sie eine Tabelle erstellen, deren parquet.column.index.access SerDe Eigenschaft auf gesetzt isttrue.