我有一个包含以下值的文件
matchId Id
2e0c6c42-68ac-43e0-b130-1b986f61a462 segA
2e0c6c42-68ac-43e0-b130-1b986f61a463 segB
2e0c6c42-68ac-43e0-b130-1b986f61a463 segC
2e0c6c42-68ac-43e0-b130-1b986f61a463 segA
我想要如下所示的轮播结果
matchid segA segB segC
2e0c6c42-68ac-43e0-b130-1b986f61a463 1 1 1
2e0c6c42-68ac-43e0-b130-1b986f61a462 1 0 0
这意味着SegA中存在一些id,所有段中都存在一些id(应该表示为二进制1和0)
由于段的数量可以变化,我希望使用Scala动态生成SQL语句,如下所示(它应按照段的数量向上或向下扩展,例如今天我有10段,明天它可以是5,依此类推。) 从SQL(AWS Redshift DB)的角度来看,如果我已经知道了段的数量,我可以生成以下查询,但随着段数的增加,这会变得复杂。
CREATE TABLE pivotedsegments distkey(match_id) AS (
SELECT match_id,
MAX(CASE WHEN segment='Seg1' then 1 else 0 end) Seg1,
MAX(CASE WHEN segment='Seg2' then 1 else 0 end) Seg2,
MAX(CASE WHEN segment='Seg3' then 1 else 0 end) Seg3,
MAX(CASE WHEN segment='Seg4' then 1 else 0 end) Seg4,
MAX(CASE WHEN segment='Seg5' then 1 else 0 end) Seg5,
MAX(CASE WHEN segment='Seg6' then 1 else 0 end) Seg6,
MAX(CASE WHEN segment='Seg7' then 1 else 0 end) Seg7,
MAX(CASE WHEN segment='Seg8' then 1 else 0 end) Seg8,
MAX(CASE WHEN segment='Seg9' then 1 else 0 end) Seg9,
MAX(CASE WHEN segment='Seg10' then 1 else 0 end) Seg10,
MAX(CASE WHEN segment='Seg11' then 1 else 0 end) Seg11,
.
.
.
.
From some-table group by matchid;
所以我想设计一个scala API,它可以读取这样的文件并以旋转方式转换结果。
请建议。