重命名列
有时,您可能需要重命名表列,以便纠正拼写、让列名称含义更清晰或重用现有列以避免列重新排序。
如果将数据存储为 CSV 和 TSV,或 Parquet 和 ORC(配置为按索引读取),则可以将列重新命名。有关信息,请参阅了解 Apache ORC 和 Apache Parquet 的索引访问权限。
Athena 会按照架构中的列顺序读取 CSV 和 TSV 数据并以同样的顺序返回。它不会使用列名称来将数据映射到列,因此,如果不中断 Athena 查询,您就可以重命名 CSV 或 TSV 格式列。
重命名列的一种策略是基于相同的基础数据创建新表,但使用新的列名。以下示例会创建一个名为 orders_parquet_column_renamed
新 orders_parquet
表。该示例将列 `o_totalprice`
名称更改为 `o_total_price`
,然后在 Athena 中运行查询:
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/';
对于 Parquet 表而言,以下查询可以运行,但经过重命名的列不会显示数据,因为列是按名称访问的(Parquet 的默认设置)而不是按索引访问的:
SELECT * FROM orders_parquet_column_renamed;
对于 CSV 表的查询看起来类似:
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/';
对于 CSV 表而言,以下查询可以运行,并将显示所有列的数据,包括经过重新命名的列:
SELECT * FROM orders_csv_column_renamed;