Azure 数据工厂获取元数据以获取 blob 文件名并将它们传输到 Azure SQL 数据库 table

Azure Data Factory Get Metadata to get blob filenames and transfer them to Azure SQL database table

我正在尝试使用 Azure 数据工厂中的获取元数据 activity 来获取 blob 文件名并将它们复制到 Azure SQL 数据库 table。 我遵循本教程:https://www.mssqltips.com/sqlservertip/6246/azure-data-factory-get-metadata-example/

这是我的管道,Copy Data > Source 是我的 Blob 存储中 Blob 文件的源目的地。我需要将我的源文件指定为二进制文件,因为它们是 *.jpeg 文件。

对于我的复制数据 > 接收器,它是 Azure SQL 数据库,我启用了选项“自动创建 table”

在我的 Sink 数据集配置中,我必须选择一个 table,因为如果我不 select 我的 SQL 中的 table,验证将不会通过] 数据库,尽管这个 table 与我想要获取的 blob 文件名完全无关。

问题 1:我是否应该先在 SQL 数据库中创建一个新的 table 以使列与我要提取的 blob 文件名相匹配?

然后,我尝试验证管道,但出现此错误。

Copy_Data_1
Sink must be binary when source is binary dataset.

问题2:如何解决这个错误?我必须 select 源文件类型为二进制,因为这是创建源数据集时的步骤之一。因此,当我选择 Azure SQL table 的接收器数据集时,我不必 select 数据集的类型,因此它似乎不匹配。

非常感谢您。

新管道的新屏幕截图,我现在可以在 json 输出文件中获取文件名的 itemName。

现在我在 Get_File_Name2 activity 之后添加复制数据 activity 并将它们连接在一起以尝试将 json 输出文件作为源数据集。

但是,在将类型指定为 json 之前,我需要先选择源数据集位置。但是,据我了解,这些输出 json 文件是 Get_File_Name2 activity 的输出,它们尚未存储在 Blob 存储中。如何制作复制数据 activity 读取这些 json 输出文件作为源数据集?

2020 年 10 月 14 日更新 这是我的新 activity 存储过程,我按照建议添加了参数,但是我将名称更改为 JsonData,因为我的存储过程需要此参数。

这是我的存储过程。

我在存储过程中遇到此错误:

{
    "errorCode": "2402",
    "message": "Execution fail against sql server. Sql error number: 13609. Error Message: JSON text is not properly formatted. Unexpected character 'S' is found at position 0.",
    "failureType": "UserError",
    "target": "Stored procedure1",
    "details": []
}

但是当我检查输入时,它似乎已经成功读取了 json 字符串 itemName.

但是,当我检查输出时,它不在那里。

实际上,您可以使用获取元数据输出json作为参数,然后调用存储过程:Get metedata-->Stored Procedure!

你只需要专注于存储过程的编码。

获取元数据输出childitems:

{
   "childItems": [
        {
            "name": "DeploymentFiles.zip",
            "type": "File"
        },
        {
            "name": "geodatalake.pdf",
            "type": "File"
        },
        {
            "name": "test2.xlsx",
            "type": "File"
        },
        {
            "name": "word.csv",
            "type": "File"
        }
}

存储过程:

@activity('Get Metadata1').output.childitems

关于如何创建存储过程(从json对象获取数据),你可以参考这篇博客:Retrieve JSON Data from SQL Server using a Stored Procedure.