最新历史版本 :多個逗號分隔的欄位按照分組順序匹配 返回文檔
編輯時間: 內容長度:图片数:目录数: 修改原因:

目錄:

1. 概述编辑

1.1 應用場景

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

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

1724142761869903.png

使用兩個「欄位拆行」算子分別拆分職務分公司欄位時,出現笛卡爾積。如下圖所示:

黃色標記的欄位非實際需要資料。

11.png

1.2 實現思路

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

1724144086810578.png

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

1724144153429060.png

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

取聯動後的 col、col1 欄位即可。

14.png

1.3 任務展示

FineDataLink 中的資料處理程式,詳情參見:https://demo.finedatalink.com/ 「多個逗號分隔的欄位按照分組順序匹配」。

2. 操作步驟编辑

2.1 類比資料源

範例資料:

員工資訊表.xls

本文範例中,格式為{{主資料},{子資料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)點選資料預覽,如下圖所示:

1724136683726188.png

若使用者需要最終預覽資料中包含姓氏、名稱、尊稱、出生日期、僱用日期欄位,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 語句。

點選資料預覽,如下圖所示:

8.png

2.3 儲存資料

使用者可對資料進一步處理;本文範例,將資料儲存到資料庫表中。

拖入DB表匯出算子,將處理後的資料儲存到資料庫表中。如下圖所示:

寫入方式選擇追加寫入資料即可。

2.4 發佈任務到生產模式

使用者可點選發佈按鈕,將任務發佈到 生产模式 中。如下圖所示: