Hadoop 如何检索配置单元中的特定行?

Hadoop 如何检索配置单元中的特定行?,hadoop,hive,hiveql,Hadoop,Hive,Hiveql,我的数据集如下所示: --------------------------- cust | cost | cat | name --------------------------- 1 | 2.5 | apple | pkLady --------------------------- 1 | 3.5 | apple | greenGr --------------------------- 1 | 1.2 | pear | yelloPear -----

我的数据集如下所示:

---------------------------
 cust | cost | cat   | name
---------------------------
  1   |  2.5 | apple | pkLady
---------------------------
  1   |  3.5 | apple | greenGr
---------------------------
  1   |  1.2 | pear  | yelloPear
----------------------------
  1   |  4.5 | pear  |  greenPear
-------------------------------

我的配置单元查询现在应该比较客户购买的每件商品的最便宜价格。现在我想把2.5和1.2放在一行,得到它的差异。由于我是新来的蜂巢,我现在不知道如何忽略一切,直到我到达下一个类别的项目,而我仍然保持最便宜的价格在前一个类别

您可以创建包含每个客户最低成本的子查询,然后将其连接到原始表:

select
    mytable.*,
    minCost.minCost,
    cost - minCost as costDifference
from mytable
inner join
    (select
       cust,
       min(cost) as minCost
    from mytable
    group by cust) minCost
on mytable.cust = minCost.cust

我使用MySQL创建了一个数据库,但它在Hive中应该可以正常工作。

您可以创建一个包含每个客户最低成本的子查询,然后将其连接到原始表:

select
    mytable.*,
    minCost.minCost,
    cost - minCost as costDifference
from mytable
inner join
    (select
       cust,
       min(cost) as minCost
    from mytable
    group by cust) minCost
on mytable.cust = minCost.cust

我使用MySQL创建了一个应用程序,但它在Hive中应该可以正常工作。

我认为这实际上是一个SQL问题,而不是Hive问题:如果您只希望每个客户的成本最低,那么您可以这样做

select cust, min(cost)
group by cust
否则,如果您希望每类客户的成本最低,您可以:

select cust, cat, min(cost)
from yourtable
groupby cust, cat

我认为这实际上是一个SQL问题,而不是一个蜂巢问题:如果您只希望每个客户的成本最低,那么您可以这样做

select cust, min(cost)
group by cust
否则,如果您希望每类客户的成本最低,您可以:

select cust, cat, min(cost)
from yourtable
groupby cust, cat

您可以像下面这样使用:

select cat,min(cost) from table group by cost; 

您可以像下面这样使用:

select cat,min(cost) from table group by cost; 
考虑到您在配置单元中的选项(或自连接),自连接是最糟糕的方法

select *
  , (cost - min(cost) over (partition by cust)) cost_diff
from table
考虑到您在配置单元中的选项(或自连接),自连接是最糟糕的方法

select *
  , (cost - min(cost) over (partition by cust)) cost_diff
from table

您能否提供一个预期产出的例子,具体来说,您所说的“如何在我到达下一类商品之前忽略所有其他商品,而我仍然保持前一类商品中最便宜的价格”是什么意思?在我阅读第一行并记住2.5之后,我想遍历这些行,直到我找到下一个类别pear(本例中为pear)并比较价格,然后从pear中记住1.2,然后再次遍历,直到我找到下一个项目并执行相同的操作。因此,您想为每个客户添加
min(成本)
列吗?
cat
列不相关,对吗?公认的答案在技术上是正确的,但在给定的备选方案中效率很低。您能否提供一个预期产出的示例,具体来说,您所说的“如何在我到达下一类商品之前忽略所有其他内容,而我仍然保持前一类商品中最便宜的价格”是什么意思?在我阅读第一行并记住2.5之后,我想遍历这些行,直到我找到下一个类别pear(本例中为pear)并比较价格,然后从pear中记住1.2,然后再次遍历,直到我找到下一个项目并执行相同的操作。因此,您想为每个客户添加
min(成本)
列吗?
cat
列不相关,对吗?公认的答案在技术上是正确的,但在给定的备选方案中效率极低。这需要2个MR作业。这需要2个MR作业。