将元数据多源文件系统导入 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 中的任何根参数
我有多个文件夹和文件,它们来自 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 中的任何根参数