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

标签 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?

最佳答案

您可以使用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

如果原始表为空,您必须小心,并添加一些额外的条件/空检查,但我会将其留给您。

关于azure - 插入新行,继续现有行集 row_number 计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52445501/

相关文章:

Azure Functions 在创建新 key 版本或 Key Vault 过期时触发

asp.net-mvc-4 - Azure WebApi 与 Azure 移动服务对比

azure - U-SQL(Azure Data Lake 语言)脚本错误

azure - 如何定义日期范围,然后在 USQL 中查询复杂的文件集?

azure - 使用 U-SQL 消除某一特定列中的重复值和空值,同时保持第二列正确对齐

c# - 从 Azure 上的存储加载 DLL

git - 特别是在 git 推送到 Microsoft Azure 时出现 HTTP 413 错误

azure - 始终使用 Keyvault 加密 SQL Azure - 导出 CMK 证书

Azure Spark SQL 与 U-SQL

azure - 是否可以使用 U-SQL 托管表作为 Azure 数据工厂中的输出数据集?