红移数据库数据透视表
我知道这个问题之前已经被问过了,但是任何答案都无法帮助我满足我期望的要求。所以问这个问题在新线程红移数据库数据透视表
在红移如何使用透视数据到每个每一个独特的维度组一行的形式,例如:
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不支持数据透视运算符和一个case
表达式将不会有太大的帮助(如果不是请建议如何做)
我怎样才能达到这个红移的结果?
(以上只是一个例子,我们将有超过1000个类别和这些类别保持对不断变化的)
我不认为这是一个简单的方法来做到这一点的红移,
也你说你有更多的则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的局限性 – ankitkhanduri
如果你通常会想查询从数据透视表中类别的特定子集,基于评论链接的方法解决方法可能会奏效。
可以填充你的“pivot_table”从原来像这样:
insert into pivot_table (id, Name, json_cats) (
select id, Name,
'{' || listagg(quote_ident(Category) || ':' || count, ',')
within group (order by Category) || '}' as json_cats
from to_pivot
group by id, Name
)
,并获得具体的类别是这样的:
select id, Name,
nvl(json_extract_path_text(json_cats, 'Snacks')::int, 0) Snacks,
nvl(json_extract_path_text(json_cats, 'Beer')::int, 0) Beer
from pivot_table
使用varchar(max)
的JSON列类型将给65535个字节应该有几千个类别的空间。
感谢帮助systemjack, ,但我认为即使提取一个json我需要手动写入类别名称,然后提取,因为菜单保存和更改以及类别随时间而变化,所以必须手动编辑pivot_table查询以提取更新的类别 以及还有其他餐馆正在添加时,count列wuld增加查询必须被编辑为 – ankitkhanduri
类别的变化,也正如上面指出的答案红移限制一列到1600单个表 因此,我想我正在尝试使用红移wu ld不可行 如果wrng plz建议如何去做 – ankitkhanduri
你不能用这种方法做'select *',所以这是一个限制,可能会使其对某些人不可行。你必须知道并指定类别。它没有1600列问题,因为它只将所有内容存储在3列中。类别数据全部被打包成一个恰好是JSON格式的单个字符串。 – systemjack
看看这个解决方法。不理想,但确实允许任意数量的类别。 HTTP://计算器。com/questions/42684179/aws-redshift-pivot-table-all-dimensions/42687221#42687221 – systemjack