Hive:对指定组进行求和(HiveQL)

jos*_*hlk 8 hadoop hive hiveql hortonworks-data-platform

我有一张桌子:

key    product_code    cost
1      UK              20
1      US              10
1      EU              5
2      UK              3
2      EU              6
Run Code Online (Sandbox Code Playgroud)

我想找到每组"钥匙"的所有产品的总和,并附加到每一行.例如,对于key = 1,找到所有产品的成本总和(20 + 10 + 5 = 35),然后将结果附加到对应于key = 1的所有行.最终结果:

key    product_code    cost     total_costs
1      UK              20       35
1      US              10       35
1      EU              5        35
2      UK              3        9
2      EU              6        9
Run Code Online (Sandbox Code Playgroud)

我更愿意在不使用子连接的情况下这样做,因为这样效率很低.我最好的想法是将该over函数与sum函数结合使用,但我无法使其工作.我最好的尝试:

SELECT key, product_code, sum(costs) over(PARTITION BY key)
FROM test
GROUP BY key, product_code;
Run Code Online (Sandbox Code Playgroud)

我看了一下这些文档但有那么神秘,我不知道如何解决这个问题.我使用Hive v0.12.0,HDP v2.0.6,HortonWorks Hadoop发行版.

jos*_*hlk 10

与@VB_ answer类似,请使用该BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING 语句.

因此,HiveQL查询是:

SELECT key, product_code,
SUM(costs) OVER (PARTITION BY key ORDER BY key ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
FROM test;
Run Code Online (Sandbox Code Playgroud)