我知道之前已经问过这个问题但是任何答案都无法帮助我达到我想要的要求.所以在新线程中提出问题
在redshift中,如何使用每个唯一维度集将数据转换为一行的形式,例如:
id Name Category count 8660 Iced Chocolate Coffees 105 8660 Iced Chocolate Milkshakes 10 8662 Old Monk Beer 29 8663 Burger Snacks 18
至
id Name Cofees Milkshakes Beer Snacks 8660 Iced Chocolate 105 10 0 0 8662 Old Monk 0 0 29 0 8663 Burger 0 0 0 18
上面列出的类别会不断变化.
Redshift不支持pivot运算符,case表达式没有多大帮助(如果没有请建议怎么做)
如何在红移中实现此结果?
(上面只是一个例子,我们将有1000个类别,这些类别一直在变化)
解决方法
我不认为在Redshift中有一种简单的方法可以做到这一点,
你还说你有超过1000个类别,而且这个数字还在增长
您需要考虑到每张桌子有1600列的限制,
见附件链接
[http://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_usage.html][1]
您可以使用案例,但是您需要为每个类别创建案例
select id,name,sum(case when Category='Coffees' then count) as Cofees,sum(case when Category='Milkshakes' then count) as Milkshakes,sum(case when Category='Beer' then count) as Beer,sum(case when Category='Snacks' then count) as Snacks from my_table group by 1,2
你有的其他选择是将表上传到例如R,然后你可以使用cast函数.
cast(data,name~ category)
然后将数据上传回S3或Redshift