反馈已提交

网络繁忙

多个逗号分隔的字段按照分组顺序匹配

  • 文档创建者:Wendy123456
  • 历史版本:2
  • 最近更新:Wendy123456 于 2024-08-20
  • 1. 概述

    1.1 应用场景

    从接口取数后,数据保存格式为:{{主数据},{子数据1,子数据2}{子数据a,子数据b}};其中,子数据中包含多个字段,以逗号分割存储。如下图所示:

    1724142133497093.png

    实际业务场景中,每个子数据相当于一个分组,希望所有子数据按照分组内的数据顺序进行匹配(上图相同颜色的在同行展示)。希望得到的数据如下图所示:

    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表输入算子,取出待处理的数据。如下图所示:

    4.png

    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进行关联得到需要的结果。

    6.png

    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表输出算子,将处理后的数据保存到数据库表中。如下图所示:

    9.png

    写入方式选择追加写入数据即可。

    2.4 发布任务到生产模式

    用户可点击发布按钮,将任务发布到 生产模式 中。如下图所示:

    10.png




    附件列表


    主题: 数据开发-定时任务
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭



    AI

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持