如何在 Talend 中使用不断变化的模式来处理文件输入

How to handle file inputs with changing schemas in Talend

问题:如何继续处理与基本模式有很大不同并触发 tSchemaComplianceCheck 错误的文件?

背景

假设我有一个名为 file1,file2,....file1000 的包含客户 xls 文件的文件夹。假设我已将文件架构导入 Talend 存储库并将其命名为 6Columns 并且我将 talend 作业配置为遍历每个文件并处理它们

1-tFileInput ->2-tSchemaCompliance-6Columns -> 3-tMap ->4-FurtherProcessing
  1. 读取每个 excel 文件
  2. 将其与架构进行比较 6Columns
  3. 格式化输出(重命名列)
  4. 收集客户数据并对其进行更多处理

在处理过程中,我注意到架构合规性正在生成错误 (errorCode 16),它指向许多具有不同架构 13Columns 的文件 (200),但没有办法预先识别文件以过滤然后进入子作业

我如何修改我的处理以正确地将文件与 13Columns 架构集成到流程中(推荐的处理方式是什么)和设计以防发生其他架构更改

1-tFileInput ->2-tSchemaCompliance-6Columns -> 3-tMap ->4-FurtherProcessing
                   |
                   |Reject Flow (ErrorCode 16)

                   |Schema-13Columns 
                   |
                   |-> ??

检测到 ErrorCode 16 时的当前想法

选项 1 并行。获取当前文件的文件路径,并在将 2 个流合并回 1 个

之前,使用新的 FileInput 针对 13Columns 对其进行处理

选项 2 序列号。收集触发错误的文件列表并在我完成合规性文件后处理它们?

您可以尝试以下操作:

tFileList - 读取您的输入存储库 tFileInput "schema6" - tSchemaComplianceCheck : 将文件读取为 6 列架构 tMap_1 : 进一步处理

拒绝部分:

tMap after reject link : 添加一个包含已被拒绝的文件路径的新列

tFlowToIterate :用于获取迭代 link,随后的 tFileInputDelimited 的可接受输入。 tFileInput :将数据读取为 13 列架构。以下组件与第 1 部分相同。

之后,您可以将数据推送到 tHashOutput,以便在另一个子作业中进一步读取它们。