Redshift 从 S3 复制最新的 csv 文件

Posted

技术标签:

【中文标题】Redshift 从 S3 复制最新的 csv 文件【英文标题】:Redshift copy latest csv file from S3 【发布时间】:2016-10-31 05:50:37 【问题描述】:

我有一个 S3 存储桶存储每日日志文件,名为“Log_YYYY_MM_DD”。 另外,我在 Redshift 中有一张表,只存储最新日志的数据。 例如:

在 S3 中,我有“Log_Date0.csv”、“Log_Date1.csv”、“Log_Date2.csv” 并且redshift表应该只包含“Log_Date2.csv”中的数据

如何设置每日数据管道,以便 redshift 自动复制包含的最新日志并重写表?

谢谢

【问题讨论】:

【参考方案1】:

Amazon Redshift 无法“自动复制”文件。它只会在发出 SQL COPY 命令时加载文件。

因此,您可以为TRUNCATE 表和COPY Amazon S3 中的数据创建必要的命令。

您可以编写一个 cron 作业,使用 psql v8.0.2(匹配 Redshift)来运行 SQL 命令。或者,您可以使用可以为您加载数据的第三方 ETL 产品。

要在将新文件添加到 Amazon S3 存储桶时触发信息自动加载到 Amazon Redshift,您可以:

创建一个 AWS Lambda 函数,通过 psql/JDBC 连接将 COPY 命令发送到 Redshift 配置S3存储桶在ObjectCreated时触发Lambda函数

见:A Zero-Administration Amazon Redshift Database Loader

【讨论】:

嗨,约翰,感谢您的评论。我的问题是,如何让 Redshift 从 S3 存储桶中的最新文件中“复制数据”。 或者,我的意思是每当有新文件添加到 S3 存储桶中时,如何触发将内容添加到 redshift 中。 谢谢约翰,我设法使用清单文件让它工作。 @DarrenWu 我也面临同样的问题。您的清单文件看起来如何?它是否允许正则表达式模式匹配?从文档中的示例中,您必须提供 s3 对象的确切路径 嗨艾伦,我最终得到了一个连接到 S3 并获取最新文件名的 python 代码,然后将文件名保存到清单文件并重新上传到 S3。要将内容复制到表中,请仅使用清单文件。不是一个干净的方法,但解决问题

以上是关于Redshift 从 S3 复制最新的 csv 文件的主要内容,如果未能解决你的问题,请参考以下文章

从充满 CSV 文件的 AWS S3 目录中复制 Redshift

将 csv 和 json 数据从 S3 复制到 Redshift

使用 for 循环从 s3 复制 Redshift

将文件(带有特定后缀)从 S3 复制到 Redshift

如何使用从 s3 到 redshift db 的复制命令解决语法错误

来自 S3 的 Redshift 复制命令有效,但没有上传数据