一零二六、sql语句报错

79 阅读1分钟

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了。。。