查询 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 脚本