MySQL端口
MySQL端口可以从MySQL数据库中存储和检索数据。
概览
建立连接后,端口读取数据库中存在的表/视图(table/view)列表。通过选择一个可用的表并从该表中选择列来创建输入或输出映射。端口使用选定的表和列生成一个XML架构结构。
生成输入映射后,当端口接收到与输入映射的XML结构匹配的XML文件时,它将自动将数据插入数据库。生成输出映射后,端口将从数据库中提取数据,并使用提取的值填充与输出映射具有相同的XML结构的XML文件。
端口配置
本节包含所有可配置的端口属性。
配置
数据库连接
与建立数据库连接相关的设置。
设置格式 | 将连接设置指定为属性列表或连接字符串。 |
连接字符串 | 连接字符串格式的数据库凭据。仅在设置格式为“连接字符串”时适用,并用于替代其他连接字段。 |
服务器 | 托管数据库的服务器的主机名或IP地址。 |
端口 | 要连接到数据库主机的端口。 |
数据库 | 要连接到的数据库的名称。 |
用户 | 有权访问数据库的用户凭据。 |
密码 | 与指定用户关联的密码凭据。 |
映射
在数据库表和XML文档结构之间建立映射关系。一旦创建了这些映射,就可以将XML数据插入到数据库中,并且可以将从数据库中检索到的数据作为XML推出。
输入映射 | 输入映射在XML文档结构和数据库插入(或更新)之间创建关系。当匹配输入映射结构的XML文件到达MySQL端口时,端口使用输入文件中的值对数据库进行插入/更新调用。有关生成输入映射的更多信息,请参见输入映射部分。 |
输出映射 | 输出映射在XML文档结构和数据库选择语句之间创建一种关系。当端口从数据库接收数据时,它用与输出映射相同的XML结构填充一个XML文件。然后,该XML文件被推送到工作流中的下一个端口。有关生成输出映射的更多信息,请参见输出映射部分。 |
自动化
自动化配置
与端口自动处理文件相关的设置。
发送 | 匹配输入映射的XML文件是否会自动插入数据库。 |
重试间隔(分) | 端口在重试失败的发送之前等待的时间间隔。 |
最大重试次数 | 端口在引发错误之前发送消息的尝试次数。 |
接收 | 是否应该自动从目标数据库中提取数据并用于生成与配置的输出映射匹配的XML文件。 |
接收执行间隔 | 自动尝试从数据库中检索数据的间隔时间。 |
分钟 | 下载前等待的分钟数。仅在接收执行间隔设置为分钟时适用。 |
时间过了几分钟 | 每小时计划的分钟偏移量,仅在接收执行间隔设置为每小时时适用。例如,如果该值设置为5,自动化服务将在1:05、2:05、3:05等处启动。 |
时间 | 给定日期内下载发生的时间。仅当“接收执行间隔”设置为“每日”、“每周”或“每月”时适用。 |
天 | 拉取请求应该发生的日期,仅在接收执行间隔设置为每周或每月时适用。 |
表达式 | 表达式的任意字符串,用于确定拉请求应该何时发生。仅在接收执行间隔设置为高级时适用。 |
高级配置
本地文件夹
输入文件夹(Send) | 放在这里的文件将由端口发送。如果启用了发送自动化,端口将自动轮询此位置以进行文件处理。 |
输出文件夹(Receive) | 端口会将接收/下载的文件放在此文件夹中。如果端口连接到工作流中的另一个端口,文件将不会保留在这里,而是传递到已连接端口的输入文件夹(Send)。 |
已处理文件夹(Sent) | 发送后,如果启用了”已处理文件夹(Sent)”,端口将在此放置文件的副本,该文件的副本不会传递到工作流中的下一个端口。 |
防火墙配置
一组设置,用于标识应该通过其连接到数据库的防火墙。
日志
与连接器日志记录相关的设置。
日志文件 | 磁盘上写入日志文件的路径(包括文件名和扩展名)。 |
最大日志文件大小 | 尝试记录超过最大大小的数据将导致创建另一个日志文件,并将当前日期时间附加到文件名末尾。 |
详细程度 | 日志文件中包含的详细程度,从1到5,其中5是最详细的。 |
方案
与数据库架构相关的设置。
位置 | 磁盘上包含定义表、视图和存储过程的架构文件的目录路径。 |
表 | 将架构报告的表限制为可用表的子集。例如:表A、表B、表C |
视图 | 将架构报告的视图限制为可用视图的子集。例如:视图A、视图B、视图C |
SSH
通过SSH连接到数据库主机的设置集合。仅当数据库主机需要SSH连接时才需要。
SSL
使用SSL客户端身份验证连接到数据库主机的设置集合。仅当数据库主机是需要SSL客户端身份验证的SSL服务器时才需要。
性能
与端口分配资源有关的配置。
最大线程数 | 从工作池分配的最大线程数以便处理此端口上的文件。 如果配置了,则覆盖“个人配置->高级配置->性能”选项卡中的默认配置。 |
最大文件数 | 此端口分配的线程每次能处理的最大文件数。如果配置了,则覆盖“个人配置->高级配置->性能”选项卡中的默认配置。 |
其他配置
未包含在先前类别中的设置。
连接时长 | 数据库连接保持打开的持续时间。如果设置为0,则没有限制。 |
集成安全性 | 是否使用窗口身份验证进行身份验证。 |
最大行数 | 在单个轮询间隔内从数据库中提取的最大记录数。 |
其他 | 隐藏属性仅在特定用例中使用。 |
池空闲超时 | 连接关闭前允许的空闲时间。 |
池最大大小 | 池中的最大连接数。 |
池最小大小 | 池中的最小连接数。 |
池等待时间 | 等待可用连接的最大秒数。 |
查询传递 | 是将查询按原样传递给MySQL,还是执行客户端验证和语法更正。 |
只读 | 是否强制对MySQL提供程序进行只读访问。 |
退货目录 | 当设置为false时,当查询getCatalogs、getSchemas、getTables、getViews、getProcedures、getColumns、getProcedures参数或getIndex时,端口将返回空值。 |
SSL服务器证书 | 标识托管数据库的SSL服务器的公钥证书。仅当数据库托管在SSL服务器上时才需要。如果公钥证书不可用,此字段可以设置为“任何证书”,以隐式信任服务器的身份。 |
超时 | 端口在引发超时错误之前等待连接响应的持续时间(秒)。 |
使用连接池 | 是否使用开放连接池。 |
零日期到空日期 | 是否将包含全零的日期和日期时间值作为空值返回。 |
命令超时 | 命令执行超时持续时间(秒)。 |
平面映射方案 | 根据文档的文件名控制将使用哪个输入映射来处理传入的平面文件。支持全局匹配,可以通过用分号分隔每个映射来定义多个映射。例如,将此字段设置为‘*INVOICE*=Invoice;*ORDER*=Order;’将导致端口使用发票输入映射来处理文件名中带有“INVOICE”的任何文件,并且名称中带有“ORDER”的任何其他文件将使用订单输入映射来处理。比较不区分大小写。 |
本地文件方案 | 一种文件掩码,用于确定端口下载的本地文件名。以下宏可用于引用上下文信息: %ConnectorId%, %Filename%, %FilenameNoExt%, %Ext%, %ShortDate%, %LongDate%, %RegexFilename:%, %DateFormat:%, %ControlNumber%, %TransactionControlNumber%, %TransactionCode%, %StandardVersion% 例如:%FilenameNoExt%_%ControlNumber%%Ext% |
日志消息 | 已处理文件的日志条目是否包含文件本身的副本。 |
保存到已发送(Sent)文件夹 | 端口处理的文件是否应复制到端口的已发送(Sent)文件夹。 |
建立连接
与MySQL端口建立连接需要以下连接属性:
1
2
3
4
5
6
7
8
9
10
|
服务器
端口
数据库
用户名
密码
|
这些可以配置为单独的属性或数据库连接字符串。
输入映射
输入映射表示对目标数据库中一个或多个表的插入/更新。它们是通过可视化映射编辑器面板创建的,然后在内部建模为XML。端口处理的与输入映射的XML结构匹配的文件将自动转换为插入或更新查询。
将XML转换为数据库查询的过程在“输入映射为XML”部分中有详细说明;从概念上讲,端口只是简单地从XML元素中读取值,并在进行INSERT/UPDATE语句时使用它们。
创建输入映射
单击“添加映射”按钮(+)创建新映射。从数据库中的可用表列表中选择目标表/视图,以调出映射编辑器面板。在映射编辑器中,选择应该包含在插入/更新中的表列。对于简单的INSERTs,这就是生成映射所需的全部。
创建输入映射后,可以通过单击映射名称旁边的“代码”按钮(</>)来查看其XML表示。
UPSERT
UPSERT设置控制端口如何决定是插入还是更新。最常见的情况是将UPSERT设置为:表的主键。使用这种配置,端口将从输入的XML中读取主键值,查询数据库以查看该键是否已经存在于表中,如果存在则更新记录,如果不存在则插入新记录。UPSERT by:可以设置为主键以外的列,但这可能会导致从数据库返回多个记录。在这种情况下,端口更新返回的第一条记录。
如果执行此查询以选择UPSERT键:设置为选择查询,端口将比较此查询的结果和输入的XML,以确定是插入还是UDPATE。例如,如果此字段设置为以下查询:
SELECT CustomerName WHERE CustomerAddress = 101 Main Street
然后端口将首先对数据库运行这个查询,然后在输入的XML中查找CustomerName元素,最后将该XML值与数据库返回的值进行比较。如果这些值匹配,那么端口将更新该记录,否则它将插入一个新记录。
INSERT
如果在输入映射中禁用UPSERT,端口将自动将查询操作设置为INSERT。端口将尝试为每个输入的XML文件插入新记录,而无需查询数据库来查看该记录是否已经存在。
LOOKUP
有些列有LOOKUP选项可用。端口检测到这些列与数据库中的另一个表有外键关系。如果LOOKUP已启用,端口将在插入前查询该外部表,并使用INSERT中返回的值。LOOKUP by:字段确定将使用哪一列来查询外部表。
例如,假设将采购订单插入数据库,其中“采购订单”表中的一个字段是内部客户标识。假设输入的XML将有一个客户名称元素,但没有客户的内部标识。但是,数据库中的另一个表“客户”既有名称又有标识,因此它可以用于根据名称查找标识值。端口将识别“采购订单”表的CustomerID列是外键,并为该列启用LOOKUP。将LOOKUP by:设置为CustomerName将指示端口使用如下语句查询“客户”表:
SELECT CustomerID FROM Customers WHERE CustomerName = @CustomerName
在此查询中,@CustomerName代表输入XML中CustomerName元素中的值。
使用这种配置,端口将首先从“Customers”中检索客户标识,然后在插入“PO”表时使用该值。
作为XML的输入映射
输入映射用XML表示,结构如下:父元素标识要插入的表,每个子元素对应于目标表中的一列。输入映射建立了XML元素和数据库列之间的连接,以便端口可以从传入的XML文档中读取值,并在插入或更新查询中使用它们。
以下是“学生”表的输入映射示例:
1
2
3
4
5
6
7
8
|
<Items>
<Students action="insert">
<StudentID key="true" />
<Name/>
<Grade type="int"/>
<GPA/>
</Students>
</Items>
|
在上例中,StudentID, Name, Grade和GPA是“Students”表的每一列。当端口处理与该结构匹配的一个XML文件时,它会自动将该XML中的值插入到“Students”表中。以下是用于上述映射的示例XML输入文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<Items>
<Students>
<StudentID>12554</StudentID>
<Name>Ferris Bueller</Name>
<Year>11</Year>
<GPA>1.8</GPA>
</Students>
<Students>
<StudentID>12921</StudentID>
<Name>Hermione Granger</Name>
<Year>9</Year>
<GPA>4.0</GPA>
</Students>
</Items>
|
当端口处理上述输入文件时,它将在“学生”表中插入或更新两条记录,每个学生元素一条记录。请注意,如果数据库可以通过自动增量自动生成主键,则表的主键不需要包含在输入的XML中。
插入子表
输入映射支持使用单个映射插入多个表。当创建具有多个表的输入映射时,这些表应该彼此具有外键关系,这样一个表就是另一个表的子表。否则,使用多个输入映射插入到不通过外键相关的表中。
要插入子表,首先创建一个以父表为目标的输入映射。然后使用左上角的+添加按钮从输入映射编辑器中添加子表。从表列表中选择适当的表,设计器将自动填充表的层次结构。选择应包含在输入映射中的子表列。
REF
子表中的一些列将用蓝色的“REF”标记来标记。端口检测到这些列对应于父表中的主键。在插入父表之后,在插入子表之前,端口将在父表中查询它刚刚插入的记录的主键。然后,端口将在插入子表时使用该值。
当父表的主键由数据库生成时,如自动增量键,这很有用。在这种情况下,该列不会作为输入XML传入,因此端口直到将记录插入父表后才知道该列的值。
在输入映射XML中,“引用”属性表示以后可以引用某列,或者该列应该包含由数据库生成的具有保留值LAST_INSERT_ID的“引用”属性(例如自动增量主键):
1
2
|
<film action="upsert">
<film_id key="true" upsert="film_id" ref="@@LAST_INSERT_ID" />
|
1
2
3
4
5
|
这表示film_id值将在插入后被检索,并可在映射中稍后被引用(通常在子表中)。若要稍后引用该值,请将“ref”元素设置为“自动增量”列的名称:
<pre class="nums:true">
|
<film_id key="true" ref="@film_id">
在上例中,film_id是父表中主键的名称,也是子表中列的名称。“ref”语法指示端口在插入后从父表中检索film_id,并将检索到的值用作子表中的film_id列。
LOOKUP
子表的LOOKUP逻辑与父表相同。有关更多详细信息,请参见创建输入映射中的查找部分。
子表XML
当插入父表和子表时,输入映射XML结构将是多层的。以下是由外键关联的两个表的输入映射示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<film action="upsert">
<film_id key="true" upsert="film_id" ref="@@LAST_INSERT_ID" />
<description />
<language_id />
<rating />
<release_year type="date" />
<title />
<film_actor>
<actor_id key="true" />
<film_id key="true" ref="@film_id" />
<last_update type="datetime" />
</film_actor>
</film>
|
在上面的例子中,“film”是父表,“film_actor”是子表。film_id列是“film”表的主键,“film_actor”表中的外键。当MySQL端口处理与此结构匹配的输入XML文件时,它将更新“film”和“film_actor”表,并确保链接两个记录的键是相同的。
输出映射表示来自目标数据库中一个或多个表的选择查询。它们是通过可视化映射编辑器面板创建的,然后在内部建模为XML。从数据库返回的结果用于填充与输出映射结构匹配的XML文档。将数据库响应转换为可扩展标记语言的过程在输出映射为可扩展标记语言一节中有详细介绍。
创建输出映射
单击“添加映射”按钮(+)创建新映射。从数据库中的可用表列表中选择目标表/视图,以调出映射编辑器面板。在映射编辑器中,选择应该在select语句中返回的表列。对于简单的SELECT,这就是生成映射所需的全部内容。
创建输入映射后,可以通过单击映射名称旁边的“执行”按钮(黑色播放按钮)来执行它所代表的查询。此外,可以通过单击映射名称旁边的“代码”按钮(</>)来查看映射的XML表示。
输出过滤器
映射编辑器包括一个“过滤器”面板,用于定义限制数据库返回记录的规则。每个规则对应于结果选择查询中的WHERE语句,并将指定列与指定值进行比较;只会提取具有匹配列值的记录。
规则与“AND ”和“OR”逻辑运算符相结合,当应用许多规则时,可以将规则分组在一起以保持操作顺序。
输出映射为XML
输出映射用XML表示,结构如下:父元素标识要从中选择的表,每个子元素对应于目标表中的一列。输出映射建立了数据库列和XML元素之间的连接,以便端口可以从数据库结果中读取值,并使用它们来填充XML文档。
以下是“Students”表的输出映射示例:
1
2
3
4
5
6
7
8
|
<Items>
<Students selectQuery="SELECT * FROM `Students` WHERE `GPA` = 4.0">
<StudentID key="true" />
<Name/>
<Grade type="int"/>
<GPA/>
</Students>
</Items>
|
在上例中,StudentID, Name, Grade和GPA是“Students”表的每一列。执行输出映射时,端口将运行指定的选择查询,并为返回的每个记录生成一个XML文档。以下是上述映射的示例XML输出文件:
1
2
3
4
5
6
7
8
|
<Items>
<Students>
<StudentID>12921</StudentID>
<Name>Hermione Granger</Name>
<Year>9</Year>
<GPA>4.0</GPA>
</Students>
</Items>
|
批处理XML输出
可以编辑输出映射XML,以支持将记录一起批处理到单个XML文档中。在与数据库表共享名称的元素中,“batchResults”属性可以设置为“true”。例如,在上面从“Students”表中选择结果的输出映射示例中,以下修改将确保结果是成批的:
1
2
3
4
5
6
7
8
|
<Items>
<Students selectQuery="SELECT * FROM `Students` WHERE `GPA` = 4.0" batchResults="true">
<StudentID key="true" />
<Name/>
<Grade type="int"/>
<GPA/>
</Students>
</Items>
|
请注意,如果在“SELECT”和“batchResults”启用期间出现错误,则可能很难确定哪些记录由于错误而未返回。
覆盖SELECT查询
输出映射XML显示将针对目标数据库运行的SELECT查询。端口基于输出映射中的设置构建该查询,但是如果需要对查询进行细粒度控制,则可以手动覆盖该查询。
只需编辑与数据库表共享名称的元素的“selectQuery”属性,并将其设置为任意SELECT查询。
仅处理新的或更改的记录
输出映射可以配置为仅检索最近更新或添加的记录。端口可以使用两种方法来检测哪些记录是新的或修改的。
第一种方法需要一个DateTime列来表示记录的最后修改时间,第二种方法需要一个列来显式存储一个值,该值表示是否应该处理记录。
使用最后修改的列
在映射编辑器中,展开面板底部的高级设置。如果检测到日期时间列,该选项将可用于使用列来处理新的或更改的记录。将此设置为代表记录上次修改时间的适当日期时间列。
使用自定义列
输出映射可以配置为更新表中成功从数据库中提取的记录的列。这可以与筛选器规则结合使用,该规则只选择具有列值的记录,该列值指示该记录尚未被拉取(或应该被再次拉取)。
要在处理后启用列更新,请展开映射编辑器底部的高级设置。成功处理行时,启用“用值更新列”,然后指定应更新哪个列以及应在该列中设置的值。
例如,输出映射可能配置为在提取记录后将已处理列更新为“1”。然后,可以应用过滤规则,将记录限制为仅处理不等于1的记录。
在本例中,当端口处理输出模板时,它会基于模板创建一个SELECT语句。模板将执行“SELECT Id, AccountId, Amount FROM INVOICE”,根据模板为结果集中的每条记录创建一个XML文件,并将这些文件放在该端口的输出文件夹中。
从多个表中选择
输出映射支持使用单个映射查询多个表。当创建具有多个表的输出映射时,这些表应该彼此具有外键关系,这样一个表就是另一个表的子表。否则,使用多个输出映射从不通过外键相关的表中进行选择。
要查询子表,首先创建一个以父表为目标的输出映射。然后使用左上角的+添加按钮从输出映射编辑器中添加子表。从表列表中选择适当的表,设计器将自动填充表的层次结构。选择子表中应包含在输出映射中的列。
以下是包含子表的输出映射示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<Invoice selectQuery="SELECT * FROM `Invoice` ">
<Id key="true"/>
<Account/>
<AccountId/>
<Amount/>
<AppliedAmount/>
<Balance/>
<BillingCity/>
<BillingCountry/>
<BillingLine1/>
<BillingPostalCode/>
<BillingState/>
<InvoiceLineItem table="INVOICELINEITEM">
<Id/>
<InvoiceId ref="@Id"/>
<ItemAmount/>
<ItemName/>
<ItemQuantity/>
</InvoiceLineItem>
</Invoice>
|
票行项目XML中的记录与其父项发票相关联,发票由XML中的“ref”属性标识。此属性指示端口使用WHERE子句为“InvoiceLineItem”表生成一个SELECT语句,该子句从父记录中标识InvoiceId。一张父发票可以有多个InvoiceLineItem。