微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更新AWS Athena数据/表 怎么做最后的笔记:

如何解决更新AWS Athena数据/表 怎么做最后的笔记:

今天,我发现自己遇到了一个简单的问题,将雅典娜胶水表的列从重命名名称

首先,我在这里搜索并尝试了诸如thisthis之类的一些解决方案。不幸的是,没有一个有效,所以我决定使用我的知识和想象力。

我发布此问题的目的是分享,但也希望了解其他人的工作方式,也许我发现自己发明了轮子。因此,如果您知道该怎么做,也请分享一下自己的方式。

我的设置是,按天划分的Athena JSON表中包含有价值的大量数据,基础架构是通过Cloudformation定义和更新的。

如何重命名Athena列并仍然保留数据?

解决方法

在没有所有clodformation基础结构的情况下进行解释。

想象一个包含以下内容的表

  • userId
  • 得分
  • otherColumns
  • eventDateUtc
  • dt_utc

由dt_utc分区并使用JSON格式存储。 Wee需要将列分数更改为deltaScore。

请记住,尽管我还没有使用其他格式/配置进行过测试,但这应该适用于athena支持的任何配置,因为我们将使用athena算法为我们完成工作。

怎么做

如果您首先运行cloudformation迁移,则将“失去”对已删除列的访问权限。
但是您只需将列重命名为后,数据就会出现。

这些是重命名AWS Athena表所需的步骤:

  1. 创建一个将旧列名映射到新列的临时表:
    这可以通过使用 CREATE TABLE AS (创建表AS),read more in the aws docs
    来完成。 使用此命令,我们使用Athena引擎为我们在原始表的文件上应用转换,并保存在 s3:// bucket_name / A_folder / temp_table_rename /
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"
  1. 通过更改或按照您的方式运行cloudformation来应用数据库重命名。
    这时,您甚至可以删除original_table,然后使用正确的列名再次创建。
    重命名后,您会注意到重命名的列中没有数据。

  2. 通过删除原始表的s3源来删除其数据。

  3. 将数据从临时表源复制到原始表源
    我更喜欢使用aws命令,因为可以复制成千上万个文件

aws s3 cp s3://bucket_name/A_folder/temp_table_rename/ s3://bucket_name/A_folder/original_table/ --recursive

  1. 还原原始表的索引 MSCK REPAIR TABLE "my_database"."original_table"

完成。

最后的笔记:

使用CREATE TABLE AS来完成转换工作,不仅可以重命名该列,还可以执行更多操作,例如fox示例将一列的数据拆分为2个新列,或者将其合并为一个列。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。