在没有 AWS Pipeline 的情况下,将数据(csv 文件)从 s3 自动传输到 Redshift 的最佳方式是啥?

Posted

技术标签:

【中文标题】在没有 AWS Pipeline 的情况下,将数据(csv 文件)从 s3 自动传输到 Redshift 的最佳方式是啥?【英文标题】:What is the most optimal way to automate data (csv file) transfer from s3 to Redshift without AWS Pipeline?在没有 AWS Pipeline 的情况下,将数据(csv 文件)从 s3 自动传输到 Redshift 的最佳方式是什么? 【发布时间】:2019-07-03 19:27:13 【问题描述】:

我正在尝试获取存储在 s3 存储桶中的 csv 文件中的 sql 数据,并将数据传输到 AWS Redshift 并使该过程自动化。使用 lambda/glue 编写 etl 脚本是否是解决此问题的最佳方法,如果是,我如何让脚本/传输定期运行?如果不是,那么将数据从 s3 传输到 Redshift 的最佳方式是什么。

尝试使用 AWS Pipeline,但在我所在的地区不可用。我也尝试使用 Lambda 和 Glue 的 AWS 文档,但不知道在哪里可以找到问题的确切解决方案

【问题讨论】:

你能以某种方式安排复制命令吗?这是最简单的方法。 【参考方案1】:

所有系统(包括 AWS Data Pipeline)都使用 Amazon Redshift COPY 命令从 Amazon S3 加载数据

因此,您可以编写一个 AWS Lambda 函数,连接到 Redshift 并发出 COPY 命令。您需要包含一个兼容的库(例如 psycopg2)才能调用 Redshift。

您可以使用 Amazon CloudWatch Events 定期调用 Lambda 函数。或者,您可以花哨并配置 Amazon S3 事件,以便在将文件放入 S3 存储桶时,它会自动触发 Lambda 函数。

如果不想自己写,可以在网上搜索已有代码,包括:

非常简单的基于 Python 的christianhxc/aws-lambda-redshift-copy: AWS Lambda function that runs the copy command into Redshift 功能更全面的基于节点的A Zero-Administration Amazon Redshift Database Loader | AWS Big Data Blog

【讨论】:

添加到上面的答案中,您可以查看 kenisis firehose 流。我在这里发布了一个教程medium.com/@siprem/… 我认为使用 aws lambda 与 DIY 调度和脚本的缺点是当前设置为 15 分钟的 lambda 超时。如果您有大量数据或由于某种原因副本运行缓慢,它可能会中止(或可能继续) 非常真实!您可以使用 Lambda 启动一个实例,然后使用该实例的用户数据来运行您的脚本。只需选择 1c/hr 的 t2.micro。它不会超时!

以上是关于在没有 AWS Pipeline 的情况下,将数据(csv 文件)从 s3 自动传输到 Redshift 的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Data Pipeline 在 AWS 中进行批处理文件

什么是 AWS Data Pipeline

您如何将 DynamoDB Map/List 类型转换为通过 AWS Pipeline 到 Redshift?

AWS Data Pipeline 无法验证 S3 访问 [权限警告]

AWS Data Pipeline 的默认日期时间

AWS Data Pipeline RedshiftCopy 活动 没有合适的驱动程序