将数据从 s3 导入 Redshift 时保留源文件名

Posted

技术标签:

【中文标题】将数据从 s3 导入 Redshift 时保留源文件名【英文标题】:Retaining source file name while importing data from s3 to Redshift 【发布时间】:2017-01-27 08:33:16 【问题描述】:

我在 s3 存储桶中有大量文件,通常将其导入 Redshift。由于文件数量很大,我需要 Redshift 表中的一列,该列应包含来自 s3 位置的源文件名。

有什么方法可以解决问题吗?

【问题讨论】:

【参考方案1】:

同意 Ketan 的观点,目前这在 Redshift 中是不可能的。如果这是您想要实现的目标,则可以通过任一方式实现

    以编程方式读取 S3 文件并以文件名作为列写入新的 S3 文件并加载新文件 或者,使用 Hive。在 S3 文件存储桶位置创建外部表并使用 INPUT__FILE__NAME 获取文件名,创建一个新表,然后写回 S3。您还可以在 Hive 中进行一些预处理。

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+VirtualColumns

希望这会有所帮助。

【讨论】:

谢谢!!对于您的回复,实际发生的是预处理 s3 文件并使用新数据列再次存储(使用任何编程语言和 AWS SDK)显着增加了我实际上想要避免的时间价值。【参考方案2】:

这是不可能的。在Copy 操作期间,Redshift 仅将文件内容加载到表中;它不提供对 S3 文件名的访问。

要实现您想要的,您需要预处理数据以在文件中添加其他信息

【讨论】:

谢谢!!对于您的回复,实际发生的是预处理 s3 文件并使用新数据列再次存储(使用任何编程语言和 AWS SDK)显着增加了我实际上想要避免的时间价值。

以上是关于将数据从 s3 导入 Redshift 时保留源文件名的主要内容,如果未能解决你的问题,请参考以下文章

将带逗号的双引号作为分隔符从 S3 导入 Amazon Redshift

将数据从 s3 复制到 redshift 时忽略所有无效记录

将 Alexa 数据导入 Amazon RedShift

S3->Redshift 和 S3->EMR->Redshift 之间有啥不同/好处?

在将数据从 S3 复制到 redshift 时,我遇到了以下错误:

从多个进程访问 Amazon S3 文件