【问题标题】:Update Athena Table using AWS Data Wrangler使用 AWS Data Wrangler 更新 Athena 表
【发布时间】:2023-01-13 10:24:17
【问题描述】:

我开始分别使用AWS Data WranglerAthena 将我的数据文件上传到 S3,并能够查询它们。我的问题是关于“安全地”更新表中数据的过程。

这是我所做的:

  1. 我使用了 AWS Data Wrangler,

    wr.s3.to_parquet(
    df=my_df,
    path='s3://temp',
    dataset=True,
    partition_cols = ['date'],
    concurrent_partitioning = True,
    mode = append
    )
    

    将我的 DataFrame 导出到 S3 - 作为 parquet 文件。

  2. 我使用 AWS Glue 在 S3 中爬取我的数据文件,并创建了Table A

  3. 通过 Athena,我可以在Table A 中查询我的数据。

    现在我想更新我在表A中的数据。我的问题是:

    1. (插入新行): 如果我按照上面的操作,将模式更改为“覆盖”,那么我在 S3 中的所有数据都将被删除(预期,不可取!),新数据文件将写入 S3。因此,Glue 目录爬网会在表 A 中生成新数据行,同时删除我在Table A 中的所有过去数据。 这不是我的愿望。有安全的方法吗?
    2. (更新行): 如果我想怎么办更新Table A 中的数据。使用 AWS 牧马人,我怎样才能做到这一点,而不添加多余的Table A 中的行?

      我已经使用 mode=append 测试了 (2),实际上我最终在我的 Table A 中得到了多余的行。

      如果您愿意分享您的想法,我将不胜感激

      谢谢,

【问题讨论】:

    标签: amazon-web-services amazon-athena athena aws-data-wrangler


    【解决方案1】:

    我想你需要使用mode="overwrite_partitions"

    【讨论】:

    • 您的答案可以通过其他支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写出好的答案的信息in the help center
    【解决方案2】:

    您可以使用以下 api:

    awswrangler.s3.merge_upsert_table¶

    参考:https://aws-sdk-pandas.readthedocs.io/en/stable/stubs/awswrangler.s3.merge_upsert_table.html

    【讨论】:

      猜你喜欢
      • 2021-03-09
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 2022-10-14
      • 2019-07-21
      • 2022-11-03
      • 2021-06-12
      相关资源
      最近更新 更多