如何在U-SQL中使用子查询?

时间:2019-07-03 14:10:35

标签: azure dynamics-crm azure-data-lake u-sql

我正在使用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,其中包含DateFromDateTo及其偏移量。我想在createdonDateFrom之间的DateTo日期之间找到偏移量。

然后在offset日期添加该createdOn,然后再次使用U-SQL将那个createdon日期转换为datetimeoffset,并带有特定的偏移量。

我试图查找并添加特定createdon日期的偏移量。但是我在SELECT Offset附近收到语法错误(因为在U-SQL中可能没有子查询)。

因此,是否有任何选项可以满足我的要求,或者可以对上述方法进行任何更改。

1 个答案:

答案 0 :(得分:0)

您需要JOIN行集,而不要像现在一样使用子选择。您应该始终尝试找到一种基于集合的方法,而不是对每一行应用一些逻辑。由于U-SQL仅在JOIN中支持相等比较,因此您需要构建数据集以包含DateFromDateTo值之间的所有天数,并仅提供Date createdon的{​​{1}}值的版本:

JOIN