1. 概述编辑
1.1 應用場景
從API取數後,資料儲存格式為:{{主資料},{子資料1,子資料2}{子資料a,子資料b}};其中,子資料中包含多個欄位,以逗號分割儲存。如下圖所示:

實際業務場景中,每個子資料相當於一個分組,希望所有子資料按照分組內的資料順序進行匹配(上圖相同顏色的在同行展示)。希望得到的資料如下圖所示:

使用兩個「欄位拆行」算子分別拆分職務、分公司欄位時,出現笛卡爾積。如下圖所示:
黃色標記的欄位非實際需要資料。

1.2 實現思路
1)使用 SQL 語句對職務欄位根據,進行拆分,分割成多個子字串;並對每個子字串進行展開,展開的每一行中包含子字串在原先值中的位置(pos欄位)、子字串值(col欄位)、共同的其他分組標識欄位僱員ID(資料表主鍵)

2)分公司欄位拆分邏輯同職務欄位。拆分結果如下圖所示:

3)使用pos、僱員ID欄位作為聯動欄位,聯動拆分後的結果。如下圖所示:
取聯動後的 col、col1 欄位即可。

1.3 任務展示
FineDataLink 中的資料處理程式,詳情參見:https://demo.finedatalink.com/ 「多個逗號分隔的欄位按照分組順序匹配」。
2. 操作步驟编辑
2.1 類比資料源
範例資料:
本文範例中,格式為{{主資料},{子資料1,子資料2}{子資料a,子資料b}}的資料,儲存在資料庫表中。
1)建立定時任務,拖入「資料轉換」節點,進入「資料轉換」節點。
2)拖入「DB表輸入」算子,取出待處理的資料。如下圖所示:

2.2 處理資料
1)拖入「Spark SQL」算子,使用 SQL 語句對資料進行處理。如下圖所示:
with tbl_time as (SELECT posexplode(split($[DB表輸入].`職務`, ',')) AS (pos, col),$[DB表輸入].`僱員ID` FROM $[DB表輸入]),
tbl_note as (SELECT posexplode(split($[DB表輸入].`分公司`, ',')) AS (pos, col),$[DB表輸入].`僱員ID` FROM $[DB表輸入])
select tbl_time.`僱員ID`,tbl_time.col as `職務`,tbl_note.col as `分公司` from tbl_time left join tbl_note
on tbl_time.pos = tbl_note.pos and tbl_time.`僱員ID`=tbl_note.`僱員ID`
注:上述語句中,$[DB表輸入].`職務`格式的資料需要點選生成;中文欄位名稱需要用``包裹。
SQL 語句詳解:
使用 SQL 語句對職務欄位根據,進行拆分,獲取拆分後欄位、組內序號、共同標識欄位僱員ID,形成臨時表 tbl_time。
使用 SQL 語句對分公司欄位根據,進行拆分,獲取拆分後欄位、組內序號、共同標識欄位僱員ID,形成臨時表 tbl_note。
使用 SQL 將 tbl_time 和 tbl_note 表按照組內序號 pos 以及共同標識欄位僱員ID進行聯動得到需要的結果。

2)點選「資料預覽」,如下圖所示:

若使用者需要最終預覽資料中包含姓氏、名稱、尊稱、出生日期、僱用日期欄位,SQL 語句修改為:
with tbl_time as (SELECT posexplode(split($[DB表輸入].`職務`, ',')) AS (pos, col),$[DB表輸入].`僱員ID`,$[DB表輸入].`姓氏`,$[DB表輸入].`名稱`,$[DB表輸入].`尊稱`,
$[DB表輸入].`出生日期`,$[DB表輸入].`僱用日期` FROM $[DB表輸入]),
tbl_note as (SELECT posexplode(split($[DB表輸入].`分公司`, ',')) AS (pos, col),$[DB表輸入].`僱員ID` FROM $[DB表輸入])
select tbl_time.`僱員ID`,tbl_time.`姓氏`,tbl_time.`名稱`,tbl_time.`尊稱`,tbl_time.`出生日期`,tbl_time.`僱用日期`,tbl_time.col as `職務`,tbl_note.col as `分公司` from tbl_time left join tbl_note
on tbl_time.pos = tbl_note.pos and tbl_time.`僱員ID`=tbl_note.`僱員ID`
注:上述語句中,$[DB表輸入].`職務`格式的資料需要點選生成;中文欄位名稱需要用``包裹;綠色標籤的為新增展示欄位需要的 SQL 語句。
點選「資料預覽」,如下圖所示:

2.3 儲存資料
使用者可對資料進一步處理;本文範例,將資料儲存到資料庫表中。
拖入「DB表匯出」算子,將處理後的資料儲存到資料庫表中。如下圖所示:

寫入方式選擇「追加寫入資料」即可。
2.4 發佈任務到生產模式
使用者可點選「發佈」按鈕,將任務發佈到 生产模式 中。如下圖所示:


