插入新行,继续现有行集row_number计数

时间:2018-09-21 14:07:37

标签: azure u-sql

我正在尝试在U-SQL中执行某种类型的upsert操作,每天从文件中提取数据,并将其与存储在Data Lake Storage表中的昨天数据进行比较。

我已经使用row_number()在DL中的表中创建了一个ID列,并且是将新行追加到旧数据集后要继续的“计数器”。例如。 DL表中最后插入的行可能如下所示:

ID | Column1    | Column2
---+------------+---------
10 | SomeValue  |    1

我希望下一行具有以下升序ID

11 | SomeValue  |   1 
12 | SomeValue  |   1 

我将如何确保接下来的X行继续递增ID计数,以使接下来的每行ID列都比最后一行增加1?

1 个答案:

答案 0 :(得分:1)

您可以使用ROW_NUMBER,然后将其添加到原始表的最大值(即,使用CROSS JOINMAX)。该技术的简单演示:

DECLARE @outputFile string = @"\output\output.csv";

@originalInput =
    SELECT *
    FROM ( VALUES
        ( 10, "SomeValue 1", 1 )
        ) AS x ( id, column1, column2 );


@newInput =
    SELECT *
    FROM ( VALUES
        ( "SomeValue 2", 2 ),
        ( "SomeValue 3", 3 )
        ) AS x ( column1, column2 );


@output =
    SELECT id, column1, column2
    FROM @originalInput

    UNION ALL

    SELECT (int)(x.id + ROW_NUMBER() OVER()) AS id, column1, column2
    FROM @newInput
            CROSS JOIN ( SELECT MAX(id) AS id FROM @originalInput ) AS x;


OUTPUT @output
TO @outputFile
USING Outputters.Csv(outputHeader:true);

我的结果:

Results

如果原始表为空,则必须小心,并添加一些其他条件/空值检查,但我将由您自己决定。