[Spark-SQL 2.1] create view as select中NVL函数异常

环境:

  • Hive client (version 1.2.1)
  • Spark version 2.1.1.2.6.1.0-129

 现有一测试表datadev.t_student,字段如下

col_namedata_typecomment
idstring
scoreint

此时,我们在Spark-SQL中执行以下命令,会报错。

create view datadev.t_student_view as select NVL(id, 'xx') as id from datadev.t_student;

错误信息如下:

21/12/20 16:57:44 ERROR SparkSQLDriver: Failed in [create view datadev.t_student_view as select NVL(id, 'xx') as id from datadev.t_student]
java.lang.RuntimeException: Failed to analyze the canonicalized SQL: SELECT `gen_attr_0` AS `id` FROM (SELECT nvl(t_student.`id`, 'xx') AS `gen_attr_0` FROM (SELECT `id` AS `gen_attr_1`, `score` AS `gen_attr_2` FROM `datadev`.`t_student`) AS gen_subquery_0) AS gen_subquery_1
Caused by: org.apache.spark.sql.AnalysisException: cannot resolve '`t_student.id`' given input columns: [gen_attr_1, gen_attr_2]; line 1 pos 45;
'Project ['gen_attr_0 AS id#31]
+- 'SubqueryAlias gen_subquery_1
   +- 'Project ['nvl('t_student.id, xx) AS gen_attr_0#30]
      +- SubqueryAlias gen_subquery_0
         +- Project [id#32 AS gen_attr_1#28, score#33 AS gen_attr_2#29]
            +- MetastoreRelation datadev, t_student

这里分析错误日志可知,Spark-SQL 在执行的时候给id字段取了别名gen_attr_0,但是在NVL函数里面却无法取到gen_attr_0,因此报错。

但是此SQL在Hive SQL中没问题,应该是Spark-SQL底层解析出了问题。

解决办法:将NVL函数换成COALESCE函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值