使用来自 SQL 行的文件名和数据创建 Blob

Create Blobs with Filename and Data from SQL Rows

关于如何使用 Azure 数据工厂将数据从 blob 读取到 SQL 的文档很多,甚至还有关于如何将查询输出转储到单个 blob 的文档。我正在尝试为 table(在 Azure SQL 服务器上)中的每一行创建一个 blob,由一个字段命名并在另一个字段中包含数据。

我的 table 有一个 GUID id 字段和一个 nvarchar(max) data 字段(其中包含 JSON,尽管这在很大程度上是无关紧要的)。假设我有以下行:

                 id                    |  data
---------------------------------------+----------
38b2f551-5f13-40ce-8512-c108a05ecd44   |  foo
4db5b25b-1194-44e9-a7b2-bc8889c32979   |  bar
2a3bd653-ce14-4bd2-9243-6923e97224c6   |  baz

我想要创建以下 blob:

https://mycontainer.blob.core.windows.net/myblobs/38b2f551-5f13-40ce-8512-c108a05ecd44
https://mycontainer.blob.core.windows.net/myblobs/4db5b25b-1194-44e9-a7b2-bc8889c32979
https://mycontainer.blob.core.windows.net/myblobs/2a3bd653-ce14-4bd2-9243-6923e97224c6

它们的内容应该是关联的数据字段,即分别为foobarbaz

Data Factory v2 - Generate a json file per row 有一个可行的答案,但它涉及查询数据库一次以获取所有 ids,然后 N 更多次以获取从每一行中获取数据。似乎应该可以对两个字段只查询一次并将一个用于文件名,一个用于内容,但我一直无法弄清楚如何。

研究案例Data Factory v2 - Generate a json file per row后,我建议您不要在您的描述中坚持复制activity.Based,您可以考虑以下解决方案:

1.Use GetMetaData Avtivity which can be used to retrieve metadata of any data in Azure Data Factory.You could get all your blob files' metadata by using this code.

2.Use ForEach Activity 循环文件名。

3.In ForEach Activity,运行 Azure Function Activity to call Http Trigger Azure Function. Pass the file name to the Azure Function as parameter. In the function method, please use azure blob storage sdk to retrieve content by the file name. Then insert the total row into sql database by API.

您可以使用 for-each activity 将 sql 查找的每一行路由到 rest api 调用,而不是直接使用副本 activity用于 blob 存储 (https://docs.microsoft.com/en-us/rest/api/storageservices/put-blob)。或者其他的写法。

这是一个非常简单的 ADF 原生功能:

  1. 使用查找 Activity 获取数据库的行结果 Table
  2. 使用 For Each 遍历 Lookup 中的每一行
  3. 在 For Each 中有一个复制数据 activity 从 DB 复制(作为真正的直通)到 Blob 存储

以下是带有注释的屏幕截图,用于说明确切的步骤并证明其有效:

1,这是我的模拟 table 与您的示例类似,我有一个假装的 FileID 和数据字段

2,我对那个 table 进行了查找,查看下面的详细信息和输出

3,我们放入 For Each activity 以便我们可以对数组中的每个项目执行一个动作或一组动作 object

4,我们进入 For each 并创建一个 Copy Data activity,Source 是 Azure SQLDB,Sink 是 Azure Blob

来源详情:

接收器详细信息:

下面是当我 运行 这个管道时我的 Blob 存储中发生的事情:

如果您还需要什么或有任何疑问,请告诉我,希望对您有所帮助!记得点赞、收藏、关注:)