将元数据多源文件系统获取到 Azure SQL 表中
Posted
技术标签:
【中文标题】将元数据多源文件系统获取到 Azure SQL 表中【英文标题】:Get Metadata Multiple Source File System Into Azure SQL Table 【发布时间】:2022-01-23 19:43:57 【问题描述】:我有多个文件夹和文件,这些文件夹和文件来自 Azure 数据工厂上的 FileSystem(链接服务)。我的活动是链接上的引用: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 个活动可以获取 1 个文件夹上的元数据,然后将该文件夹插入到 Azure SQL 数据库中,例如
folderA/file1.txt
folderA/file2.txt
在这样的 Azure SQL 表上:
--------------------------
File_Name | Last_Modified
--------------------------
file1.txt | 2021-12-19 13:45:56
file2.txt | 2021-12-18 10:23:32
我不知道,因为我很困惑如何在 Azure SQL 表上的接收器上进行映射。之前谢谢...
【问题讨论】:
【参考方案1】:对您的问题感到困惑,您是否想从获取元数据活动中获取文件 或 文件夹的详细信息?还是要枚举/存储根文件夹的子项?
如果您只是想从获取元数据中引用项目,请添加一个动态表达式,将输出值导航到您寻找的 JSON 属性。例如:
@activity('Get Metadata Activity Name').output.lastModified
@activity('Get Metadata Activity Name').output.itemName
您可以将上述每个表达式作为值传递给您的存储过程参数。 注意:“获取元数据活动名称”应重命名为您的活动名称。
此活动的输出 JSON 与此类似,并且会根据您在“获取元数据”活动中选择返回的内容而增长。在我的示例中,我还包括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 值解析到存储过程中,然后在 SQL 中枚举 JSON 数组。
您还可以使用 ADF 并为每个文件使用 ForEach 活动枚举相同的 childItems
属性。您只需枚举:
@activity('Get Metadata Activity Name').output.childItems
然后,您可以为引用嵌套项的每个文件调用 SP:
@item().name
您仍然可以从 ForEach 活动中的原始获取元数据活动中引用任何根参数。
【讨论】:
更新:我已经解决了我的问题。我稍后会更新..谢谢你的回答以上是关于将元数据多源文件系统获取到 Azure SQL 表中的主要内容,如果未能解决你的问题,请参考以下文章
在 Azure 存储中创建文件列表并使用 ADF 将其发送到 sql 表
有没有办法使用 Easy 表在连接到 Azure App Service 的 iOS 应用程序中获取 SQL 数据库表
Azure blob 到 Azure SQL 数据库:无法批量加载,因为无法打开文件“xxxx.csv”。操作系统错误代码 5(访问被拒绝。)