历史版本2 :多个逗号分隔的字段按照分组顺序匹配 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

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

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