Hadoop 配置单元:选择“作为”和“分组依据”

Hadoop 配置单元:选择“作为”和“分组依据”,hadoop,hive,Hadoop,Hive,我有一个蜂箱查询,比如 SELECT Year, Month, Day, Hours, Minutes, cast((cast(Seconds as int)/15) as int)*15 AS secondMod, Count(*) AS PerCount FROM LoggerTable GROUP BY Year, Month, Day, Hours, Minutes, secondMod ORDER BY PerCount; 上述查询失败,并出现错误 失败:

我有一个蜂箱查询,比如

SELECT Year, Month, Day, Hours, Minutes,
           cast((cast(Seconds as int)/15) as int)*15
AS secondMod, Count(*) AS PerCount FROM LoggerTable 
 GROUP BY Year, Month, Day, Hours, Minutes, secondMod 
ORDER BY PerCount;
上述查询失败,并出现错误

失败:语义分析错误:第1行:175无效的表别名或列引用secondMod

“LoggerTable”是一个包含所有字符串类型列的配置单元表

有解决此问题的方法吗?

尝试以下方法:

SELECT Year, Month, Day, Hours, Minutes, 
cast((cast(Seconds as int)/15) as int)*15 
AS secondMod, Count(*) AS PerCount FROM LoggerTable 
 GROUP BY Year, Month, Day, Hours, Minutes, 
   cast((cast(Seconds as int)/15) as int)*15
ORDER BY PerCount;

在配置单元0.11.0及更高版本中,如果Hive.groupby.orderby.position.alias设置为true,则可以按位置指定列。 请确认以下查询是否适用于您

SET hive.groupby.orderby.position.alias=true;
SELECT Year
       ,Month
       ,Day
       ,Hours
       ,Minutes
       ,cast((cast(Seconds as int)/15) as int)*15 AS secondMod
       ,count(*) AS PerCount 
FROM LoggerTable 
GROUP BY 1, 2, 3, 4, 5, 6
ORDER BY 7;

如果您想定义一个非常复杂的SELECT并在WHERE、GROUP BY和ORDER BY中使用它,这将是一个巨大的痛苦。这里有一个解决方法,我尝试了这个,但它只对小组成员有效。当我尝试按订单排序时,查询失败。你知道为什么会这样吗?我的查询如下所示:SET hive.groupby.orderby.position.alias=true;选择设备,将与用户不同的用户计数为共享的用户。GROUP BY 1 order BY 2 desc limit 10,我收到以下错误:失败:SemanticException[错误10004]:行4:21无效的表别名或列引用“来自用户”:可能的列名为:device,users\u sharing格式抱歉。我无法确定如何在保留缩进的情况下发布查询。请确认from_用户表别名或列引用存在。可能是不同的拼写,打字错误。一种可能的解决方案是将查询分解为两部分:hive.groupby.orderby.position.alias=true;选择res.device,res.users\u sharing FROM SELECT device,COUNT DISTINCT FROM\u user AS users\u sharing FROM。每组1人,限10人;通过res.users\u共享,让我们知道您是如何解决问题的!列名称中没有输入错误。我尝试了你的建议,在子查询中将组按分隔,结果成功了!!所以有一个解决方法,但我想知道为什么初始查询不能同时处理group by和order by by。看来Hive不允许order by中的聚合功能。您可以尝试使用原始查询将ORDER BY 2替换为ORDER BY users\u共享