在 Amazon S3 上使用 TfileUnarchive

Use TfileUnarchive on Amazon S3

我有一份 talend 的工作,很简单,如下所示: ts3Connection -> ts3Get -> tfileinputDelimeted -> tmap -> tamazonmysqloutput.

现在的情况是,有时我以 .txt 格式获取文件,有时以 zip 文件格式获取。 所以我想使用 tFileUnarchive 来解压缩文件(如果它是 zip 文件)或者如果文件是解压缩格式(即只有 .txt 格式)则绕过 tFileUnarchive 组件处理它。

非常感谢对此的任何帮助。

这里的技巧是将文件检索和潜在的解压缩分解为一个子作业,然后将文件处理分解为另一个子作业。

这是一个简单的示例作业:

像往常一样,您连接到 S3,然后您可以使用 tS3List 列出存储桶中的所有相关对象,然后将其传递给 tS3Get。或者,您可能有另一种方法将要下载的相关对象密钥传递给 tS3Get。

在上面的作业中,我将 tS3Get up 设置为获取由 tS3List 组件迭代的每个对象,方法是将键设置为:

((String)globalMap.get("tS3List_1_CURRENT_KEY"))

然后下载到:

"C:/Talend/5.6.1/studio/workspace/S3_downloads/" + ((String)globalMap.get("tS3List_1_CURRENT_KEY"))

我添加的额外位以来自 tS3Get 的 Run If 条件 link 开始,其中 link 是 tFileUnarchive 的条件:

((String)globalMap.get("tS3List_1_CURRENT_KEY")).endsWith(".zip")

检查从 S3 下载的文件是否是 .zip 文件。

然后只需要告诉 tFileUnarchive 组件解压什么,这将是我们刚刚下载的文件:

"C:/Talend/5.6.1/studio/workspace/S3_downloads/" + ((String)globalMap.get("tS3List_1_CURRENT_KEY"))

以及将其提取到的位置:

"C:/Talend/5.6.1/studio/workspace/S3_downloads"

这会将所有提取的文件与不需要提取的文件放在同一位置。

从这里我们现在可以通过将目录设置为 "C:/Talend/5.6.1/studio/workspace/S3_downloads" 并将全局表达式设置为 "*.csv" 来遍历下载文件夹以查找我们想要的文件类型,因为我想阅读仅包含我在 S3 中的 CSV 文件(包括压缩文件)。

最后,我们通过将 tFileInputDelimited 组件要读取的文件设置为来读取分隔文件:

((String)globalMap.get("tFileList_1_CURRENT_FILEPATH"))

在我的例子中,我只是将其打印到控制台,但显然您需要在上传到您的 AWS RDS 实例之前执行一些转换。