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
|
<Students action="insert"> <StudentID key="true" />
<Grade type="int"/>
|
在上例中,StudentID, Name, Grade和GPA是“Students”表的每一列。當端口處理與該結構匹配的一個XML文件時,它會自動將該XML中的值插入到“Students”表中。以下是用于上述映射的示例XML輸入文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
12554 Ferris Bueller 11 1.8
12921 Hermione Granger 9 4.0
|
當端口處理上述輸入文件時,它將在“學生”表中插入或更新兩條記錄,每個學生元素一條記錄。請注意,如果數據庫可以通過自動增量自動生成主鍵,則表的主鍵不需要包含在輸入的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是父表中主鍵的名稱,也是子表中列的名稱。“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" /> /><> /><> /><> <release_year type="date" /> /><>
<actor_id key="true" /> <film_id key="true" ref="@film_id" /> <last_update type="datetime" />
|
在上面的例子中,“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
|
<Students selectQuery="SELECT * FROM `Students` WHERE `GPA` = 4.0"> <StudentID key="true" />
<Grade type="int"/>
|
在上例中,StudentID, Name, Grade和GPA是“Students”表的每一列。執行輸出映射時,端口將運行指定的選擇查詢,并為返回的每個記錄生成一個XML文檔。以下是上述映射的示例XML輸出文件:
1
2
3
4
5
6
7
8
|
12921 Hermione Granger 9 4.0
|
批處理XML輸出
可以編輯輸出映射XML,以支持將記錄一起批處理到單個XML文檔中。在與數據庫表共享名稱的元素中,“batchResults”屬性可以設置為“true”。例如,在上面從“Students”表中選擇結果的輸出映射示例中,以下修改將確保結果是成批的:
1
2
3
4
5
6
7
8
|
<Students selectQuery="SELECT * FROM `Students` WHERE `GPA` = 4.0" batchResults="true"> <StudentID key="true" />
<Grade type="int"/>
|
請注意,如果在“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"/>
<InvoiceLineItem table="INVOICELINEITEM">
<InvoiceId ref="@Id"/>
|
票行項目XML中的記錄與其父項發票相關聯,發票由XML中的“ref”屬性標識。此屬性指示端口使用WHERE子句為“InvoiceLineItem”表生成一個SELECT語句,該子句從父記錄中標識InvoiceId。一張父發票可以有多個InvoiceLineItem。
審核編輯:符乾江
-
數據庫
+關注
關注
7文章
3765瀏覽量
64276 -
端口
+關注
關注
4文章
955瀏覽量
32014 -
MySQL
+關注
關注
1文章
802瀏覽量
26445
發布評論請先 登錄
相關推薦
評論