[Spark-SQL 2.1] Excepción de la función NVL en la vista de creación como selección

ambiente:

  • Cliente Hive (versión 1.2.1)
  • Chispa versión 2.1.1.2.6.1.0-129

 Existe una tabla de prueba datadev.t_student, los campos son los siguientes

nombre_col tipo de datos comentario
identificación cadena
puntaje En t

En este punto, cuando ejecutemos el siguiente comando en Spark-SQL, se informará un error.

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

El mensaje de error es el siguiente:

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

El análisis del registro de errores aquí muestra que Spark-SQL alias gen_attr_0 para el campo id durante la ejecución, pero gen_attr_0 no se puede obtener en la función NVL, por lo que se informa un error.

Sin embargo, este SQL está bien en Hive SQL Debería ser que hay un problema con el análisis subyacente de Spark-SQL.

Solución: Reemplace la función NVL con la función COALESCE

Supongo que te gusta

Origin blog.csdn.net/qq_37771475/article/details/122044897
Recomendado
Clasificación