获取Azure Data Factory或Azure Synapse Analytics中的元数据活动

适用于: Azure Data Factory Azure Synapse Analytics

可以使用“获取元数据”活动来检索 Azure Data Factory 或 Synapse 管道中任何数据的元数据。 你可以在条件表达式中使用“获取元数据”活动的输出来执行验证,也可以在后续活动中使用元数据。

使用 UI 创建 Get Metadata 活动

若要在管道中使用 Get Metadata 活动,请完成以下步骤:

  1. 在“管道活动”窗格中搜索获取元数据,并将“获取元数据”活动拖动到管道画布。

  2. 如果尚未选择,请在画布上选择新的“获取元数据”活动,然后选择其“设置”选项卡,以编辑其详细信息。

  3. 选择数据集,或者使用“新建”按钮创建一个新数据集。 然后,可以指定筛选器选项,并从数据集的可用元数据中添加列。

    显示 Get Metadata 活动的 UI。

  4. 将活动输出用作另一个活动的输入,如本示例中的 Switch 活动。 可以在其他活动支持动态内容的任何位置引用 Metadata 活动的输出。

    显示添加 Switch 活动以处理 Get Metadata 活动输出的管道。

  5. 在动态内容编辑器中,选择 Get Metadata 活动输出以在其他活动中引用它。

    显示动态内容编辑器,其中的 Get Metadata 活动的输出作为动态内容。

支持的功能

“获取元数据”活动采用数据集作为输入,并返回元数据信息作为输出。 目前支持以下连接器和相应的可检索元数据。 返回的元数据不得超过 4 MB。

受支持的连接器

文件存储

连接器/元数据 itemName
(文件/文件夹)
项目类型
(文件/文件夹)
大小
(文件)
创建
(文件/文件夹)
lastModified1
(文件/文件夹)
子项目
(文件夹)
contentMD5
(文件)
structure2
(文件)
columnCount2
(文件)
存在3
(文件/文件夹)
Amazon S3 √/√ √/√ √ x/x √/√ √ x √ √ √/√
Amazon S3 兼容存储 √/√ √/√ √ x/x √/√ √ x √ √ √/√
Google 云存储 √/√ √/√ √ x/x √/√ √ x √ √ √/√
Oracle 云存储 √/√ √/√ √ x/x √/√ √ x √ √ √/√
Azure Blob 存储 √/√ √/√ √ x/x √/√ √ √ √ √ √/√
Azure Data Lake Storage Gen2 √/√ √/√ √ x/x √/√ √ √ √ √ √/√
Azure Files √/√ √/√ √ √/√ √/√ √ x √ √ √/√
文件系统 √/√ √/√ √ √/√ √/√ √ x √ √ √/√
SFTP √/√ √/√ √ x/x √/√ √ x √ √ √/√
FTP √/√ √/√ √ x/x x/x √ x √ √ √/√

1 元数据 lastModified:

  • 对于 Amazon S3、Amazon S3 兼容存储、Google Cloud Storage 和 Oracle 云存储,lastModified 适用于 bucket 和密钥,但不适用于虚拟文件夹,而 exists 适用于 bucket 和密钥,但不适用于前缀或虚拟文件夹。
  • 对于Azure Blob 存储,lastModified适用于容器和 blob,但不适用于虚拟文件夹。

2 从二进制文件、JSON 文件或 XML 文件获取元数据时,不支持元数据 structure 和 columnCount。

3 元数据 exists:对于 Amazon S3、Amazon S3 兼容存储、Google Cloud Storage 和 Oracle 云存储,exists 适用于 bucket 和密钥,但不适用于前缀或虚拟文件夹。

请注意以下几点:

  • 对文件夹使用“获取元数据”活动时,请确保对给定文件夹具有“列出/执行”权限。

  • “获取元数据”活动不支持文件夹/文件的通配符筛选器。

  • 连接器上设置的 modifiedDatetimeStart 和 modifiedDatetimeEnd 筛选器:

    • 这两个属性用于在从文件夹中获取元数据时筛选子项。 它不适用于从文件中获取元数据的情况。
    • 使用此类筛选器时,输出中的 childItems 仅包括在指定范围内修改的文件,而不包括文件夹。
    • 为了应用此类筛选器,GetMetadata 活动会枚举指定文件夹中的所有文件,并检查修改后的时间。 即使预期的符合条件的文件数很少,也要避免指向包含大量文件的文件夹。

关系数据库

连接器/元数据 结构 列数 存在
Amazon RDS for SQL Server √ √ √
Azure SQL Database √ √ √
Azure SQL Managed Instance √ √ √
Azure Synapse Analytics √ √ √
SQL Server √ √ √

