HIVE JOIN查询错误

时间:2014-07-03 21:19:45

标签: sql join hive

我是使用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)

1 个答案:

答案 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;