一零二六、sql语句报错

9 篇文章 0 订阅

Exception in thread "main" org.apache.spark.sql.AnalysisException: cannot resolve '`abc`' given input columns: [该订单接单时效, city_name, first_auditor_id, 客户取消数, second_auditor_role, request_id, min_distance_after_edit, updated_at,

前景报错

今天在一句sql中报错了半天,一直看不出来有什么错,sql语句如下:

select count(*),area(area_after_edit) as one from tab group by one order by one
spark.udf.register("area", (area_after_edit: Long) => {
      var res = "0"
      if (area_after_edit >= 30000000) res = "4"
      else if (area_after_edit >= 20000000) res = "3"
      else if (area_after_edit >= 10000000) res = "2"
      else if (area_after_edit >= 0) res = "1"
      res
    })
    data.createOrReplaceTempView("tab")

    val sql4: DataFrame = spark.sql("select count(*),area(area_after_edit) as one from tab group by one order by one")
    sql4.show()

左看右看感觉没毛病,但就是报错(。。。。)

报错排查

实在无奈,去排查了一下

select area_after_edit from tab

字段是没有问题的,但写成我的查询语句就出问题,我的第一感觉就是group by 和 order by 这里的问题,后来去查了查 group by 和 order by 同时使用的问题,果然不知道的冷知识又增加了,group by 不能使用别名 这里涉及到sql语句的执行顺序了:

Sql语句执行顺序

(7)    SELECT

(8)    DISTINCT <select_list>

(1)    FROM <left_table>

(3)    <join_type> JOIN <right_table>

(2)    ON <join_condition>

(4)    WHERE <where_condition>

(5)    GROUP BY <group_by_list>

(6)    HAVING <having_condition>

(9)    ORDER BY <order_by_condition>

(10)   LIMIT <limit_number>

Group by不能用别名的原因,因为执行到groupby(5)时,还没执行到select中的别名,所以别名还没生效。所以别名只能放到(7)之后,比如order中,distinct中。

问题解决

select count(*),area(area_after_edit) as one from tab group by area(area_after_edit) order by one

group by 之后依旧使用字段名,order by之后使用别名

 


 去补sql了。。。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

托马斯-酷涛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值