不使用云形成基础设施进行解释。
想象一个包含以下内容的表:
按 dt_utc 分区并使用 JSON 格式存储。我们需要将列 score 更改为 deltaScore。
请注意,尽管我没有与其他格式/配置进行过测试,但此操作适用于 Athena 支持的任何配置,因为我们将使用 Athena 算法来完成工作。
如果您首先运行云迁移,则会“丢失”对已删除列的访问权限。
但是,您可以简单地将列重命名回来,数据就会出现。
以下是重命名 AWS Athena 表所需的步骤:
CREATE TABLE "temp_table_rename"
WITH(
format = 'JSON',
external_location = 's3://bucket_name/A_folder/temp_table_rename/',
partitioned_by = ARRAY['dt_utc']
)
AS
SELECT DISTINCT
userid,
score as deltascore,
otherColumns,
eventDateUtc,
"dt_utc"
FROM "my_database"."original_table"
运行具有更改的CloudFormation模板来应用数据库重命名,或采用其他方式。
此时,您甚至可以删除原始表,然后使用正确的列名称再次创建它。
重命名后,您会注意到重命名后的列中没有数据。
通过删除其S3源来删除原始表的数据。
从临时表源复制数据到原始表源
我倾向于使用AWS命令,因为可能需要复制数千个文件
aws s3 cp s3://bucket_name/A_folder/temp_table_rename/ s3://bucket_name/A_folder/original_table/ --recursive
MSCK REPAIR TABLE "my_database"."original_table"
完成。
使用CREATE TABLE AS
来执行转换工作,让你可以做更多事情,而不仅仅是重命名列,例如将一列的数据拆分成两个新列,或合并为一个单独的列。