ADF管道在复制活动中添加顺序值

问题描述

很抱歉,如果已在其他地方提出并回答了此问题。如果是这样,请确实在回复评论中引用该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

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

Azure Data Factory Pipeline Reset RowId

这是为您做的,我将其保留为0的原因,以便当有新数据输入时,它又从1开始...

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...