group by别名出错

group by别名出错,第1张

group by别名出错

一个普普通通的大三小白,明年即将实习。

问题:

        在集群上运行了一组sql。一个很简单的sql就是分组求和。很自然的用到了group by.
        问题就在group by后面的字段。我用的那个字段(我起了个别名,而且用的就是别名),一般来说,这组sql在mysql是可以跑的,但是到了hive就会报错。

        先来看一下这组数据。

        

        上面为数据的全部。下面博主出错的代码给大家看一下

        

        从上面的图片上,我们看到给name起了别名dd,在group by的时候用的就是这个dd。

        报错信息:非法的表别名或者列名"dd"。后面给我们提示,这个dd可能是name,sj.ftime这三者中的一个。看到这个报错信息,不由得产生疑惑,为什么在mysql中运行的好好的,在Hive里面怎么出错了?

        分析:

        原因很简单,就是hive的语句执行顺序。

        在这个sql里面,执行顺序如下

  1. from data 先找到data表
  2. group by 找到分组的字段 dd
  3. select 查找dd,sum(ftime)

        第二步错了,原因很简单,我们的这个表字段里面,就没有dd这个字段,我们真正知道dd是在select里面。他是name的别名。知道了问题所在,重新写这段sql代码

纠错:

        

当我们把dd换成原来的name字段的时候,这段程序就成功的跑了起来。

总结:

        hql属于类sql,会有一些内容与sql中的不一致,这是就需要我们去百度,去自己看这些报错信息,基本报错信息大部分是这种group by或者少了一些符号之类的。下次group by的时候不能再去使用别名。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5688017.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存