SQLServerException: 没有为 'bounds' 的第 1 列指定列名

SQLServerException: No column name was specified for column 1 of 'bounds'

我正在尝试 运行 以下代码。这个想法是根据给定的 ID 列获得源 table 的下限和上限。

   %scala
    val bounds_sql = s"(select min(PersonID), max(PersonID) from dbo.persons) as bounds"
    val connectionProperties = new Properties()
    val (lower, upper) = spark.read.jdbc(jdbcString, bounds_sql, connectionProperties)
    .as[(Option[Long], Option[Long])].take(1).map { case (a, b) => (a.getOrElse(0L), b.getOrElse(0L)) }.head

然而,我得到的是:

SQLServerException: No column name was specified for column 1 of 'bounds'

而且我不太确定问题出在哪里。

我没有使用过 Scala 或 Databricks - 但我确实使用过 SQL 服务器,所以我的回答基于更通用的方法。

我认为您的问题出在声明中

(select min(PersonID), max(PersonID) from dbo.persons) as bounds

您正在创建一个名为 'bounds' 的派生(虚拟)table。但是,您还没有命名 table 的列。我有两个建议的方法。

  1. 为您的列命名,例如,
(select min(PersonID) as bounds_lower, max(PersonID) as bounds_upper from dbo.persons) as bounds

PS 小心称它们为 lower 和 upper,因为它们通常是 SQL 函数(分别转换为小写和大写)。

  1. 您需要派生的 table 吗?如果您只需要按顺序排列数据,请尝试删除 'bounds' 别名
select min(PersonID), max(PersonID) from dbo.persons