我的 Blob 存储中的一个文件夹中有 100 个文件。每个文件都有自定义元数据(字典类型)。因此,当遍历所有文件时,我需要获取每个文件的元数据。
那么如何阅读这些详细信息。我尝试使用 GetMetadata 功能,该功能具有一些硬编码功能,例如存在、文件名、lastedit 等。但我需要获取这些文件的自定义元数据。
请分享一些想法。
@桑迪普
我假设您希望通过获取元数据功能来获取用户定义的元数据。
不幸的是,这目前是不可能的 - 该活动仅返回预定义的元数据集。
支持的元数据列表已记录在此处。
解决方法
我能想到的解决方法之一是利用 ADF 中的 Web Activity 并点击 REST API 获取 Blob Properties
获取 blob 属性 API 返回 blob 的所有用户定义元数据、标准 HTTP 属性和系统属性。
您实际上可以获取相关文件的自定义元数据,但您需要跳过一些步骤。 在下面的示例中,我在特定文件上设置了一个名为
maxmodifieddate
的自定义元数据属性。
在您的 Get Metadata
活动中,转到 Settings
选项卡并选择 Add dynamic content
。输入值userProperties
:
这将返回您的 userProperties 数组,但您的值将采用 Base64 编码:
您可以使用
decodeBase64
函数来检索变量值,如下所示:
@decodeBase64(replace(activity('Get Metadata1').output.userProperties, 'MaxModifiedDate=', ''))
最终将输出您的元数据值(在本例中保存到名为
myvar
的变量中):
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=', ''))