如何在 Azure 数据工厂中为与外键相关的表创建管道并执行复制 activity?

How to create a pipeline and perform copy activity in Azure data factory for the tables related to foreign keys?

我是 Azure 数据工厂的新手,希望将 CSV 数据复制到我的具有外键关系的 table 中。
这是我的 tables:

客户table

CREATE TABLE [dbo].[Customer]
(
    [Id] UNIQUEIDENTIFIER NOT NULL PRIMARY KEY, -- Primary Key column
    [CustomerNumber] NVARCHAR(50) NOT NULL,
    [FirstName] NVARCHAR(50) NOT NULL,
    [LastName] NVARCHAR(50) NOT NULL,
    [CreatedOn] datetime,
    [CreatedBy] NVARCHAR(255),
    [ModifiedOn] datetime,
    [ModifiedBy] NVARCHAR(255)
);
GO

-- Insert rows into table 'Customer' in schema '[dbo]'
INSERT INTO [dbo].[Customer]
VALUES
( 
 NEWID(),'Tom123', 'Tom', 'Shehu',GETDATE(),'test',GETDATE(),'admin'
),
( 
 NEWID(),'Harol234', 'Harold', 'Haoxa',GETDATE(),'test',GETDATE(),'admin'
),
( 
 NEWID(),'Peter345', 'Peter', 'Begu',GETDATE(),'test',GETDATE(),'admin'
),
( 
 NEWID(),'Marlin09', 'Marlin', 'Hysi',GETDATE(),'test',GETDATE(),'admin'
)

GO

产品Table

CREATE TABLE [dbo].[Product]
(
    [Id] UNIQUEIDENTIFIER NOT NULL PRIMARY KEY, -- Primary Key column
    [Name] NVARCHAR(50) NOT NULL,
    [ErpNumber] NVARCHAR(50) NOT NULL,
    [Description] NVARCHAR(50) NOT NULL,
    [CreatedOn] datetime,
    [CreatedBy] NVARCHAR(255),
    [ModifiedOn] datetime,
    [ModifiedBy] NVARCHAR(255)
);
GO

-- Insert rows into table 'Product' in schema '[dbo]'
INSERT INTO [dbo].[Product]
VALUES
( 
 NEWID(), 'EI500CMZ', 'EI500CMZ','7-Day test product',GETDATE(),'Tom',GETDATE(),'Tom'
),
( 
 NEWID(), 'ST0SMX', 'ST0SMX','7-Day heavy duty product',GETDATE(),'Tom',GETDATE(),'Tom'
),
( 
 NEWID(), 'EH30MZ', 'EH30MZ','Electronic water test product',GETDATE(),'Tom',GETDATE(),'Tom'
)

CustomerProduct table

CREATE TABLE [dbo].[CustomerProduct]
(
    [Id] UNIQUEIDENTIFIER NOT NULL PRIMARY KEY, -- Primary Key column
    [CustomerId] UNIQUEIDENTIFIER NOT NULL,
    [ProductId] UNIQUEIDENTIFIER NOT NULL,
    [Name] NVARCHAR(255) NOT NULL,
    [CreatedOn] datetime,
    FOREIGN KEY(CustomerId) REFERENCES Customer(Id),
    FOREIGN KEY(ProductId) REFERENCES Product(Id)

);
GO

下面是我的CSV文件数据:
客户编号、ErpNumber、名称
Tom123,EI500CMZ,EI500CMZ2340
Harol234、ST0SMX、ST0SMX74770
Peter345,EH30MZ,EH30MZ00234

现在我想将数据插入我的第 3 个 table,即 CustomerProduct,但我不明白如何插入“CustomerId”、“ProductId”和“Name”。 在上面的 CSV 数据中,我得到了“CustomerNumber”和“ErpNumber”,但是在插入期间“CustomerId”和“ProductId”应该进入 table.

不明白该怎么做。

到目前为止,我已在 Azure 数据工厂中完成了此操作:

  1. 创建了一个 blob 存储帐户。在 blob 存储中添加了一个容器并上传了我的 CSV 文件。

  2. 创建了一个名为“CustomerProductInputService”的 Azure blob 存储类型的链接服务,它将与 blob 存储通信

  3. 创建了名为“CustomerProductOutputService”的 Azure SQL 数据库类型的链接服务,该服务将与“CustomerProduct”table.

    通信
  4. 创建了 azure blob 类型的数据集。这将从“CustomerProductInputService”接收数据。

  5. 创建了 azure SQL 数据库类型的数据集。

现在我卡在复制 activity 了。我不明白如何为这种情况创建管道并将数据插入 CustomerProduct table。 正如我所解释的,我在 CSV 文件中得到“CustomerNumber”和“ErpNumber”,但我想将“CustomerId”和“ProductId”插入到我的“CustomerProduct”table。

有人可以帮我吗?

首先,您需要确定客户与产品之间的关键联系。接下来,从数据工厂创建管道并创建 2 个源“Product”和“Customer”应用 ADF 转换 Join 和 Alter 并将其下沉到 dbo.CustomerProduct。

您可以使用 dataflow activity 使用 lookup table 从 CSV 插入 CustomerProduct 数据 [= =134=]transformations 分别从 Customer 和 Product table 获取 CustomerIDProductID

来源:

  1. 在数据流中添加 3 个源转换,1 个用于 CSV 源文件,1 个用于客户 table,1 个用于产品 table.

a) Source1 (CSV):创建并CSV数据集到source1以获取输入文件数据。

b) Source2 (CustomerTable):连接到Customer table并获取所有现有的来自客户的数据 table.

• 由于我们只需要来自客户 table 的 ID 和 CustomerNumber 列,因此在 source2 到 [=232= 之后添加 select 转换(客户) ] 只有所需的列列表。

c) Source3 (ProductTable): 将 Source3 连接到 Product Table 以从 dbo.Product 中提取所有现有数据。

• 在 Source3 之后添加 Select 转换(产品)以仅从列列表中获取所需的列 ID 和 ERPNumber

  1. Lookup 转换添加到 Source1 (CSV),使用 主要流作为 CSV 源和 查找流作为客户(Source2 Select 转换)和查找条件作为 CSV 列 “CustomerNumber”等于 (==) Customer table 列“CustomerNumber”.

  1. 因为 Lookup 就像这里的左联接,它包括 select 列表中来自 Source1 的所有列和来自 Source2 的查找列(包括重复列)。

a) 因此,使用 select 转换 (CustomerSelectList) 到 select 只有输出中所需的列。还将从 Customer table 中提取的列名称“ID”重命名为 CustomerID 以匹配 Sink table.

  1. 在 Select (CustomerSelectList) 之后添加另一个 Lookup 转换以从 Product table 获取数据。

a) Select 主要流作为客户Select列表(Select转换)和查找流作为产品(Source3 的Select)

b) 查找条件为 CSV 源列“ErpNumber”等于 (==) 产品 table 列“ErpNumber”.

  1. 同样,使用 select 转换忽略其他列,select 仅需要 select 列表中的列。同时将列“ID”从 Product table 重命名为 ProductID.

  1. Derived Column 转换添加到 select (CustomerProductSelectList) 以添加新列 ID 和 CreatedOn.

a) ID:由于这是接收器 table 中的 UNIQUEIDENTIFIER,我们可以添加一个表达式来生成在派生列中使用 UUID() 的 ID。

b) CreatedOn: 添加表达式以获取 **Current timestamp** 到 Sink table.

  1. 最后添加 Sink 转换以将数据插入 CustomerProduct table.

  1. 将此数据流添加到管道和 运行 管道以插入数据。

输出: