将数据从 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 时忽略所有无效记录
S3->Redshift 和 S3->EMR->Redshift 之间有啥不同/好处?