SQL,从每组中的 json 字段中提取唯一值

发布于:2024-09-17 ⋅ 阅读:(101) ⋅ 点赞:(0)

postgreySQL 库表的第 1 列是 ID,用于排序;第 2 列是分类;第 3 列类似 json(非标准 json), 并存在重复项。

id component_type component_names
1 INGESTION {ingestiona,atul, ingestiona, ingestionb}
2 INGESTION {test_s3_prerit, atul}
3 DQM {testmigration}
4 SCRIPT {scripta,scripta,scripta,testimportscript,testimportscript,b,c,c,x}
5 SCRIPT {testimportscript, scripta,scripta,a,a,b,b,c}
6 SCRIPT {Script_Python,scripta,x}
7 BUSINESS_RULES {s3_testH_Graph}
8 EXPORT {Export2}

要求:用 Java 提取每组的唯一值,并使其位于原记录的原位置;或者说,按照原分组每条记录的顺序,自上而下依次删掉重复的项,唯一值保持原位。

component_type component_names
INGESTION {ingestiona,atul,ingestionb}
INGESTION {test_s3_prerit}
DQM {testmigration}
SCRIPT {scripta,testimportscript,b,c,x}
SCRIPT {a}
SCRIPT {Script_Python}
BUSINESS_RULES {s3_testH_Graph}
EXPORT {Export2}

编写SPL代码

A 
1 =post1.query("select component_type,component_names from tb order by id")
2 =A1.run(#2=mid(#2,2,len(#2)-2).split@tc() )
3 =A2.group@u(#1).(~.run( #2=(#2[-1]|#2).id@u() ).rvs().run(#2=#2\#2[1]))
4 return A1.run(#2="{"+#2.concat@c()+"}")

A1:通过JDBC查询数据库。

A2:将每条记录的第 2 个字段拆分为多项。

A3:按第 1 列分组并保持原序,然后处理每组数据:按记录顺序累积各项,并去除重复;颠倒记录顺序;用本记录的累积结果和下条记录的累积结果求差集。

A4:恢复原字符串格式,并返回结果。

Java 集成 SPL 可参考 Java 如何调用 SPL 脚本

SPL开源地址


网站公告

今日签到

点亮在社区的每一天
去签到