【问题标题】:What is the best way to copy large csv files from s3 to redshift?将大型 csv 文件从 s3 复制到 redshift 的最佳方法是什么?
【发布时间】:2020-03-13 19:03:04
【问题描述】:

我正在处理将 csv 文件从 s3 存储桶复制到 redshift 的任务。我找到了多种方法来做到这一点,但我不确定哪一种是最好的方法。这是场景:

会定期将多个大小约为 500 MB - 1 GB 的 CSV 文件添加到我的 s3 存储桶中。数据可以包含重复项。任务是将数据复制到 redshift 表中,同时确保 redshift 中不存在重复数据。

以下是我找到的可以使用的方法:

  1. 创建一个 AWS Lambda 函数,只要将文件添加到 s3 存储桶,就会触发该函数。

  2. 使用 AWS Kinesis

  3. 使用 AWS Glue

我了解 Lambda 不应用于耗时超过 5 分钟的作业。那么我应该使用它还是直接取消这个选项?

Kinesis 可以处理大量数据,但它是最好的方法吗?

我不熟悉 Glue 和 Kinesis。但我读到 Glue 可能会很慢。

如果有人能指出我正确的方向,那将非常有帮助。

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-lambda aws-glue amazon-kinesis


    【解决方案1】:

    如果您利用 StepFunctions 和 S3 Select 选项将数据子集过滤成更小的块,那么您绝对可以使其与 Lambda 一起使用。您将让 Step Functions 管理您的 ETL 编排,在其中执行您的 lambda,这些 lambda 通过 S3 选择选项有选择地从大数据文件中提取。您的预处理状态(参见下面的链接)可用于确定执行要求,然后执行多个 Lambda,如果您愿意,甚至可以并行执行。这些 lambda 将处理数据子集以删除重复数据并执行您可能需要的任何其他 ETL 操作。然后,您将处理过的数据写入 Redshift。以下链接可帮助您整合该架构:

    Trigger State Machine Execution from S3 Event

    Manage Lambda Processing Executions and workflow state

    Use S3 Select to pull subsets from large data objects

    另外,这是我构建的 CDK 的 Python ETL 管道示例的link。您将看到 S3 事件驱动的 lambda 示例以及数据处理和 DDB 或 MySQL 写入。将让您了解如何为 ETL 操作构建全面的 Lambda。您只需要在 Redshift 部署中添加一个 psycopg2 层。希望这可以帮助。

    【讨论】:

      猜你喜欢
      • 2017-06-29
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 2017-04-15
      相关资源
      最近更新 更多