Hive 中分析查询的限制

Posted

技术标签:

【中文标题】Hive 中分析查询的限制【英文标题】:Restrictions with analytic queries in Hive 【发布时间】:2016-04-06 10:44:17 【问题描述】:

我有一个用例,我想在几个列上进行分组并在特定列上聚合到分区上,这些分区是group by 子句中列的子集。

示例场景

表架构:

(id int, category1 string, category2 string, category3 string, value int)

我要执行以下查询:

select sum(value) over (partition by category1) as c1_sum, sum(value) over (partition by category2) as c2_sum, sum(value) over (partition by category3) as c3_sum from <table_name> group by category_1, category2, category3;

但是 hive 抱怨 value 列不是 group by 子句的一部分。

在 hive 中是否有不同的方法来实现这一点?

任何建议将不胜感激。谢谢!

【问题讨论】:

【参考方案1】:

我不确定你正在尝试什么可以做到。假设 cat1 有 2 个不同的值, cat2 有 3 个,而 cat3 有 5 个。您要求 hive(或他的任何朋友)在 cat1 上返回 2 行,在 cat2 上返回 3 行,在 cat3 上返回 5 行。此外,如何将这些匹配到数据集中超出了任何逻辑恕我直言。但是为什么不使用类似的工会

Select category1 as cat, sum (value) as sumCat 
 from tblName 
group by category1 
Union 
Select category2 as cat, sum (value) as sumCat 
  from tblName 
group by category2
Union 
Select category3 as cat, sum (value) as sumCat 
  from tblName 
group by category3

【讨论】:

以上是关于Hive 中分析查询的限制的主要内容,如果未能解决你的问题,请参考以下文章

优化 Hive 查询。 java.lang.OutOfMemoryError:超出 Java 堆空间/GC 开销限制

Hive 限制中的最大动态分区

SAP学习笔记随意记

在 codeigniter 2.1 中分析缓存使用情况

【Hive】数据抽样

Spark-sql读取hive分区表限制分区过滤条件及限制分区数量