问题描述
很抱歉,如果已在其他地方提出并回答了此问题。如果是这样,请确实在回复评论中引用该URL。这就是这种情况,
我正在发出一个API请求,作为响应,我得到 auth_token ,我将其用于“授权复制活动”中以JSON格式检索数据并将其接收到Azure sql数据库。我能够将我在JSON中收到的所有元素映射到Azure sql数据库的列。但是,仍然需要填充两列( UploadId 和 RowId )。
- UploadId 是一个GUID,在整个批次行中都是相同的(我已经设法解决了这个问题)
- RowId 将是一个序列,从1开始到该批次条目的末尾,然后对于下一个批次(具有新的GUID值),它将重置为1。 / li>
数据库将如下所示,
| 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的“复制活动”中是否有一种方法可以实现这种 RowId 行为……甚至在Azure sql数据库中也可以实现。
道歉,不胜枚举,在此先感谢您的帮助! 问候
解决方法
您需要使用窗口函数来实现此目的。 ADF数据流具有Window Transformation activities,专门用于执行此操作。
否则,您可以将数据加载到临时表中,然后像选择...一样use Azure SQL to window the data,将其加载...
SELECT
APILoadTime,UploadId,ROW_NUMBER() OVER (PARTITION BY UploadId ORDER BY APILoadTime) AS RowId
FROM dbo.MyTable;
,
非常感谢@Leon Yue和@JeffRamos,我设法弄清楚了解决方案,因此将其发布给可能遇到相同情况的其他所有人,
我找到的解决方案是在Azure数据工厂中使用存储过程,我将其称为Azure数据流活动。这是我用来创建RowId种子函数的代码,
CREATE PROCEDURE resetRowId
AS
BEGIN
DBCC CHECKIDENT ('myDatabase',RESEED,0)
END
GO
一旦有了这个存储过程,我所做的就是这样,
这是为您做的,我将其保留为0的原因,以便当有新数据输入时,它又从1开始...
希望这对其他人也有帮助...
感谢所有以某种方式提供帮助的人