一零二六、sql语句报错
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了。。。
文章来源: tuomasi.blog.csdn.net,作者:托马斯-酷涛,版权归原作者所有,如需转载,请联系作者。
原文链接:tuomasi.blog.csdn.net/article/details/126794474
- 点赞
- 收藏
- 关注作者
评论(0)