我正在使用Oracle Data Integrator 12c,我有许多txt文件,有人复制到文件夹“/ import” . ODI应注意这一点,并为每个文件调用Mapping . 然后每个文件应保存在另一个文件夹“/ export”中
我的映射适用于一个文件 . 我在模型部分指定了这个文件 . 但是,如何动态加载每个文件并使映射也适用于每个文件然后保存?
我希望很清楚我想要的:)
提前致谢
我已根据您的需要完成了类似的流程 . 这不是一个确切的需要,但步骤可能会帮助你 . 我的解决方案有点棘手,因为第三方通过FTP将文件发送到目录,并且文件数量或文件名标准没有限制 .
由于这份工作是在以前的客户,我无法为您提供整个步骤代码和截图,但我可以告诉大纲 . 您将需要一个ODI包
在OSCommand组件中我给了 ls >> filelist.txt
ls >> filelist.txt
我有一个接口读取文件 filelist.txt 到一个表中,每行有一个序列号 .
filelist.txt
我有一个ODI变量 #MAX_ROW_NUM ,它从上表中读取最大文件号 .
#MAX_ROW_NUM
为 #MAX_ROW_NUM > 0 评估变量
#MAX_ROW_NUM > 0
从 ROW_NUM = #MAX_ROW_NUM 表中获取 #FILE_NAME 变量的文件名
ROW_NUM = #MAX_ROW_NUM
#FILE_NAME
使用 #FILE_NAME 执行接口(源数据存储在模型中必须是动态的)
使用带有 #FILE_NAME 的OSCommand组件移动文件到 /completed 目录 .
/completed
使用和ODI过程从文件列表表中删除 #MAX_ROW_NUMBER 行
#MAX_ROW_NUMBER
#MAX_ROW_NUMBER 的增量值 -1
-1
转到4
可选步骤,您可以从第4步KO到另一个删除 filelist.txt 的OSCommand
我希望,我能清楚地解释我的过程,如果有进一步的帮助,请不要犹豫 .
根据您的要求,您需要轮询到某人放置文件的导入文件夹 . 您可以根据需要选择轮询时间,以秒为单位 .
您需要使用以下流程创建一个包:
ODI Utility ODIFileWait,将帮助您等到具有或不具有特定模式的文件到达给定文件夹中 . 一旦ODI找到或注意到该文件,它将进入下一步 .
使用OSCommand ls >> filenames.txt,在单独的文件中获取所有文件名 . 现在创建一个数据库表,其中带有加载状态的文件名可以填充每个记录的唯一序列号 . 读取此filenames.txt并使用每个文件名的加载状态填充DB表 .
创建一个变量,该变量根据负载状态(待处理或不处理)从DB表中计算和存储文件总数,并在继续之前检查它是否大于零 .
在另一个变量中,从同一个DB表中取最小值序列号,并根据序列号从同一个表中检索文件名 .
现在处理映射或接口,但确保在创建源数据存储(文件)时,在资源名称字段中提供变量名称(用于在上一步骤中检索文件名) .
转到步骤3,直到未处理文件的计数为0 .
2 回答
我已根据您的需要完成了类似的流程 . 这不是一个确切的需要,但步骤可能会帮助你 . 我的解决方案有点棘手,因为第三方通过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我希望,我能清楚地解释我的过程,如果有进一步的帮助,请不要犹豫 .
根据您的要求,您需要轮询到某人放置文件的导入文件夹 . 您可以根据需要选择轮询时间,以秒为单位 .
您需要使用以下流程创建一个包:
ODI Utility ODIFileWait,将帮助您等到具有或不具有特定模式的文件到达给定文件夹中 . 一旦ODI找到或注意到该文件,它将进入下一步 .
使用OSCommand ls >> filenames.txt,在单独的文件中获取所有文件名 . 现在创建一个数据库表,其中带有加载状态的文件名可以填充每个记录的唯一序列号 . 读取此filenames.txt并使用每个文件名的加载状态填充DB表 .
创建一个变量,该变量根据负载状态(待处理或不处理)从DB表中计算和存储文件总数,并在继续之前检查它是否大于零 .
在另一个变量中,从同一个DB表中取最小值序列号,并根据序列号从同一个表中检索文件名 .
现在处理映射或接口,但确保在创建源数据存储(文件)时,在资源名称字段中提供变量名称(用于在上一步骤中检索文件名) .
转到步骤3,直到未处理文件的计数为0 .