Azure 数据工厂和 Synapse Analytics 中的 Common Data Model 格式

适用于: Azure 数据工厂 Azure Synapse Analytics

提示

试用 Microsoft Fabric 中的数据工厂,这是一种适用于企业的一站式分析解决方案。 Microsoft Fabric 涵盖从数据移动到数据科学、实时分析、商业智能和报告的所有内容。 了解如何免费开始新的试用版

Common Data Model (CDM) 元数据系统可以轻松地在应用程序和业务流程之间共享数据及其含义。 若要了解详细信息,请参阅 Common Data Model 概述。

在 Azure 数据工厂和 Synapse 管道中,用户可以使用映射数据流,转换以 model.json 和清单格式存储在 Azure Data Lake Store Gen2 (ADLS Gen2) 中的 CDM 实体数据。 还可以使用 CDM 实体引用接收 CDM 格式数据,这些引用会以 CSV 或 Parquet 格式将数据保存在分区文件夹中。

映射数据流属性

Common Data Model 作为映射数据流中的内联数据集提供,同时用作源和接收器。

注意

在编写 CDM 实体时,必须有一个已定义的现有 CDM 实体定义(元数据架构)作为参考。 数据流接收器将读取该 CDM 实体文件,并将架构导入到接收器中进行字段映射。

源属性

下表列出了 CDM 源支持的属性。 你可以在“源选项”选项卡中编辑这些属性。

名称 说明 必需 允许的值 数据流脚本属性
格式 格式必须为 cdm cdm format
元数据格式 对数据的实体引用所在的位置。 如果使用的是 CDM 版本 1.0,请选择清单。 如果使用的是 1.0 之前的 CDM 版本,请选择 model.json。 'manifest''model' manifestType
根位置:容器 CDM 文件夹的容器名称 字符串 fileSystem
根位置:文件夹路径 CDM 文件夹的根文件夹位置 字符串 folderPath
清单文件:实体路径 根文件夹中实体的文件夹路径 字符串 entityPath
清单文件:清单名称 清单文件名称。 默认值为“default” 字符串 manifestName
按上次修改时间筛选 选择根据上次更改时间筛选文件 时间戳 modifiedAfter
modifiedBefore
架构链接服务 语料库所在的链接服务 是(如果使用清单) 'adlsgen2''github' corpusStore
实体引用容器 容器语料库位于其中 是(如果使用 ADLS Gen2 中的清单和语料库) 字符串 adlsgen2_fileSystem
实体引用存储库 GitHub 存储库名称 是(如果使用 GitHub 中的清单和语料库) 字符串 github_repository
实体引用分支 GitHub 存储库分支 是(如果使用 GitHub 中的清单和语料库) 字符串 github_branch
语料库文件夹 语料库的根位置 是(如果使用清单) 字符串 corpusPath
语料库实体 实体引用的路径 字符串 实体
允许找不到文件 如果为 true,则找不到文件时不会引发错误 truefalse ignoreNoFilesFound

在源和接收器转换过程中选择“实体引用”时,可从以下三个选项中选择实体引用的位置:

  • “本地”使用此服务已在使用的清单文件中定义的实体
  • “自定义”要求指向的实体清单文件应与此服务所用的清单文件不同
  • “标准”将使用 GitHub 中维护的 CDM 实体标准库中的实体引用。

接收器设置

  • 指向包含要写入的实体定义的 CDM 实体引用文件。

entity settings

  • 定义要让此服务用于写入实体的输出文件的分区路径和格式。

entity format

  • 设置输出文件位置以及清单文件的位置和名称。

cdm location

导入架构

CDM 仅作为内联数据集提供,且默认情况下没有关联架构。 若要获取列元数据,请单击“投影”选项卡中的“导入架构”按钮 。这样你可以引用语料库指定的列名称和数据类型。 若要导入架构,数据流调试会话必须处于活动状态,还必须具有可以指向的现有 CDM 实体定义文件。

