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

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开源地址

相关推荐
微学AI2 分钟前
内网穿透的应用-Plex 打造随身私人影院,用cpolar告别地狱限制。
开发语言·php
JuneXcy3 分钟前
第10章 数据库的安全与保护
数据库·mysql
昨日余光24 分钟前
建议收藏!我开发了一个免费无限制的AI绘画公益站!
开发语言·前端·javascript·ai作画·typescript
ZHOUPUYU27 分钟前
我在PHP里学到的“套路”与“反套路” 设计模式与依赖注入
开发语言·php
吃不饱的得可可27 分钟前
【三方库】jsoncpp
c++·json
guodashen00727 分钟前
在安卓端启动一个服务器接口,用于接收post请求的json数据
android·服务器·json
liqianpin129 分钟前
完美解决phpstudy安装后mysql无法启动
数据库·mysql
小Tomkk31 分钟前
化繁为简:Access 与 SQL 创新指南(第四篇)
数据库·sql
马士兵教育31 分钟前
2026年IT行业基本预测!计算机专业学生就业编程语言Java/C/C++/Python该如何选择?
java·开发语言·c++·人工智能·python·面试·职场和发展
cyber_两只龙宝1 小时前
【MySQL】MySQL主从复制架构
linux·运维·数据库·mysql·云原生·架构