Spalten umbenennen
Möglicherweise möchten Sie in Ihren Tabellen Spalten umbenennen, um die Schreibweise zu korrigieren, Spalten mit besser verständlichen Namen zu versehen oder eine vorhandene Spalte erneut nutzen, um eine Änderung der Reihenfolge für die Spalten zu vermeiden.
Sie können Spalten umbenennen, wenn Sie Ihre Daten in CSV und TSV speichern, oder in Parquet und ORC, wenn diese so konfiguriert sind, dass sie dem Index nach lesen. Weitere Informationen finden Sie unter Indexzugriff für Apache ORC und Apache Parquet verstehen.
Athena liest Daten in CSV und TSV in der Reihenfolge der Spalten in das Schema und gibt sie in der gleichen Reihenfolge aus. Hierbei werden keine Spaltennamen für das Mapping von Daten in einer Spalte verwendet. Aus diesem Grund können Sie keine Spalten in CSV oder TSV umbenennen, ohne Athena-Abfragen zu beschädigen.
Eine Strategie zum Umbenennen von Spalten besteht darin, eine neue Tabelle zu erstellen, die auf denselben zugrunde liegenden Daten basiert, jedoch unter Verwendung neuer Spaltennamen. Im folgenden Beispiel wird eine neue orders_parquet-Tabelle orders_parquet_column_renamederstellt. Im Beispiel wird der Spaltenname `o_totalprice` zu `o_total_price` und führt dann eine Abfrage in Athena aus:
CREATE EXTERNAL TABLE orders_parquet_column_renamed ( `o_orderkey` int, `o_custkey` int, `o_orderstatus` string, `o_total_price` double, `o_orderdate` string, `o_orderpriority` string, `o_clerk` string, `o_shippriority` int, `o_comment` string ) STORED AS PARQUET LOCATION 's3://amzn-s3-demo-bucket/orders_parquet/';
Im Fall der Parquet-Tabelle wird die folgende Abfrage erfolgreich ausgeführt, aber die umbenannte Spalte zeigt keine Daten an, da auf die Spalte nicht über den Index, sondern über den Namen zugegriffen wurde (ein Standard in Parquet):
SELECT * FROM orders_parquet_column_renamed;
Eine Abfrage mit einer Tabelle in CSV sieht ähnlich aus:
CREATE EXTERNAL TABLE orders_csv_column_renamed ( `o_orderkey` int, `o_custkey` int, `o_orderstatus` string, `o_total_price` double, `o_orderdate` string, `o_orderpriority` string, `o_clerk` string, `o_shippriority` int, `o_comment` string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://amzn-s3-demo-bucket/orders_csv/';
Bei der CSV-Tabelle wird die folgende Abfrage ausgeführt und für alle Spalten erscheinen Daten, auch für die umbenannte Spalte:
SELECT * FROM orders_csv_column_renamed;