将行集变量转换为标量值
Convert Rowset variables to scalar value
是否可以将行集变量转换为标量值,例如
@maxKnownId =
SELECT MAX(Id) AS maxID
FROM @PrevDayLog;
DECLARE @max int = @maxKnownId;
U-SQL 中没有单单元格行集到标量值的隐式转换(目前)。
您有兴趣将该值用于什么用途?
大多数情况下,您可以用不需要标量变量的方式编写 U-SQL 表达式。例如,如果你想在另一个查询的条件中使用该值,你可以在与另一个查询的连接中使用单值行集(并且使用正确的统计信息,我很确定优化器会将它变成一个广播加入)。
如果您觉得没有行集就无法轻松地将表达式写成标量,请通过 http://aka.ms/adlfeedback 提供您的场景让我们知道。
感谢您的投入,以下是业务案例-
我们有来自源的目录数据,我们需要为其生成唯一 ID。使用 ROW_NUMBER() OVER() AS Id
方法我们可以生成唯一的 id。但是在合并新记录时它也会更改现有记录的 ID 并导致关系数据出现问题
下面是简单的解决方案
//get max id from existing catalog
@maxId =
SELECT (int)MAX(Id) AS lastId
FROM @ExistingCat;
//because @maxId is not scalar, we will do CROSS JOIN so that maxId is repeated for every record.
//ROW_NUMBER() always starts from 1, we can generate next Id with maxId+ROW_NUMBER()
@newRecordsWithId =
SELECT (int)lastId + (int)ROW_NUMBER() OVER() AS Id,
CatalogItemName
FROM @newRecords CROSS JOIN @maxId;
是否可以将行集变量转换为标量值,例如
@maxKnownId =
SELECT MAX(Id) AS maxID
FROM @PrevDayLog;
DECLARE @max int = @maxKnownId;
U-SQL 中没有单单元格行集到标量值的隐式转换(目前)。
您有兴趣将该值用于什么用途?
大多数情况下,您可以用不需要标量变量的方式编写 U-SQL 表达式。例如,如果你想在另一个查询的条件中使用该值,你可以在与另一个查询的连接中使用单值行集(并且使用正确的统计信息,我很确定优化器会将它变成一个广播加入)。
如果您觉得没有行集就无法轻松地将表达式写成标量,请通过 http://aka.ms/adlfeedback 提供您的场景让我们知道。
感谢您的投入,以下是业务案例-
我们有来自源的目录数据,我们需要为其生成唯一 ID。使用 ROW_NUMBER() OVER() AS Id
方法我们可以生成唯一的 id。但是在合并新记录时它也会更改现有记录的 ID 并导致关系数据出现问题
下面是简单的解决方案
//get max id from existing catalog
@maxId =
SELECT (int)MAX(Id) AS lastId
FROM @ExistingCat;
//because @maxId is not scalar, we will do CROSS JOIN so that maxId is repeated for every record.
//ROW_NUMBER() always starts from 1, we can generate next Id with maxId+ROW_NUMBER()
@newRecordsWithId =
SELECT (int)lastId + (int)ROW_NUMBER() OVER() AS Id,
CatalogItemName
FROM @newRecords CROSS JOIN @maxId;