我是使用HIVE的新手,并且在让我的一个查询正常工作时遇到了一些麻烦。下面使用的所有变量都在我们的表中定义,并且我试图隔离delivery_view表中具有uids的数据,这些uids存在于归因表中,并且具有WHERE语句中声明的限制。
我正在处理的当前错误是HIVE认为GROUP BY命令中的uid是一个函数。以前,我收到一条错误,指出在LEFT JOIN语句附近需要EOF,但是,好像已经纠正了,尽管我并不完全确定如何。
非常感谢任何帮助!
SELECT COUNT(DISTINCT attribution_view.uid)
FROM attribution_view
LEFT OUTER JOIN delivery_view ON (attribution_view.uid = delivery_view.uid)
WHERE attribution_view.conversion_agency_id = 19 AND
attribution_view.conversion_period BETWEEN '2014-06-01 12:00:00' AND '2014-06-01 13:00:00'
GROUP BY COUNT(DISTINCT attribution_view.uid)
答案 0 :(得分:2)
您无法按聚合功能进行分组。如果您只想要不同uid
的总数,请删除该子句:
SELECT COUNT(DISTINCT attribution_view.uid)
FROM attribution_view
LEFT OUTER JOIN delivery_view ON (attribution_view.uid = delivery_view.uid)
WHERE attribution_view.conversion_agency_id = 19 AND
attribution_view.conversion_period BETWEEN '2014-06-01 12:00:00' AND '2014-06-01 13:00:00';
但是,如果您只想要匹配行,则使用常规连接。我想到一个更像这样的查询:
SELECT COUNT(DISTINCT av.uid)
FROM attribution_view av INNER JOIN
delivery_view dv
ON av.uid = dv.uid
WHERE av.conversion_agency_id = 19 AND
av.conversion_period BETWEEN '2014-06-01 12:00:00' AND '2014-06-01 13:00:00';
另请注意使用表别名。这些使查询更容易编写和阅读。
编辑:
这样做你想要的吗?
select cnt, count(*), min(uid), max(uid)
from (SELECT av.uid, count(*) as cnt
FROM attribution_view av INNER JOIN
delivery_view dv
ON av.uid = dv.uid
WHERE av.conversion_agency_id = 19 AND
av.conversion_period BETWEEN '2014-06-01 12:00:00' AND '2014-06-01 13:00:00'
GROUP BY av.uid
) u
group by cnt
order by 1;