hadoop - Hadoop Hive按类别分组

标签 hadoop hive

民间,

我们对Hadoop Hive有一个要求。

基本上我们有以下格式的数据。

客户名称,产品名称,价格

Test,prod1,10
Test,prod2,30
Test,prod3,20


Test1,prod1,20
Test1,prod2,30
Test1,prod2,30


 Test2,prod1,50
 Test2,prod2,40
 Test2,prod2,10

我们需要从上面找到前2位客户[条件(他们产品总和的价格落在前2位]

例如在上面的示例中,我们需要记录Test1 sum(price)= 20 + 30 + 30 = 80
Test2总和(价格)= 50 + 40 + 10 = 100

测试客户不符合条件,因为总价为60。

基本上是前2位客户的客户及其产品列表(如果总和(价格)更高,则表明他们符合条件)

预期的输出。 (测试客户的记录不应出现)
 Test1,prod1,20
 Test1,prod2,30
 Test1,prod2,30


 Test2,prod1,50
 Test2,prod2,40
 Test2,prod2,10

如何为此编写HIVE查询。

最佳答案

我不确定您拥有的配置单元版本,但是我假设我们不能使用IN()
您将需要创建一个临时表来容纳匹配的客户。

CREATE TABLE tempp 
    AS SELECT customer, sum(price) as v 
          FROM mytable group by customer ORDER BY v DESC LIMIT 2;

该临时表将包含以下行:
Test2   100.0
Test1   80.0

然后做一个左半连接以获得匹配
SELECT a.* FROM mytable a LEFT SEMI JOIN tempp t ON (a.customer = t.customer)

根据表的输出:
Test1   prod1   20
Test1   prod2   30
Test1   prod2   30
Test2   prod1   50
Test2   prod2   40
Test2   prod2   10

关于hadoop - Hadoop Hive按类别分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23277622/

相关文章:

hadoop - Hive on Spark : Missing <spark-assembly*. jar>

java - 如何在 java 中导入 distcp 包?

hadoop - mapreduce程序未在分布式模式下产生所需的输出

apache-spark - Spark Driver 内存和 Application Master 内存

java - 在 Hadoop 中链接一个 Reduce-only 作业

sql - Hive Query 返回笛卡尔积而不是内部连接

hadoop - 用一百万次扫描运行hbase mapreduce作业有意义吗?

bash - 我有两个文件需要记录记录和该文件的校验和,并与其他文件进行比较

r - 使用 RJDBC/RHive 从 R 连接到远程 Hive 服务器

python - 使用 Python 的 Hive UDF