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 的列。我有两个建议的方法。
- 为您的列命名,例如,
(select min(PersonID) as bounds_lower, max(PersonID) as bounds_upper from dbo.persons) as bounds
PS 小心称它们为 lower 和 upper,因为它们通常是 SQL 函数(分别转换为小写和大写)。
- 您需要派生的 table 吗?如果您只需要按顺序排列数据,请尝试删除 'bounds' 别名
select min(PersonID), max(PersonID) from dbo.persons
我正在尝试 运行 以下代码。这个想法是根据给定的 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 的列。我有两个建议的方法。
- 为您的列命名,例如,
(select min(PersonID) as bounds_lower, max(PersonID) as bounds_upper from dbo.persons) as bounds
PS 小心称它们为 lower 和 upper,因为它们通常是 SQL 函数(分别转换为小写和大写)。
- 您需要派生的 table 吗?如果您只需要按顺序排列数据,请尝试删除 'bounds' 别名
select min(PersonID), max(PersonID) from dbo.persons