0

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

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

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

提前致谢

4

2 回答 2

1

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

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

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

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

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

于 2016-10-17T07:14:37.690 回答
0

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

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

  1. ODI Utility ODIFileWait,将帮助您等待带有或不带有特定模式的文件到达给定文件夹。一旦 ODI 找到或注意到该文件,它将进入下一步。

  2. 使用 OSCommand ls>>filenames.txt,在一个单独的文件中获取所有文件名。现在创建一个 DB 表,其中可以使用针对每条记录的唯一序列号填充具有加载状态的文件名。阅读此 filenames.txt 并使用每个文件名的负载状态填充 DB 表。

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

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

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

于 2017-01-04T08:45:49.933 回答