首页 文章

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

提问于
浏览
0

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

我的映射适用于一个文件 . 我在模型部分指定了这个文件 . 但是,如何动态加载每个文件并使映射也适用于每个文件然后保存?

我希望很清楚我想要的:)

提前致谢

2 回答

  • 1

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

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

    • 在OSCommand组件中我给了 ls >> filelist.txt

    • 我有一个接口读取文件 filelist.txt 到一个表中,每行有一个序列号 .

    • 我有一个ODI变量 #MAX_ROW_NUM ,它从上表中读取最大文件号 .

    • #MAX_ROW_NUM > 0 评估变量

    • ROW_NUM = #MAX_ROW_NUM 表中获取 #FILE_NAME 变量的文件名

    • 使用 #FILE_NAME 执行接口(源数据存储在模型中必须是动态的)

    • 使用带有 #FILE_NAME 的OSCommand组件移动文件到 /completed 目录 .

    • 使用和ODI过程从文件列表表中删除 #MAX_ROW_NUMBER

    • #MAX_ROW_NUMBER 的增量值 -1

    • 转到4

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

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

  • 0

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

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

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

    • 使用OSCommand ls >> filenames.txt,在单独的文件中获取所有文件名 . 现在创建一个数据库表,其中带有加载状态的文件名可以填充每个记录的唯一序列号 . 读取此filenames.txt并使用每个文件名的加载状态填充DB表 .

    • 创建一个变量,该变量根据负载状态(待处理或不处理)从DB表中计算和存储文件总数,并在继续之前检查它是否大于零 .

    • 在另一个变量中,从同一个DB表中取最小值序列号,并根据序列号从同一个表中检索文件名 .

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

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

相关问题