拆开数据库表某列内容后转成字段

查询 BigQuery 数据库的某张表,结果的第 4 个字段是逗号分隔的字符串。

user_id

fst_name

lst_name

team_list

1111

DANNY

CRUISE

TEAM34,TEAM12,TEAM4

2222

CARLOS

SMITH

TEAM34,TEAM44,TEAM12

33333

SASHA

CONOR

TEAM5,TEAM34,TEAM44

用 Java 实现:保留前 3 个字段,把第 4 个字段的所有内容拆分去重,作为第 4-N 个字段名,内容填 0/1 表示本行原来是否包含该值。结果存为 csv 文件。

user_id,fst_name,lst_name,TEAM34,TEAM12,TEAM4,TEAM44,TEAM5

1111,DANNY,CRUISE,1,1,1,0,0

2222,CARLOS,SMITH,1,1,0,1,0

33333,SASHA,CONOR,1,0,0,1,1

编写SPL代码:


A

1

=bigqry1.query("select user_id,fst_name,lst_name,team_list from data where p=1")

2

=A1.news(team_list.split@c();user_id,fst_name,lst_name,~)

3

=A2.pivot@s(#1,#2,#3; #4,if(#4,1,0))

4

=T("d:/result.csv":A3)

A1:通过 JDBC 查询数据库。

A2:将第 4 列拆成多项,每项生成一条记录,~ 表示当前项。

A3:行转列,其中前 3 列保留,第 4 列的内容转为新字段名,如果包含第 4 列则新内容填 1,否则填 0。

A4:将计算结果写入 csv。

Java 集成 SPL 可参考 Java 如何调用 SPL 脚本
问题来源:https://stackoverflow.com/questions/74645043/how-do-i-write-csv-file-with-dynamic-headers-in-apache-beam-java