0

如果已在其他地方提出并回答此问题,我们深表歉意。如果是,请参考回复评论中的网址。所以情况是这样的,

我正在发出 API 请求,作为响应,我得到了 auth_token,我在复制活动中使用它作为授权来检索 JSON 格式的数据并将其接收到 Azure SQL 数据库。我能够将我在 JSON 中收到的所有元素映射到 Azure SQL 数据库的列。但是,仍然需要填充两列( UploadIdRowId )。

  • UploadId是一个 GUID,对于整批行都是相同的(我已经设法解决了这个问题)
  • RowId将是从 1 开始到该批次条目结束的序列,然后对于下一个批次(具有新的 GUID 值),它会重置回 1。

数据库看起来像这样,

| APILoadTime |      UploadId     |    RowId    |
|  2020-02-01 | 29AD7-12345-22EwQ |      1      |
|  2020-02-01 | 29AD7-12345-22EwQ |      2      |
|  2020-02-01 | 29AD7-12345-22EwQ |      3      |
|  2020-02-01 | 29AD7-12345-22EwQ |      4      |
|  2020-02-01 | 29AD7-12345-22EwQ |      5      |
--------------------------------------------------> End of Batch One / Start of Batch Two
|  2020-02-01 | 30AD7-12345-22MLK |      1      |
|  2020-02-01 | 30AD7-12345-22MLK |      2      |
|  2020-02-01 | 30AD7-12345-22MLK |      3      |
|  2020-02-01 | 30AD7-12345-22MLK |      4      |
|  2020-02-01 | 30AD7-12345-22MLK |      5      |
--------------------------------------------------> End of Batch Two and so on ... 

Azure Pipeline 的 Copy Activity 中是否有办法实现此RowId行为......或者即使在 Azure SQL 数据库中也是可能的。

抱歉,描述很长,并提前感谢您的帮助!问候

4

2 回答 2

0

非常感谢@Leon Yue 和@JeffRamos,我已经设法找出解决方案,所以在这里发布给可能遇到同样情况的其他人,

我找到的解决方案是在 Azure 数据工厂中使用存储过程,我从这里调用 Azure 数据流活动。这是我用于创建 RowId 种子函数的代码,

CREATE PROCEDURE resetRowId
AS
BEGIN
    DBCC CHECKIDENT ('myDatabase', RESEED, 0)
END
GO

一旦我有了这个存储过程,我所做的就是这样,

Azure 数据工厂管道重置 RowId

这是为你做的,我将它保留为 0 的原因是,当新数据进入时,它再次从 1 开始......

希望这对其他人也有帮助......

感谢所有以某种方式提供帮助的人

于 2020-09-08T19:23:00.810 回答
0

您需要使用窗口函数来实现这一点。ADF 数据流具有旨在执行此操作的窗口转换活动。

否则,您可以将数据加载到临时表中,然后在选择数据时使用 Azure SQL 将数据窗口化,例如...

SELECT
    APILoadTime
    ,UploadId
    ,ROW_NUMBER() OVER (PARTITION BY UploadId ORDER BY APILoadTime) AS RowId
FROM dbo.MyTable;
于 2020-09-08T18:18:01.120 回答