Hive SubQuery和Group BY

时间:2015-08-18 15:51:23

标签: group-by hive in-subquery

我有两张桌子

表1:

id
1
2
3

表2:

id date
1   x1
4   x2
1   x3
3   x4
3   x5
1   x6
3   x5
6   x6
6   x5
3   x6

我想要表2中表2中每个ID的计数。

结果

id  count
1   3
2   0
3   4

我正在使用此查询,但它给了我错误:

SELECT tab2.id, count(tab2.id)
 FROM <mytable2> tab2
 GROUP BY tab2.id
 WHERE tab2.id IN (select id from <mytable1>)
 ;

错误是:

  

在&#39; WHERE&#39;靠近&#39; di_device_id&#39;

2 个答案:

答案 0 :(得分:3)

有两个可能的问题。仅从Hive 0.13及更高版本支持WHERE子句中的子查询。如果你使用的是这样的版本,那么你的问题只是你有错误的WHERE和GROUP BY:

SELECT tab2.id, count(tab2.id)
 FROM <mytable2> tab2
 WHERE tab2.id IN (select id from <mytable1>)
 GROUP BY tab2.id
 ;

如果您使用的是旧版本的Hive,则需要使用JOIN:

SELECT tab2.id, count(tab2.id)
 FROM <mytable2> tab2 INNER JOIN <mytable1> tab1 ON (tab2.id = tab1.id)
 GROUP BY tab2.id
 ;

答案 1 :(得分:2)

你有两个问题: -

  1. Where来自group by。在SQL语法中,您使用having在分组后过滤!
  2. Hive不支持Where子句中所有类型的嵌套查询。见这里:Hive Subqueries
  3. 但是你的子查询类型就可以了。试试这个: -

    SELECT tab2.id, count(tab2.id)
     FROM <mytable2> tab2
     WHERE tab2.id IN (select id from <mytable1>)
     GROUP BY tab2.id;
    

    你的意思完全一样。

    编辑:我刚刚查看了@ MattinBit的回答。我没有打算复制答案。他的答案更完整!