云数据端口

概览

云数据端口利用了我们自研发的CData软件的标准连接,可以直接与CData ADO.NET和JDBC驱动程序接口支持与数百个云和内部应用程序、数据库等的连接。

云数据端口使用CData驱动程序将数据库操作转换为特定于目标数据源的应用编程接口调用。因此,云应用程序数据可以作为一组虚拟表和存储过程使用。

每个云数据端口都必须配置适当的CData驱动程序,才能连接到目标数据源。一旦建立了连接,端口就支持创建输入映射和输出映射,它们决定了与数据源的虚拟表交互的XML结构。

生成输入和输出映射后,将自动将XML输入文件转换为插入数据的应用编程接口调用,通过应用编程接口调用从数据源检索的数据将以XML文件的形式输出。

要开始使用云数据端口,必须安装目标数据源的CData驱动程序。

安装CData Driver

必须先安装相应数据源的ADO.NET provider (Windows edition)或是JDBC driver (Java edition),然后才能连接到数据源。

ADO.NET

下载并运行ADO.NET提供商的CData安装程序,这是云数据端口识别该提供商并在端口下拉设置中使其可用所需的全部内容。

  • 在CData数据源列表中找到所需的数据源。单击数据源的名称标题,跳转到该数据源的页面。
  • 找到列出可用驱动程序类型的顶部工具栏,然后单击ADO.NET图块。
  • 单击结果页面上的下载按钮。
  • 下载试用版(30天的完整功能)或购买许可证。
  • 运行下载的安装程序。
  • 重新启动知行EDI系统,以允许云数据端口检测新的提供商。
建立连接

一旦端口中有了适用的驱动程序/提供程序,就必须提供连接设置来访问应用程序的应用程序接口,端口会自动用与所选云应用数据源相关的连接设置填充设置选项卡。

验证

身份验证证书特定于目标数据源,证书应该直接从云应用程序中获取,以便它们可以包含在端口发出的API中。

OAuth身份验证

有些数据源需要OAuth身份验证,这必须使用端口设置面板中的连接按钮来启动。此按钮将引导浏览器到数据源的身份验证门户,在此处CData驱动程序必须被授予访问数据源的权限。知行EDI系统看不到或存储在此门户中输入的证书(门户返回代表身份验证的证书,而不公开它们)。

知行EDI系统确实存储了保持OAuth身份验证最新所需的OAuth令牌和刷新令牌,因此仅在首次连接到数据源时才需要通过OAuth门户提供凭据。

输入映射

云数据端口表示存储在目标云应用程序中的数据,就像数据存储在关系数据库的表中一样。连接到数据源后,端口会扫描数据源中的可用虚拟表和存储过程。输入映射表示在这些虚拟表中的插入/更新。

输入映射表示为XML,由云数据端口处理的与输入映射的XML结构匹配的文件将自动转换为针对目标数据源的适当的插入或更新查询。

将XML转换为数据库查询的过程在“输入映射为XML”部分中有详细说明;从概念上讲,端口只是简单地从XML元素中读取值,并在进行INSERT/UPDATE语句时使用它们。

创建输入映射

单击“添加映射”按钮(+)创建新映射。从数据源中的可用虚拟表列表中选择目标表/视图,以调出映射编辑器面板。在映射编辑器中,选择应包含在插入/更新中的虚拟表列。对于简单的INSERT,这就是生成映射所需的全部。

创建输入映射后,可以通过单击映射名称旁边的“代码”按钮(</>)来查看其XML表示。

UPSTERT

UPSERT设置控制端口如何决定是插入还是更新,最常见的情况是将UPSERT by设置为表的主键。使用这种配置,端口将从输入的XML中读取主键值,查询数据源以查看该键是否已经存在于表中,如果存在则更新记录,如果不存在则插入新记录。UPSERT by:可以设置为主键以外的列,但这可能会导致从数据源返回多个记录。在这种情况下,端口更新返回的第一条记录。

如果执行此查询以选择UPSERT键:设置为SELECT查询,端口将比较此查询的结果和输入的XML,以确定是INSERT还是UDPATE。例如,如果此字段设置为以下查询:

SELECT CustomerName WHERE CustomerAddress = 101 Main Street

然后端口将首先对数据源运行该查询,然后在输入的XML中查找CustomerName元素,最后将该XML值与数据源返回的值进行比较。如果这些值匹配,那么端口将更新该记录,否则它将插入一个新记录。

INSERT

如果在输入映射中禁用UPSERT,端口将自动将操作设置为INSERT。端口将尝试为每个输入的XML文件插入新记录,而无需查询数据源来查看该记录是否已经存在。

LOOKUP

有些列有LOOKUP选项可用。端口检测到这些列与数据源中的另一个虚拟表有外键关系。如果LOOKUP已启用,端口将在插入前查询该外部表,并使用INSERT中返回的值。LOOKUP by:字段确定将使用哪一列来查询外部表。

