指令碼模式組件用於配置系統組件不支援的配置項,以滿足業務情境。
操作步驟
在Dataphin首頁頂部功能表列,選擇研發 > Data Integration。
在整合頁面頂部功能表列選擇專案(Dev-Prod模式需要選擇環境)。
在左側導覽列中單擊離線整合,在離線整合列表中單擊需要開發的離線管道,開啟該離線管道的配置頁面。
單擊頁面右上方的組件庫,開啟組件庫面板。
在組件庫面板左側導覽列中需選擇輸入,在右側的輸入組件列表中找到指令碼模式輸入組件,並拖動該組件至畫布。
單擊指令碼模式輸入組件卡片中的
表徵圖,開啟指令碼模式輸入配置對話方塊。在指令碼模式輸入配置對話方塊,配置參數。
參數
描述
步驟名稱
即指令碼模式輸入組件的名稱。Dataphin自動產生步驟名稱,您也可以根據業務情境修改。命名規則如下:
只能包含中文、字母、底線(_)、數字。
不能超過64個字元。
資料來源類型
選擇資料來源類型。
資料來源
選擇相應的資料來源執行個體。
產生同步設定檔
單擊產生同步設定檔,系統將自動根據所選的資料來源類型,在右側設定檔地區組建組態JSON的模板,您可根據實際業務需求刪減配置項或修改配置項的值。
設定檔
您可單擊
表徵圖,擴充編輯地區,全屏查看或編寫設定檔。模板配置中主要由三部分組成:
table和tables:輸入組件的單輸入表和多輸入表。多輸入表的key值為tables,單輸入表的key值為table。如果組件不涉及表,則沒有該參數。column:輸入表的輸入欄位,欄位至少有name和type。parameter:同步配置相關的參數,資料來源不同則配置不同,組件參數請參見對應組件的說明。
{ "table":"tableName",// "tables":["tableName"] "column":[{ "name":"", "type":"" }], "parameter":{} }單擊確認,完成指令碼模式輸入組件的屬性配置。
最佳實務
指令碼模式組件採用配置JSON的方式來配置離線整合任務,其主要使用情境包含:
使用無法白屏配置的組件進階配置項。
當中繼資料不支援(例如查表、查欄位時出現錯誤或不可用),需手動設定相關表及欄位。
解決關鍵字問題,例如表名、欄位名等特殊關鍵字。
使用資料庫函數。
分庫分表。
直接使用查詢SQL。
下文將以同步MySQL多表JOIN的結果資料為例進行說明,其他情境均可參照本例進行配置。
一:配置介紹
在指令碼模式輸入配置對話方塊中,配置參數。
參數 | 描述 |
步驟名稱 | 輸入指令碼模式輸入組件的名稱。 |
資料來源類型 | 選擇MySQL。 |
資料來源 | 選擇相應資料來源執行個體。 |
產生同步設定檔 | 單擊產生同步設定檔,系統將自動根據所選的資料來源類型,在右側設定檔地區組建組態JSON的模板,您可根據實際業務需求刪減配置項或修改配置項的值。 |
設定檔 | 模板配置中主要由三部分組成:
|
二:組件使用
不同使用情境,組件的使用樣本如下。
使用查詢SQL
例如,同步一個多表JOIN的結果資料或其他自訂SQL取數,設定檔內容如下。
{
"table": "sff_id_name",
"parameter": {
"connection": [
{
"querySql": [
"select a.id, b.name from sff_id_name a join sff_id_name_1 b on a.id = b.id"
]
}
]
},
"column": [
{
"name": "id",
"type": "Long"
},
{
"name": "name",
"type": "String"
}
]
}若使用複雜的SQL,則需要使用querySql配置項,該配置項為字串數組,支援多個結構一致的SELECT語句。此外,該配置項必須嵌套在connection中,並且支援多個connection,即多個資料庫連接。
分庫分表
分庫分表是指在表結構一致的前提下,資料分布在多個資料庫和多個表中。
使用querySql
{ "table": "sff_id_name", "parameter": { "connection": [ { "querySql": [ "select a.id, b.name from sff_id_name a join sff_id_name_1 b on a.id = b.id" ] }, { "jdbcUrl": [ "jdbc:mysql://ip:3306/dataphin" ], "querySql": [ "select id,name from sff_id_name" ] } ] }, "column": [ { "name": "id", "type": "Long" }, { "name": "name", "type": "String" } ] }直接配置表名
{ "table": "sff_id_name1", "parameter": { "connection": [ { "table": [ "sff_id_name1","sff_id_name2" ] }, { "jdbcUrl": [ "jdbc:mysql://xxx:3306/dataphin1" ], "table": [ "sff_id_name3","sff_id_name4" ] }, { "jdbcUrl": [ "jdbc:mysql://xxx:3306/dataphin2" ], "table": [ "sff_id_name5","sff_id_name6" ] } ] }, "column": [ { "name": "id", "type": "Long" }, { "name": "name", "type": "String" } ] }
使用函數
直接使用資料庫支援的函數,比如使用MySQL的upper函數。
{
"tables":[
"sff_id_name_2"
],
"parameter":{
"where":"id>0",
"splitPk":"id"
},
"column":[
{
"name":"id",
"type":"Long"
},
{
"name":"upper(name)",
"type":"String"
}
]
}關鍵字
根據資料庫對關鍵字的處理,MySQL使用反引號(``)來標識關鍵字。例如,關鍵字為id,則可使用`id`。
{
"tables":[
"sff_id_name_2"
],
"parameter":{
"where":"id>0",
"splitPk":"id"
},
"column":[
{
"name":"`id`",
"type":"Long"
},
{
"name":"upper(name)",
"type":"String"
}
]
}