如何使用特定分区的hive数据进行分组?

时间:2013-10-30 09:18:45

标签: hive hiveql hadoop-partitioning

我有以下内容:

hive>show partitions TABLENAME                                                           
pt=2012.07.28.08                                                                         
pt=2012.07.28.09                                                                         
pt=2012.07.28.10                                                                         
pt=2012.07.28.11                                                                         
hive> select pt,count(*) from TABLENAME group by pt;                                     
OK    

为什么group by无法获取数据?

3 个答案:

答案 0 :(得分:2)

检查hive.mapred.mode是否设置为"strict",如果是,则不允许所有分区扫描提交的查询。您可以将其设置为非严格,如下所示:

hive>set hive.mapred.mode=nonstrict;

我不确定这是否会导致您的查询产生任何结果,而是试图解决它。分享结果。

注意:您可以在hive-default.xml

中查看此参数的默认值

答案 1 :(得分:1)

您总是可以使用2个select语句来实现相同的目标。对于前

Create table table1(
session_id string,
page_id string
)
partitioned by (metrics_date string);

考虑我们已经加载了2个分区的表

  

hive>显示分区表1   metrics_date = 2012.07.28.08
  metrics_date = 2012.07.28.09

select * from table1 ;

1212121212    google.com     2012.07.28.08 

1212121212    google.com     2012.07.28.09`
获取每个分区的行数
select metrics_date,count(*) from (
select * from table1 ) temp
group by metrics_date;  

答案 2 :(得分:0)

要获得整个结果以及分组依据,您可以使用以下查询。

SELECT pt,count(*) OVER (PARTITION BY pt) FROM TABLENAME;

这可以通过分区来实现。