元数据选项

可以在“获取元数据”活动字段列表中指定以下元数据类型,以检索相应的信息:

元数据类型 说明
itemName 文件或文件夹的名称。
项目类型 文件或文件夹的类型。 返回的值为 File 或 Folder。
大小 文件大小,以字节为单位。 仅适用于文件。
创建 文件或文件夹的创建日期时间。
最后修改日期 文件或文件夹的上次修改日期时间。
子项目 给定文件夹中的子文件夹和文件列表。 仅适用于文件夹。 返回的值为每个子项的名称和类型列表。
contentMD5 文件的 MD5。 仅适用于文件。
结构 文件或关系数据库表的数据结构。 返回的值为列名称和列类型列表。
列数 文件或关系表中的列数。
存在 是否存在某个文件、文件夹或表。 如果在“获取元数据”字段列表中指定了 exists,那么,即使不存在该文件、文件夹或表,该活动也不会失败。 而是在输出中返回 exists: false。

提示

若要验证是否存在某个文件、文件夹或表,请在“获取元数据”活动字段列表中指定 exists。 然后可以检查活动输出中的 exists: true/false 结果。 如果未在该字段列表中指定 exists,那么,在找不到对象时,“获取元数据”活动会失败。

注意

从文件存储获取元数据以及配置 modifiedDatetimeStart 或 modifiedDatetimeEnd 时,输出中的 childItems 只包含指定路径中其最近修改时间在指定范围内的文件。 子文件夹中的项默认不包括在内。

注意

对于 Structure 字段列表要为分隔文本和Excel格式的数据集提供实际的数据结构,必须启用仅支持这些数据源的 First Row as Header 属性。

语法

获取元数据活动

{
    "name":"MyActivity",
    "type":"GetMetadata",
    "dependsOn":[

    ],
    "policy":{
        "timeout":"7.00:00:00",
        "retry":0,
        "retryIntervalInSeconds":30,
        "secureOutput":false,
        "secureInput":false
    },
    "userProperties":[

    ],
    "typeProperties":{
        "dataset":{
            "referenceName":"MyDataset",
            "type":"DatasetReference"
        },
        "fieldList":[
            "size",
            "lastModified",
            "structure"
        ],
        "storeSettings":{
            "type":"AzureBlobStorageReadSettings"
        },
        "formatSettings":{
            "type":"JsonReadSettings"
        }
    }
}

数据集

{
    "name":"MyDataset",
    "properties":{
        "linkedServiceName":{
            "referenceName":"AzureStorageLinkedService",
            "type":"LinkedServiceReference"
        },
        "annotations":[

        ],
        "type":"Json",
        "typeProperties":{
            "location":{
                "type":"AzureBlobStorageLocation",
                "fileName":"file.json",
                "folderPath":"folder",
                "container":"container"
            }
        }
    }
}

Type属性

目前,“获取元数据”活动可以返回以下类型的元数据信息:

属性 说明 必须
字段列表 所需元数据信息的类型。 有关支持的元数据的详细信息,请参阅本文的元数据选项部分。 是
数据集 引用数据集,其元数据将由“获取元数据”活动检索。 有关支持的连接器的信息,请参阅功能部分。 有关数据集语法详细信息,请参阅特定的连接器文章。 是
格式设置 使用格式类型数据集时适用。 否
storeSettings 使用格式类型数据集时适用。 否

示例输出

“获取元数据”的结果显示在活动输出中。 以下两个示例演示了大量的元数据选项。 若要在后续活动中使用这些结果,请使用以下模式:@{activity('MyGetMetadataActivity').output.itemName}。

获取文件的元数据

{
  "exists": true,
  "itemName": "test.csv",
  "itemType": "File",
  "size": 104857600,
  "lastModified": "2017-02-23T06:17:09Z",
  "created": "2017-02-23T06:17:09Z",
  "contentMD5": "cMauY+Kz5zDm3eWa9VpoyQ==",
  "structure": [
    {
        "name": "id",
        "type": "Int64"
    },
    {
        "name": "name",
        "type": "String"
    }
  ],
  "columnCount": 2
}

获取文件夹的元数据

{
  "exists": true,
  "itemName": "testFolder",
  "itemType": "Folder",
  "lastModified": "2017-02-23T06:17:09Z",
  "created": "2017-02-23T06:17:09Z",
  "childItems": [
    {
      "name": "test.avro",
      "type": "File"
    },
    {
      "name": "folder hello",
      "type": "Folder"
    }
  ]
}

了解支持的其他控制流活动: