获取 Azure 数据工厂中 Blob 文件的自定义元数据

问题描述 投票:0回答:3

我的 Blob 存储中的一个文件夹中有 100 个文件。每个文件都有自定义元数据(字典类型)。因此,当遍历所有文件时,我需要获取每个文件的元数据。

那么如何阅读这些详细信息。我尝试使用 GetMetadata 功能,该功能具有一些硬编码功能,例如存在、文件名、lastedit 等。但我需要获取这些文件的自定义元数据。

请分享一些想法。

azure azure-data-factory
3个回答
1
投票

@桑迪普

我假设您希望通过获取元数据功能来获取用户定义的元数据。

不幸的是,这目前是不可能的 - 该活动仅返回预定义的元数据集。

支持的元数据列表已记录在此处

enter image description here

解决方法

我能想到的解决方法之一是利用 ADF 中的 Web Activity 并点击 REST API 获取 Blob Properties

获取 blob 属性 API 返回 blob 的所有用户定义元数据、标准 HTTP 属性和系统属性。


1
投票

您实际上可以获取相关文件的自定义元数据,但您需要跳过一些步骤。 在下面的示例中,我在特定文件上设置了一个名为

maxmodifieddate
的自定义元数据属性。 在您的
Get Metadata
活动中,转到
Settings
选项卡并选择
Add dynamic content
。输入值
userProperties
enter image description here

这将返回您的 userProperties 数组,但您的值将采用 Base64 编码: enter image description here

您可以使用

decodeBase64
函数来检索变量值,如下所示:

@decodeBase64(replace(activity('Get Metadata1').output.userProperties, 'MaxModifiedDate=', ''))

最终将输出您的元数据值(在本例中保存到名为

myvar
的变量中):

enter image description here


0
投票

Andreas 的回答很棒!稍微扩展一下: 对于

Get Metadata
活动,我们可以添加一个将出现在 json 输出中的自定义属性,称为
userProperties
。它包含所有自定义 blob 元数据的字符串,以逗号分隔。每个值都具有字符串形式的元数据名称、等号和内容的 base64 字符串,其中可以包含其他等号。

使用

foreach
活动,我们可以迭代每个自定义元数据标签:

@split(activity('metadataActivityName').output.userProperties, ',')

然后添加一个

If condition
活动来检查该项目是否与所需的标签名称匹配:

@equals(split(item(), '=')[0], 'customTag')

最后,在真实情况下,添加所需的活动,例如

Set Variable
并将管道变量设置为自定义元数据中的值。 这里重要的是不要在等号上使用 split,因为等号在 Base64 编码的字符串中是可能的!:

@decodeBase64(replace(item(),'customTag=', ''))
  • 将customTag和metadataActivityName替换为您案例中的相应值。
© www.soinside.com 2019 - 2024. All rights reserved.