Azure 数据工厂 - 为找到的每个文件插入 Sql 行

Rob*_*man 1 azure-data-factory

我需要一个数据工厂来:

  • 检查 Azure blob 容器中的 csv 文件
  • 对于每个 csv 文件
    • 将一行插入 Azure Sql 表中,将文件名作为列值

blob 容器中只有一个 csv 文件,该文件包含五行。

到目前为止,我有以下行动:

顶层

在 for-each 操作中,我有一个复制操作。我确实给了它一个动态数据集的源,该数据集的文件名设置为 @Item().name 的参数。然而,结果有 5 行被插入到目标表中,而我原本期望只有 1 行。

for-each 循环仅执行一次,但我不知道使用保存文件名和时间戳的变量的数据源?

Tre*_*ura 6

您正朝着正确的方向前进,但在 For every 中,您只需要一个存储过程活动,它将文件名(以及您拥有的任何其他可用元数据)插入到 Azure DB 表中。

像这样: ADF 管道示例

以下是数据库中存储过程的示例:

CREATE Procedure Log.PopulateFileLog (@FileName varchar(100))

INSERT INTO Log.CvsRxFileLog
select
@FileName as FileName,
getdate() as ETL_Timestamp
Run Code Online (Sandbox Code Playgroud)

编辑: 您还可以使用 For Each 中的查找活动直接执行插入,如下所示: For Each 中的查找活动

编辑2 这将展示如何在没有 foreach 的情况下执行此操作注意:这是最具成本效益的方法,特别是在定期处理数百或数千个文件时!

1、使用具有 Azure SQLDB 源和 Blob 存储 CSV 文件接收器的复制数据活动,从查找/获取元数据活动中复制输出 Json 数组

- - - -来源: 将数据 Azure DB 复制到 Blob 的来源

- - - -下沉: 将数据 Azure DB 复制到 Blob 的 SINK

2、使用 Blob 存储 Json 文件的源和 Azure SQLDB 的接收器创建另一个复制数据活动

- - - - -来源:

将数据 Blob 复制到 Azure DB 的来源

- - - - -下沉:

将数据 Blob 复制到 Azure DB 的接收器

---------映射:

将复制数据 Blob 映射到 Azure DB

本质上,您将整个 json 输出保存到 Blob 中的文件中,然后使用 json 文件类型将该文件复制到 azure db。这样,即使您尝试从包含 500 个项目的数据集中插入数据,您也可以运行 3 个活动。

  • 旋转 Spark 集群来插入单行似乎有点过分,但它确实是可行的。您也可以在数据库中没有存储过程,只需通过查找将其作为直接插入查询执行。我将编辑答案以反映此选项。 (3认同)