例如,假设将采购订单插入数据源,其中“PO”虚拟表中的一个字段是CustomerID。假设输入的XML将有一个客户名称元素,但没有客户的内部标识。但是,数据源中的另一个表“Customers”既有名称又有标识,因此它可以用于根据名称查找标识值。端口将识别“Customers”表的CustomerID列是外键,并为该列启用LOOKUP。将LOOKUP by:设置为CustomerName将指示端口使用如下语句查询“客户”表:

SELECT CustomerID FROM Customers WHERE CustomerName = @CustomerName

在此查询中,@CustomerName代表输入XML中CustomerName元素中的值。

使用这种配置,端口将首先从“Customers”中检索客户标识,然后在插入“PO”表时使用该值。

XML形式的输入映射

输入映射用XML表示,结构如下:父元素标识要插入的虚拟表,每个子元素对应于目标表中的一列。输入映射建立了XML元素和数据源列之间的连接,以便端口可以从传入的XML文档中读取值,并在插入或更新查询中使用它们。

以下是“Students”表的输入映射示例:

在上例中,学生标识、姓名、年级和平均成绩是“Students”表的每一列。当端口处理与该结构匹配的一个XML文件时,它会自动将该XML中的值插入到“Students”表中。以下是用于上述映射的示例XML输入文件:

当端口处理上述输入文件时,它将在“Students”表中插入或更新两条记录,每个学生元素一条记录。

批量导入

云数据端口支持批处理,以提高插入大数据集时的性能。批处理通过两个字段配置,事务大小和批处理大小。当这些字段设置为正整数时,端口将在单个操作(批处理)中插入[批处理大小]记录,并将在单个连接(事务)中插入[事务大小]记录。

一个XML输入文件可以包含比单个事务大小更多的记录,在这种情况下,端口将通过多个事务插入数据。

如果在批处理插入期间发生错误,端口将回滚事务并缓存失败事务中第一条记录的索引。重试输入文件时,只有缓存索引后的记录才会插入数据源。

UPDATE操作

默认情况下,输入映射将使用INSERT或UPSERT作为查询操作。与输入映射相关联的动作在XML中显示为table_name元素的“action”属性,例如:

当操作设置为UPDATE时,一些云应用程序数据源支持更好的性能。更新操作假定插入数据源的数据与已经存在的记录相关联。如果这是真的,可能需要尝试将“action”属性设置为UPDATE,以利用更好的后端性能:

请注意,Amazon Dynamo DB数据源是后端数据处理包括UPSERT逻辑的特殊情况(换句话说,对不存在的记录的UPDATE调用将导致创建新记录)。将数据插入Amazon Dynamo DB数据库时,建议将“action”属性设置为“UPDATE”,以利用性能优势。

插入到子表

输入映射支持使用单个映射插入多个虚拟表。当创建具有多个表的输入映射时,这些表应该彼此具有外键关系,这样一个表就是另一个表的子表。否则,使用多个输入映射插入到不通过外键相关的表中。

要插入子表,首先创建一个以父表为目标的输入映射。然后使用左上角的“添加”按钮从输入映射编辑器中添加子表。从表列表中选择适当的表,设计器将自动填充表的层次结构。选择应包含在输入映射中的子表列。

REF

子表中的一些列将用蓝色的“REF”来标记。端口检测到这些列对应于父表中的主键。在插入父表之后,在插入子表之前,端口将在父表中查询它刚刚插入的记录的主键。然后,端口将在插入子表时使用该值。

当父表的主键由数据源生成时,如自动增量键,这很有用。在这种情况下,该列不会作为输入XML传入,因此端口直到将记录插入父表后才知道该列的值。

在输入映射XML中,“ref”属性表示以后可以引用列,或者该列应该包含由数据源生成的具有保留值LAST_INSERT_ID的“ref”属性(例如AUTOINCREMENT主键):

这表示film_id值将在插入后被检索,并可在映射中稍后被引用(通常在子表中)。若要稍后引用该值,请将“ref”元素设置为“AUTOINCREMENT”列的名称:

在上例中,film_id是父表中主键的名称,也是子表中列的名称。“ref”语法指示端口在插入后从父表中检索film_id,并将检索到的值用作子表中的film_id列。

LOOKUP 子表的LOOKUP逻辑与父表相同。有关更多详细信息,请参见创建输入映射中的LOOKUP部分。

子表XML

当插入父表和子表时,输入映射XML结构将是多层的。以下是由外键关联的两个表的输入映射示例:

在上面的例子中,“film”是父表,“film_actor”是子表。film_id列是“film”表的主键,“film_actor”表中的外键。当云数据端口处理与此结构匹配的输入XML文件时,它将更新“film”和“film_actor”表,并确保链接两个记录的键是相同的。

输出映射

云数据端口表示存储在目标云应用程序中的数据,就像数据存储在关系数据库的表中一样。连接到数据源后,端口会扫描数据源中的可用虚拟表和存储过程。输出映射表示从这些虚拟表中SELECT一个。

