多個逗號分隔的欄位按照分組順序匹配

  • 文檔創建者:Wendy123456
  • 編輯次數:3
  • 最近更新:Nikozhan 于 2025-06-27
  • 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 發佈任務到生產模式

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




    附件列表


    主題: 資料開發-定時任務
    已經是第一篇
    已經是最後一篇
    • 有幫助
    • 沒幫助
    • 只是瀏覽
    • 评价文档,奖励 1 ~ 100 随机 F 豆!