在 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 实例之前执行一些转换。
我有一份 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 实例之前执行一些转换。