在接收器转换过程中将数据流列映射到实体属性时,请单击“映射”选项卡,然后选择“导入架构”。 此服务将读取接收器选项中所指向的实体引用,使你能够映射到目标 CDM 架构。

CDM sink settings

注意

使用来自 Power BI 或 Power Platform 数据流的 model.json 源类型时,可能会遇到源转换过程中的“语料库路径为 NULL 或空”错误。 这很可能是因 model.json 文件中分区位置路径的格式问题所致。 若要解决此问题,请执行以下步骤:

  1. 在文本编辑器中打开 model.json 文件
  2. 查找 partitions.Location 属性
  3. 将“blob.core.chinacloudapi.cn”更改为“dfs.core.chinacloudapi.cn”
  4. 将 URL 中的任何“% 2F”编码修正为“/”
  5. 如果使用 ADF 数据流,则必须将分区文件路径中的特殊字符替换为字母数字值,或切换到 Azure Synapse 数据流

CDM 源数据流脚本示例

source(output(
        ProductSizeId as integer,
        ProductColor as integer,
        CustomerId as string,
        Note as string,
        LastModifiedDate as timestamp
    ),
    allowSchemaDrift: true,
    validateSchema: false,
    entity: 'Product.cdm.json/Product',
    format: 'cdm',
    manifestType: 'manifest',
    manifestName: 'ProductManifest',
    entityPath: 'Product',
    corpusPath: 'Products',
    corpusStore: 'adlsgen2',
    adlsgen2_fileSystem: 'models',
    folderPath: 'ProductData',
    fileSystem: 'data') ~> CDMSource

接收器属性

下表列出了 CDM 接收器支持的属性。 可以在“设置”选项卡中编辑这些属性。

名称 说明 必需 允许的值 数据流脚本属性
格式 格式必须为 cdm cdm format
根位置:容器 CDM 文件夹的容器名称 字符串 fileSystem
根位置:文件夹路径 CDM 文件夹的根文件夹位置 字符串 folderPath
清单文件:实体路径 根文件夹中实体的文件夹路径 字符串 entityPath
清单文件:清单名称 清单文件名称。 默认值为“default” 字符串 manifestName
架构链接服务 语料库所在的链接服务 'adlsgen2''github' corpusStore
实体引用容器 容器语料库位于其中 是(如果语料库位于 ADLS Gen2) 字符串 adlsgen2_fileSystem
实体引用存储库 GitHub 存储库名称 是(如果语料库位于 GitHub) 字符串 github_repository
实体引用分支 GitHub 存储库分支 是(如果语料库位于 GitHub) 字符串 github_branch
语料库文件夹 语料库的根位置 字符串 corpusPath
语料库实体 实体引用的路径 字符串 实体
分区路径 分区的写入位置 字符串 partitionPath
清除文件夹 如果在写入前目标文件夹已被清除 truefalse truncate
格式类型 选择指定 parquet 格式 parquet(如果指定) subformat
列分隔符 如果写入 DelimitedText,如何分隔列 是(如果写入 DelimitedText) 字符串 columnDelimiter
将第一行用作标头 如果使用 DelimitedText,是否将列名称添加为标头 truefalse columnNamesAsHeader

CDM 接收器数据流脚本示例

关联的数据流脚本为:

CDMSource sink(allowSchemaDrift: true,
    validateSchema: false,
    entity: 'Product.cdm.json/Product',
    format: 'cdm',
    entityPath: 'ProductSize',
    manifestName: 'ProductSizeManifest',
    corpusPath: 'Products',
    partitionPath: 'adf',
    folderPath: 'ProductSizeData',
    fileSystem: 'cdm',
    subformat: 'parquet',
    corpusStore: 'adlsgen2',
    adlsgen2_fileSystem: 'models',
    truncate: true,
    skipDuplicateMapInputs: true,
    skipDuplicateMapOutputs: true) ~> CDMSink

在映射数据流中创建源转换