我有一个表,其中包含每个产品的数据,它们具有某些属性,比如说(现在仅限于A,B,C)。我有与每个属性对应的值。
Product Attribute Value
p1 A 1
p1 B 2
p1 C 3
p2 A 1
p3 B 3
p3 C 2
我希望我的输出为:
Product A B C
1 1 2 3
2 1 NULL NULL
3 NULL 3 2
我到目前为止所尝试的是它确实给了我最终想要的东西,但这个查询完全是一个大块,我来自R背景,我想知道他们是一个简单的解决方案或类似的东西像来自cast
的{{1}}来自
谢谢!
reshape
答案 0 :(得分:1)
我不知道Hive中的pivot
功能,但这是可能的。您需要收集地图的属性和值,这可以使用此UDAF
示例:强>
ADD JAR /root/path/to/jar/brickhouse-0.7.0.jar;
CREATE TEMPORARY FUNCTION collect AS 'brickhouse.udf.collect.CollectUDAF';
SELECT product
, attr_map['A'] AS A
, attr_map['B'] AS B
, attr_map['C'] AS C
FROM (
SELECT product
, collect(attribute, value) AS attr_map
FROM test
GROUP BY product
) x
这里需要注意的是,如果你有很多属性,这可能是相当多的重复代码。