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