ODI:从XML文件加载数据并插入Oracle数据库

时间:2018-07-26 00:18:35

标签: xml database oracle oracle11g oracle-data-integrator

我是ODI(Oracle Data Integrator)11g的新手。我有XML文件。我需要将数据从该XML文件加载到Oracle数据库中。我创建了项目,导入了知识模块,创建了XML和Oracle模型。

注意:我的XML文件由40多个表格组成。 here's my interface

i'm created XML & Oracle Model

目标数据存储区目前仅存储1个表。

这是我的会话日志: Error Message

1 个答案:

答案 0 :(得分:1)

修改

基于注释,这是一种加载多个“相同xsd” xml文件的方法。

首先,必须确保所有XML都具有相同的XSD结构,否则可能会遇到奇怪的行为。

要处理多个XML文件,基本上这是您必须要做的:

1)您提供一个特定的固定XML名称,并基于该名称创建拓扑。 2)创建一个“文件处理控件”以重命名并在读取之前移动文件。 3)确保您执行正确的“同步”命令

示例

您有XML文件:

/path/in/XML001.XML
/path/in/XML002.XML
/path/in/XML003.XML

将其中一个文件另存为XML_DATA.xml,并在某些“ / work /”路径中使用XML_DATA.xml设置拓扑,并通过测试验证其是否正确。

处理循环,其中:

1)将/path/in/XML001.XML移至/path/work/XMLDATA.XML(覆盖或删除旧的XMLDATA)
2)执行“从文件同步”
3)处理您的界面
4)执行“从数据库同步”
5)将已处理的XML移至“ / path / processed /”

您的包裹将类似于:

[循环]> [MoveFile]> [ProcedureSync]> [接口]> [ProcedureSync]> [MoveFile]> [EndLoop]

关于Loop控件,有几种方法可以实现,如果您不确定我是否可以向您发送提示。

希望有帮助!

编辑2

基于新信息,我将尝试对提出的问题进行更好的解释。这不是一个艰巨的任务,但是对于仍然了解ODI工具的人来说,听起来可能很难。

要点是要了解,对于ODI而言,XML文件就像数据库一样是数据源,而不是.csv这样的文件。

  • (Q)如何创建文件处理控件?
  • (A)我所谓的“文件处理控制”是一种简单的机制,其中 您可以通过文件夹“移动/复制/删除” XML文件。您可以使用打包工具OdiFileCopy,OdiFileDelete等来完成此操作。
  • (Q)我对同步命令还不够了解。你能给我更多细节吗?
  • (A)在ODI中使用XML文件时,必须进行同步。 基本上,当ODI使用XML文件时,首先将其加载到内存中。然后,ODI创建一个.lck文件来锁定XML文件。什么时候 完成打包后,XML文件仍在内存中,因此您需要 再次将其“下载”到文件并释放锁,ODI会这样做 不要自己做。这是因为您应该能够以 您认为适合使用XML的许多软件包 文件仍然可用。因此,完成后,您必须告知 通过从以下位置运行同步,您将不再使用XML 数据库命令。
  • 我应该创建XML技术拓扑还是文件技术拓扑? 还是两者都有?
  • (A)您无需为File创建拓扑即可运行包 文件工具。请记住,您必须为“通用”文件创建XML拓扑。不要将拓扑设置为OM135SVOD180624.xml,而应将其设置为OMDATASOURCE.xml
  • 我需要有关循环控制的更多详细信息
  • (A)我将进行更详细的描述。非常不幸的是我 现在没有在这里安装ODI,否则我也会发布 一个例子。但是我认为这很容易理解。

1)处理XML文件时使用同步的示例。

每次访问XML文件进行读写时,建议按照以下步骤进行操作:

  • 在XML的逻辑模式中运行“ SYNCHRONIZE FROM FILE”命令 文件。您可以通过创建ODI过程,设置 XML技术,将逻辑模式指向您所需要的 创建并在“目标命令”窗口中写入:SYNCHRONIZE 从文件。
  • 运行您的ODI程序包或加载读取或写入XML文件的计划。
  • 在XML的逻辑模式中运行“ SYNCHRONIZE FROM DATABASE”命令 文件。您可以通过创建ODI过程,设置 XML技术,将逻辑模式指向您所需要的 创建并在“目标命令”窗口中写入:SYNCHRONIZE 从数据库。
  • 对此的完整参考很容易在这里找到:https://docs.oracle.com/cd/E28280_01/integrate.1111/e12644/xml_file.htm#ODIKM534在项目5.6.1.2中。

示例: enter image description here

2)文件处理控制

在“工具包”工具栏中的“包”中,有一个“文件”工具栏,可为您提供许多有用的文件工具,例如复制,删除,移动,压缩,解压缩等。当您需要“控制”您正在读取,重命名等的文件。

您可以使用这些工具进行一些操作,它们非常易于理解。

3)循环控制

在ODI中,您可以使用包中的变量来开发循环。有时,您可以仅使用odi过程来处理循环,这取决于您的需求。根据我所掌握的有关您的上下文的一些信息,建议您首先尝试使用变量。

这是一个处理5次循环的示例。

1)创建一个数字变量。
2)将其拖到包中并将其值设置为0。
3)再次拖动它,将其配置为评估,将条件设置为等于5。
4)拖动任何您拥有的“测试”界面。
5)将KO Link链接到接口。使用评估变量时,KO链接的行为类似于“假”条件。在我们的例子中,如果计数器<5,它将指向接口。
6)再次拖动变量,这一次不是设置固定值,而是将增量设置为1。这将为该值加1。
7)将最后一个变量链接到评估变量。

因此,它将运行5次测试界面。我在互联网上发现一张图片,说明了这一点:

Example of Loop in ODI

您可以在“ https://dzone.com/articles/odi-11g-implementing-loops”和“ https://blogs.oracle.com/dataintegration/using-variables-in-odi:-creating-a-loop-in-a-package”中找到有用的信息。

最终套餐

最终,您的“算法”将如下所示:

1)处理文件夹中文件的循环(这有点棘手,它可能需要一个jython代码,您可以在此处找到一个引用“ https://blogs.perficient.com/2014/08/01/looping-through-files-in-a-folder-using-odi/”)

2)将第一个文件移至/work/OMDATASOURCE.xml

3)SYNCHRONIZE FROM DATABASE命令。

4)处理您的界面

5)从文件同步。

6)将OMDATASOURCE.xml移至“ /已处理”或您创建的任何其他控件。

7)处理下一个文件。您可能还希望使用表格来控制某些内容,例如读取的文件,处理的文件等。

8)结束循环(使用我发送的循环控制示例)。

ODI非常灵活且可扩展,您可以用很多方法来做所有事情。

注意事项

  • 还有其他方法可以做到这一点。您可以在名称中设置变量 XML文件。这样可以避免“移动并重命名”的需要, 但您仍然需要处理循环中的文件 获取所需文件的参数的路径,或者至少 将它们放在表格中,以便您可以处理循环并更改 值。

希望这会有所帮助,[]的

欢呼