我正在使用U-SQL根据范围获取日期的偏移量(偏移量,开始日期和结束日期在另一组中可用)。
我尝试使用子查询,但会引发错误。
@partnerships =
EXTRACT name string,
createdon DateTime?,
address1_stateorprovince string
FROM "/Data/Partnerships"
USING Extractors.Text(skipFirstNRows : 1, silent : true, quoting : false, delimiter : '\u0001');
@timeZones =
EXTRACT Year int,
DateFrom DateTime,
DateTo DateTime,
Offset int
FROM "/Data/ESTTimeZones.csv"
USING Extractors.Text(skipFirstNRows : 1, silent : true, quoting : false, delimiter : '\u0001');
@output =
SELECT P.createdon,
Convert.ToDateTime(P.createdon).AddHours(SELECT Offset from @timeZones WHERE P.createdon >= T.DateFrom AND P.createdon <= T.DateTo) AS CreatedOn,
T.Offset AS Offset
FROM @partnerships AS P;
OUTPUT @output
TO "/Data/PartnershipwithOffset"
USING Outputters.Text(outputHeader : true, quoting : false, delimiter : '\u0001');
我有两个文件,一个是Partnerships
,其中包含createdon
日期,另一个文件是ESTTimeZones
,其中包含DateFrom
和DateTo
及其偏移量。我想在createdon
和DateFrom
之间的DateTo
日期之间找到偏移量。
然后在offset
日期添加该createdOn
,然后再次使用U-SQL将那个createdon
日期转换为datetimeoffset
,并带有特定的偏移量。
我试图查找并添加特定createdon
日期的偏移量。但是我在SELECT Offset
附近收到语法错误(因为在U-SQL中可能没有子查询)。
因此,是否有任何选项可以满足我的要求,或者可以对上述方法进行任何更改。
答案 0 :(得分:0)
您需要JOIN
行集,而不要像现在一样使用子选择。您应该始终尝试找到一种基于集合的方法,而不是对每一行应用一些逻辑。由于U-SQL仅在JOIN
中支持相等比较,因此您需要构建数据集以包含DateFrom
和DateTo
值之间的所有天数,并仅提供Date
createdon
的{{1}}值的版本:
JOIN