插入新行,继续现有行集 row_number 计数
Insert new rows, continue existing rowset row_number count
我正在尝试在 U-SQL 中执行某种更新插入操作,我每天从文件中提取数据,并将其与存储在 table 中的昨天数据进行比较在数据湖存储中。
我使用 row_number() 在 DL 中的 table 中创建了一个 ID 列,这是 "counter" 我希望在将新行附加到旧数据集时继续.例如。
DL table 中最后插入的行可能如下所示:
ID | Column1 | Column2
---+------------+---------
10 | SomeValue | 1
我希望接下来的行具有以下升序 ID
11 | SomeValue | 1
12 | SomeValue | 1
我将如何确保接下来的 X 行递增地继续 ID 计数,以便接下来的每一行都将 ID 列比最后一行增加 1?
您可以使用 ROW_NUMBER
然后将其添加到原始 table 的最大值(即使用 CROSS JOIN
和 MAX
)。该技术的简单演示:
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);
我的结果:
如果原来的 table 是空的,你必须小心并添加一些额外的条件/空检查,但我会把它留给你。
我正在尝试在 U-SQL 中执行某种更新插入操作,我每天从文件中提取数据,并将其与存储在 table 中的昨天数据进行比较在数据湖存储中。
我使用 row_number() 在 DL 中的 table 中创建了一个 ID 列,这是 "counter" 我希望在将新行附加到旧数据集时继续.例如。 DL table 中最后插入的行可能如下所示:
ID | Column1 | Column2
---+------------+---------
10 | SomeValue | 1
我希望接下来的行具有以下升序 ID
11 | SomeValue | 1
12 | SomeValue | 1
我将如何确保接下来的 X 行递增地继续 ID 计数,以便接下来的每一行都将 ID 列比最后一行增加 1?
您可以使用 ROW_NUMBER
然后将其添加到原始 table 的最大值(即使用 CROSS JOIN
和 MAX
)。该技术的简单演示:
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);
我的结果:
如果原来的 table 是空的,你必须小心并添加一些额外的条件/空检查,但我会把它留给你。