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作业。