如何为 Oracle Data Integrator (ODI) 中的每个传入文件调用映射

How to call a Mapping for each incoming file in Oracle Data Integrator (ODI)

我正在使用 Oracle Data Integrator 12c,我有许多 txt 文件,有人将这些文件复制到文件夹“/import”中。 ODI 应该注意到这一点并为每个文件调用一个映射。然后每个文件应该保存在另一个文件夹“/export”

我的映射对于一个文件来说工作得很好。我在模型部分指定了这个文件。但是我怎样才能动态加载每个文件并让映射也适用于每个文件然后保存呢?

我希望清楚我想要什么:)

提前致谢

我已经完成了与您的需要类似的过程。这不是一个确切的需要,但步骤可能会帮助你。我的解决方案有点棘手,因为第三方通过 FTP 将文件发送到目录中,并且对文件数量或文件名标准没有限制。

由于工作是在以前的客户中进行的,所以我无法为您提供完整的步骤代码和屏幕截图,但我可以告诉您大纲。您将需要一个 ODI 包

  1. 在 OSCommand 组件中我给出了 ls >> filelist.txt
  2. 我有一个接口将文件 filelist.txt 读取到 table 中,每行都有一个序列号。
  3. 我有一个 ODI 变量 #MAX_ROW_NUM,它从上面的 table 读取最大文件数。
  4. #MAX_ROW_NUM > 0
  5. 计算变量
  6. 从 table 的 ROW_NUM = #MAX_ROW_NUM
  7. 中获取文件名到 #FILE_NAME 变量
  8. 使用#FILE_NAME执行接口(源数据存储在模型中必须是动态的)
  9. 使用 OSCommand 组件将 #FILE_NAME 的文件移动到 /completed 目录。
  10. 使用 ODI 程序从文件列表 table
  11. 中删除带有 #MAX_ROW_NUMBER 的行
  12. #MAX_ROW_NUMBER 的值增加 -1
  13. 转到 4

可选步骤,您可以从第 4 步 KO 到另一个删除 filelist.txt

的 OSCommand

我希望,我能把我的过程解释清楚,如果需要进一步的帮助,请不要犹豫。

根据您的要求,您需要轮询到有人放置文件的导入文件夹。您可以根据需要选择轮询时间,以秒为单位。

您需要使用以下流程创建一个包:

  1. ODI 实用程序 ODIFileWait,将帮助您等待文件或 没有特定模式的文件到达给定文件夹。一旦对外直接投资 找到或注意到该文件,它将转到下一步。

  2. 使用操作系统命令 ls>>filenames.txt,获取一个文件中的所有文件名 单独的文件。现在创建一个 DB table,其中文件名与 加载状态可以用唯一的序列号填充 针对每条记录。阅读此 filenames.txt 并填充数据库 table 每个文件名的加载状态。

  3. 创建一个变量来计算和存储文件总数 基于来自的加载状态(是否等待处理) DB table 并在继续之前检查它是否大于零。
  4. 在另一个变量中,取序列号的最小值 相同的数据库 table 并根据序列号检索 来自相同 table.

  5. 的文件名
  6. 现在处理您的映射或界面,但确保在创建 源数据存储(文件),提供一个变量名(用于 在资源名称字段中检索上一步中的文件名。

  7. 转到第 3 步,直到未处理文件的计数为 0。