Hive 子查询和 Group BY
Hive SubQuery and Group BY
我有两个table
table1:
id
1
2
3
table 2:
id date
1 x1
4 x2
1 x3
3 x4
3 x5
1 x6
3 x5
6 x6
6 x5
3 x6
我想要 table 2 中存在于 table 1 中的每个 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>)
;
错误是:
missing EOF at 'WHERE' near 'di_device_id'
有两个可能的问题。 WHERE 子句中的子查询仅在 Hive 0.13 及更高版本中受支持。如果您使用的是这样的版本,那么您的问题就是 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
;
你有两个问题:-
Where
在分组依据之前。在 SQL 语法中,您使用 having
在分组依据后进行过滤!
- Hive 不支持 Where 子句中的所有类型的嵌套查询。看这里:Hive Subqueries
但是你的子查询类型是可以的。试试这个:-
SELECT tab2.id, count(tab2.id)
FROM <mytable2> tab2
WHERE tab2.id IN (select id from <mytable1>)
GROUP BY tab2.id;
它会按照您的意思做完全相同的事情。
编辑:我刚刚检查了@MattinBit 的回答。我无意重复答案。他的回答更完整!
我有两个table
table1:
id
1
2
3
table 2:
id date
1 x1
4 x2
1 x3
3 x4
3 x5
1 x6
3 x5
6 x6
6 x5
3 x6
我想要 table 2 中存在于 table 1 中的每个 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>)
;
错误是:
missing EOF at 'WHERE' near 'di_device_id'
有两个可能的问题。 WHERE 子句中的子查询仅在 Hive 0.13 及更高版本中受支持。如果您使用的是这样的版本,那么您的问题就是 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
;
你有两个问题:-
Where
在分组依据之前。在 SQL 语法中,您使用having
在分组依据后进行过滤!- Hive 不支持 Where 子句中的所有类型的嵌套查询。看这里:Hive Subqueries
但是你的子查询类型是可以的。试试这个:-
SELECT tab2.id, count(tab2.id)
FROM <mytable2> tab2
WHERE tab2.id IN (select id from <mytable1>)
GROUP BY tab2.id;
它会按照您的意思做完全相同的事情。
编辑:我刚刚检查了@MattinBit 的回答。我无意重复答案。他的回答更完整!