基于 Databricks Spark SQL 子查询的查询抛出 TreeNodeException

Posted

技术标签:

【中文标题】基于 Databricks Spark SQL 子查询的查询抛出 TreeNodeException【英文标题】:Databricks Spark SQL subquery based query throws TreeNodeException 【发布时间】:2020-07-29 10:37:14 【问题描述】:

我在 databricks 笔记本中运行一个非常简单的查询,其中涉及一个子查询。

select recorddate, count(*) 
from( select record_date as recorddate, column1 
      from table1 
      where record_date >= date_sub(current_date(), 1) 
    )t
group by recorddate
order by recorddate

我得到以下异常: SQL 语句错误:package.TreeNodeException:绑定属性,树:recorddate

当删除 order by 子句时,查询运行良好。我看到一些帖子谈论类似的问题,但完全相同。这是一种已知的行为吗?有什么解决方法/解决方法吗?

【问题讨论】:

在子查询中我看到别名列,record_date as date 这是一个用存根替换实际表名和列名的错字。现在修好了。 你可以试试不给列加别名吗? 【参考方案1】:

对我来说效果很好,(spark = 2.4.5)我认为问题有所不同-

 val df = spark.sql("select current_date() as record_date, '1' column1")
    df.show(false)
    /**
      * +-----------+-------+
      * |record_date|column1|
      * +-----------+-------+
      * |2020-07-29 |1      |
      * +-----------+-------+
      */
    
    df.createOrReplaceTempView("table1")
    spark.sql(
      """
        |select recorddate, count(*)
        |from( select record_date as recorddate, column1
        |      from table1
        |      where record_date >= date_sub(current_date(), 1)
        |    )t
        |group by recorddate
        |order by recorddate
        |
      """.stripMargin)
      .show(false)

    /**
      * +----------+--------+
      * |recorddate|count(1)|
      * +----------+--------+
      * |2020-07-29|1       |
      * +----------+--------+
      */

【讨论】:

我在 databricks 笔记本中使用直接 SQL 查询执行此操作。唔。这可能是数据块的特定问题。不确定。

以上是关于基于 Databricks Spark SQL 子查询的查询抛出 TreeNodeException的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spark sql 在 Databricks 中使用内部联接更新 Databricks Delta 表

在 Spark DataBricks 上创建表模式

spark sql如何在databricks中创建表

如果 Databricks 或 Spark SQL 中存在表,则插入

如何在 Spark Databricks 中注册 SQL 函数

Databricks/Spark SQL 中的反透视表