输出映射表示为XML,当云数据端口从目标数据源中提取数据时,该数据将被推出为XML文件。这些输出文件将具有与输出映射相同的XML结构。将数据库响应转换为可扩展标记语言的过程在输出映射为可扩展标记语言一节中有详细介绍。

创建输出映射

单击“添加映射”按钮创建新映射。从数据源中的可用表列表中选择目标虚拟表/视图,以调出映射编辑器面板。在映射编辑器中,选择应该在select语句中返回的表列。对于简单的SELECT,这就是生成映射所需的全部内容。

创建输入映射后,可以通过单击映射名称旁边的“执行”按钮(黑色播放按钮)来执行它所代表的查询。此外,可以通过单击映射名称旁边的“代码”按钮(</>)来查看映射的XML表示。

输出过滤器

映射编辑器包括一个“过滤器”面板,用于定义限制数据源返回的记录的规则。每个规则对应于结果选择查询中的WHERE语句,并将指定列与指定值进行比较,只提取具有匹配列值的记录。

规则与“与”和“或”逻辑运算符相结合,当应用许多规则时,可以将规则分组在一起以保持操作顺序。

XML形式的输出映射

输出映射用XML表示,结构如下:父元素标识要从中选择的虚拟表,每个子元素对应于目标表中的一列。输出映射建立了数据库列和XML元素之间的连接,以便端口可以从数据库结果中读取值,并使用它们来填充XML文档。

以下是“Students”表的输出映射示例:

在上例中,StudentID、Name、Grade和GPA是“Students”表的每一列。执行输出映射时,端口将运行指定的选择查询,并为返回的每个记录生成一个XML文档。以下是上述映射的示例XML输出文件:

批量输出

可以编辑输出映射XML,以支持将记录一起批处理到单个XML文档中。在与数据源虚拟表共享名称的元素中,“batchResults”属性可以设置为“true”。例如,在上面从“学生”表中选择结果的输出映射示例中,以下修改将确保结果是成批的:

请注意,如果在“SELECT”和“batchResults”启用期间出现错误,则可能很难确定哪些记录由于错误而未返回。

覆盖SELECT查询

输出映射XML显示将针对目标数据源运行的SELECT查询。端口基于输出映射中的设置构建该查询,但是如果需要对查询进行细粒度控制,则可以手动覆盖该查询。

只需编辑与虚拟表共享名称的元素的“selectQuery”属性,并将其设置为任意选择查询。

仅处理新的或更改的记录

输出映射可以配置为仅检索最近更新或添加的记录。端口可以使用两种方法来检测哪些记录是新的或修改的。

第一种方法需要一个DateTime列来表示记录的最后修改时间,第二种方法需要一个列来显式存储一个值,该值表示是否应该处理记录。

使用最后一次修改的列

在映射编辑器中,展开面板底部的高级设置。如果检测到日期时间列,该选项将可用于使用列来处理新的或更改的记录。将此设置为代表记录上次修改时间的适当日期时间列。

使用自定义列

输出映射可以配置为更新虚拟表中从数据源成功提取的记录的列,这可以与筛选器规则结合使用,该规则只选择具有列值的记录,该列值指示该记录尚未被拉取(或应该被再次拉取)。

要在处理后启用列更新,请展开映射编辑器底部的高级设置。成功处理行时,启用“用值更新列”,然后指定应更新哪个列以及应在该列中设置的值。

例如,输出映射可能配置为在提取记录后将已处理列更新为“1”。然后,可以应用过滤规则,将记录限制为仅处理不等于1的记录。

在本例中,当端口处理输出模板时,它会基于模板创建一个SELECT语句。模板将执行“选择标识、帐户标识、发票金额”,根据模板为结果集中的每条记录创建一个XML文件,并将这些文件放在该端口的输出文件夹中。

从多个表中选择

输出映射支持使用单个映射查询多个虚拟表。当创建具有多个表的输出映射时,这些表应该彼此具有外键关系,这样一个表就是另一个表的子表。否则,使用多个输出映射从不通过外键相关的表中进行选择。

要查询子表,首先创建一个以父表为目标的输出映射。然后使用左上角的“添加”按钮从输出映射编辑器中添加子表。从表列表中选择适当的表,设计器将自动填充表的层次结构。选择子表中应包含在输出映射中的列。

以下是包含子表的输出映射示例:

发票行项目XML中的记录与其父项发票相关联,发票由XML中的“引用”属性标识。此属性指示端口使用WHERE子句为“InvoiceLineItem”表生成一个SELECT语句,该子句从父记录中标识InvoiceId。一张父发票可以有多个发票行项目元素。

了解更多EDI信息,请您电话 150-0298-3180 / 177-8250-8152 或邮件 edi@kasoftware.cn 联系我们。点击下方蓝色按钮,即可免费试用EDI软件。

注:文案部分图片及内容来源于网络,版权归原创作者所有,如有侵犯到您的权益,请您联系我们进行删除,给您带来困扰,我们深感抱歉。

标签: , , , , , ,
文章分类 脚本和自动化, 解决方案