将元数据多源文件系统导入 Azure SQL Table

Get Metadata Multiple Source File System Into Azure SQL Table

我有多个文件夹和文件,它们来自 Azure 数据工厂的文件系统(linked 服务)。我的 activity 是对 link 的引用:https://www.sqlservercentral.com/articles/working-with-get-metadata-activity-in-azure-data-factory

现在我使用每个文件的进程元数据 FileName 和 LastModified,如下所示:

然后我在 ADF 上使用存储过程,如下所示:

    ALTER PROCEDURE [dbo].[SP_FileSystemMonitoring]
    (
        -- Add the parameters for the stored procedure here
        @FLAG int,
        @FILE_NAME nvarchar(100),
        @LAST_MODIFIED datetime
    )
    AS

BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON
    
        -- Insert statements for procedure here
              IF ( @FILE_NAME IS NOT NULL )
            BEGIN
                UPDATE [dwh].[FileSystemMonitoring]
                SET    STATUS = @FLAG,
                PROCESS_DATE = DATEADD(HH, 7, Getdate()),
                REPORT_DATE = DATEADD(hh,7,(DATEADD(dd,-1,GETDATE()))),
                LAST_MODIFIED = @LAST_MODIFIED
                WHERE  FILE_NAME = @FILE_NAME

但是,我希望 1 activity 可以获取 1 个文件夹的元数据,然后将该文件夹插入到 Azure SQL 数据库中,例如

folderA/file1.txt
folderA/file2.txt

在那 Azure SQL Table 上这样:

--------------------------
File_Name | Last_Modified 
--------------------------
file1.txt | 2021-12-19 13:45:56
file2.txt | 2021-12-18 10:23:32

我不知道,因为我很困惑如何映射到 Azure SQL Table 上的那个接收器。之前谢谢...

被你的问题弄糊涂了,你是想从获取元数据activity中获取文件文件夹的详细信息吗?还是要 enumerate/store 根文件夹的子项目?

如果您只想引用“获取元数据”中的项目,请添加一个动态表达式,将输出值导航到您要查找的 JSON 属性。例如:

@activity('Get Metadata Activity Name').output.lastModified
@activity('Get Metadata Activity Name').output.itemName

您可以将上述每个表达式作为值传递给存储过程参数。 注意: 'Get Metadata Activity Name' 应重命名为您的 activity.

这个 activity 的输出 JSON 就像这样,并且会根据您在获取元数据 activity 中 select 到 return 的内容而增长。在我的示例中,我还包括 childItems.

{
    "exists": true,
    "lastModified": "2021-03-04T14:00:01Z",
    "itemName": "some-container-name",
    "itemType": "Folder",
    "childItems": [{
            "name": "someFilePrefix_1640264640062_24_12_2021_1640264640.csv",
            "type": "File"
        }, {
            "name": "someFilePrefix_1640286000083_24_12_2021_1640286000.csv",
            "type": "File"
        }
    ],
    "effectiveIntegrationRuntime": "DefaultIntegrationRuntime (Australia Southeast)",
    "executionDuration": 0,
    "durationInQueue": {
        "integrationRuntimeQueue": 0
    },
    "billingReference": {
        "activityType": "PipelineActivity",
        "billableDuration": [{
                "meterType": "AzureIR",
                "duration": 0.016666666666666666,
                "unit": "Hours"
            }
        ]
    }
}

如果你想存储子文件,那么你可以将 childItems 作为 nvarchar JSON 值解析到你的存储过程中,然后枚举 JSON 数组 SQL.

您还可以使用 ADF 对每个文件使用 ForEach activity 枚举相同的 childItems 属性。您只需枚举:

@activity('Get Metadata Activity Name').output.childItems

然后您可以为引用嵌套项的每个文件调用 SP:

@item().name

您仍然可以在 ForEach activity.

中引用原始获取元数据 activity 中的任何根参数