浏览、学习、创建和使用数据质量规则

数据质量是衡量组织中数据完整性的度量,使用数据质量分数进行评估。 根据Microsoft Purview 数据目录中定义的规则对数据的评估生成的分数。

数据质量规则是组织为确保数据的准确性、一致性和完整性而建立的基本准则。 这些规则有助于维护数据完整性和可靠性。

下面是数据质量规则的一些关键方面:

  • 准确性 - 数据应准确表示真实实体。 上下文很重要! 例如,如果要存储客户地址,请确保它们与实际位置匹配。

  • 完整性 - 此规则的目的是标识空数据、null 数据或缺失数据。 此规则验证所有值都存在 (但不一定正确) 。

  • 符合性 - 此规则确保数据遵循数据格式设置标准,例如日期、地址和允许的值的表示形式。

  • 一致性 - 此规则检查同一记录的不同值是否与给定规则一致,并且没有矛盾。 数据一致性可确保在不同记录中统一表示相同的信息。 例如,如果你有产品目录,则一致的产品名称和说明至关重要。

  • 时间线 - 此规则旨在确保在尽可能短的时间内访问数据。 它可确保数据是最新的。

  • 唯一性 - 此规则检查值是否不重复,例如,如果每个客户应该只有一条记录,则同一客户没有多个记录。 每个客户、产品或交易都应具有唯一标识符。

数据质量生命周期

创建数据质量规则是数据质量生命周期中的 第六 步。 前面的步骤包括:

  1. 在数据目录中分配用户 () 数据质量专员权限 ,以使用所有数据质量功能。
  2. 在Microsoft Purview 数据映射中注册扫描数据源。
  3. 将数据资产添加到数据产品
  4. 设置数据源连接,以便为数据质量评估准备源
  5. 为数据源中的资产配置和运行数据分析。

所需角色

查看现有数据质量规则

  1. 从Microsoft Purview 数据目录,选择“运行状况管理”菜单和数据质量子菜单。

  2. 在数据质量子菜单中选择 治理域

  3. 选择数据产品。

    数据质量页的屏幕截图,其中选择了治理域并突出显示了数据产品。

  4. 从所选 数据产品 的资产列表中选择数据资产。

    数据资产列表的屏幕截图,其中选择了资产。

  5. 选择“ 规则 ”菜单选项卡,查看应用于资产的现有规则。

    数据资产的屏幕截图,其中选择了“规则”选项卡。

  6. 选择一个规则,将应用的规则的性能历史记录浏览到所选数据资产。

    规则性能历史记录的屏幕截图。

可用的数据质量规则

Microsoft Purview 数据质量启用以下规则的配置,这些规则提供低代码到无代码方式来衡量数据质量的现用规则。

Rule 定义
新鲜度 确认所有值都是最新的。
唯一值 确认列中的值是唯一的。
字符串格式匹配 确认列中的值是否与特定格式或其他条件匹配。
数据类型匹配 确认列中的值符合其数据类型要求。
重复行 检查在两列或更多列中具有相同值的重复行。
空/空白字段 在应存在值的列中查找空白和空字段。
表查找 确认可以在另一个表的特定列中找到一个表中的值。
自定义 使用视觉表达式生成器创建自定义规则。

新鲜度

新鲜度规则的目的是确定资产是否已在预期时间内更新。 Microsoft Purview 当前支持通过查看 上次修改日期来检查新鲜度。

用于创建新鲜度规则的页面的屏幕截图。

注意

新鲜度规则的分数为 100, (它通过) 或 0 (失败) 。

唯一值

“唯一值”规则指出指定列中的所有值都必须是唯一的。 唯一“传递”的所有值和不被视为失败的值。 如果未对列定义空/空字段规则,则出于此规则的目的,将忽略 null/空值。

数据质量唯一性规则

字符串格式匹配

格式匹配规则检查列中的所有值是否有效。 如果未对列定义空/空字段规则,则出于此规则的目的,将忽略 null/空值。

此规则可以使用三种不同的方法验证列中的每个值:

  • 枚举 – 这是以逗号分隔的值列表。 如果计算的值无法与列出的值之一进行比较,则无法检查。 可以使用反斜杠对逗号和反斜杠进行转义: \ 。 因此 a \, b, c ,包含两个值,第一个是 a , b ,第二个是 c

    用于创建新枚举规则的菜单的屏幕截图。

  • 赞模式 - like(<string> : string, <pattern match> : string) => boolean

    模式是按字面意思匹配的字符串。 以下特殊符号除外:_ 匹配输入 (中的任何一个字符,类似于 。中的 posix 正则表达式) % 匹配输入 (中的零个或多个字符,类似于正则表达式) 中的 posix .*。 转义字符为“”。 如果转义字符位于特殊符号或其他转义字符之前,则以下字符按字面意思进行匹配。 转义任何其他字符都无效。

    • like('icecream', 'ice%') -> true

    用于创建类似模式规则的菜单的屏幕截图。

  • 正则表达式regexMatch(<string> : string, <regex to match> : string) => boolean

    检查字符串是否与给定正则表达式模式匹配。 使用 <regex> (后引号) 匹配字符串而不转义。

    • regexMatch('200.50', '(\\d+).(\\d+)') -> true
    • regexMatch('200.50', `(\d+).(\d+)`) -> true

    用于创建正则表达式规则的菜单的屏幕截图。

数据类型匹配

数据类型匹配规则指定关联列应包含的数据类型。 由于规则引擎必须跨许多不同的数据源运行,因此它无法使用 BIGINT 或 VARCHAR 等本机类型。 相反,它有自己的类型系统,它将本机类型转换为 。 此规则告知质量扫描引擎本机类型应转换为的内置类型。 数据类型系统取自 Azure 数据工厂 中使用的 Azure 数据流 类型系统。

在质量扫描期间,将针对数据类型匹配类型测试本机类型,如果无法将本机类型转换为数据类型匹配类型,则将该行视为错误。

用于创建数据类型匹配规则的菜单的屏幕截图。

重复行

“重复行”规则检查列中值的组合对于表中的每一行是否唯一。

在下面的示例中,预期_CompanyName、CustomerID、EmailAddress、FirstName 和 LastName 的串联将生成对表中所有行唯一的值。

每个资产可以具有此规则的零个或一个实例。

用于创建重复行规则的菜单的屏幕截图。

空/空白字段

空/空字段规则断言,标识的列不应包含任何 null 值,在字符串的特定情况下,也不应包含空值或仅空格值。 在质量扫描期间,此列中不为 null 的任何值都将被视为正确。 此规则会影响其他规则,例如 “唯一值”“格式”匹配 规则。 如果未在列上定义此规则,则在该列上运行时,这些规则将自动忽略任何 null 值。 如果此规则是在列上定义的,则这些规则将检查该列的 null/空值,并考虑它们进行评分。

用于创建空或空白字段规则的菜单的屏幕截图。

表查找

表查找规则将检查定义规则的列中的每个值,并将其与引用表进行比较。 例如,主表有一个名为“location”的列,其中包含“city, state zip”形式的城市、州和邮政编码。 有一个名为 citystate 的引用表,其中包含美国支持的城市、州和邮政编码的所有法定组合。 目标是将当前列中的所有位置与该引用列表进行比较,以确保仅使用合法组合。

为此,我们首先在搜索资产对话框中键入“citystatezip 的名称”。 然后,选择所需的资产,然后选择要与之进行比较的列。

用于创建表查找规则的菜单的屏幕截图。

自定义规则

自定义规则允许指定尝试基于该行中的一个或多个值验证行的规则。 自定义规则包含两个部分:

  • 第一部分是筛选器表达式,它是可选的,通过选择“使用筛选器表达式”来激活检查框。 这是一个返回布尔值的表达式。 筛选器表达式将应用于一行,如果返回 true,则将该行视为规则。 如果筛选表达式为该行返回 false,则表示将出于此规则的目的忽略该行。 筛选器表达式的默认行为是传递所有行 , 因此如果未指定筛选器表达式,并且不需要一个,则将考虑所有行。
  • 第二部分是 行表达式。 这是应用于每个行的布尔表达式,该行得到筛选器表达式的批准。 如果此表达式返回 true,则行传递;如果为 false,则将其标记为失败。

数据 用于创建自定义规则的菜单的屏幕截图。

自定义规则示例

应用场景 行表达式
验证 state_id 是否等于加州,以及 aba_Routing_Number 是否与特定正则表达式模式匹配,并且出生日期是否位于特定范围内 state_id=='California' && regexMatch(toString(aba_Routing_Number), '^((0[0-9])|(1[0-2])|(2[1-9])|(3[0-2])|(6[1-9])|(7[0-2])|80)([0-9]{7})$') && between(dateOfBirth,toDate('1968-12-13'),toDate('2020-12-13'))==true()
验证 VendorID 是否等于 124 {VendorID}=='124'
检查 fare_amount 是否等于或大于 100 {fare_amount} >= "100"
验证 fare_amount 是否大于 100 且 tolls_amount 是否不等于 100 {fare_amount} >= "100" || {tolls_amount} != "400"
检查 评分 是否小于 5 Rating < 5
验证 一年中 的数字数是否为 4 length(toString(year)) == 4
如果两列 bbToLoanRatiobankBalance 的值相等,则将其与检查进行比较 compare(variance(toLong(bbToLoanRatio)),variance(toLong(bankBalance)))<0
检查 firstNamelastNameLoanIDuuid 中剪裁和串联的字符数是否大于 20 length(trim(concat(firstName,lastName,LoanID,uuid())))>20
验证aba_Routing_Number是否与特定的正则表达式模式匹配,并且初始交易日期是否大于 2022-11-12,Disallow-Listed 为 false,以及平均 bankBalance 大于 50000,并且state_id等于“Massachuse”、“田纳西”、“北达科他州”或“Albama” regexMatch(toString(aba_Routing_Number), '^((0[0-9])|(1[0-2])|(2[1-9])|(3[0-2])|(6[1-9])|(7[0-2])|80)([0-9]{7})$') && toDate(addDays(toTimestamp(initialTransaction, 'yyyy-MM-dd\'T\'HH:mm:ss'),15))>toDate('2022-11-12') && ({Disallow-Listed}=='false') && avg(toLong(bankBalance))>50000 && (state_id=='Massachuse' || state_id=='Tennessee ' || state_id=='North Dakota' || state_id=='Albama')
验证 aba_Routing_Number 是否与某些正则表达式模式匹配,并且 dateOfBirth 是否介于 1968-12-13 和 2020-12-13 之间 regexMatch(toString(aba_Routing_Number), '^((0[0-9])|(1[0-2])|(2[1-9])|(3[0-2])|(6[1-9])|(7[0-2])|80)([0-9]{7})$') && between(dateOfBirth,toDate('1968-12-13'),toDate('2020-12-13'))==true()
检查 aba_Routing_Number 中的唯一值数是否等于 1,000,000, 并且EMAIL_ADDR 中的唯一值数是否等于 1,000,000 approxDistinctCount({aba_Routing_Number})==1000000 && approxDistinctCount({EMAIL_ADDR})==1000000

筛选器表达式和行表达式都是使用此处介绍的Azure 数据工厂表达式语言和此处定义的语言定义的。 但请注意,并非所有为通用 ADF 表达式语言定义的函数都可用。 可用函数的完整列表位于表达式对话框中提供的“函数”列表中。 不支持 此处 定义的以下函数:isDelete、isError、isIgnore、isInsert、isMatch、isUpdate、isUpsert、partitionId、cached lookup 和 Window 函数。

注意

<regex> (反引号) 可用于自定义规则中包含的正则表达式中,以匹配字符串,而无需转义特殊字符。 正则表达式语言基于 Java,按 此处所述工作。 此页面 标识需要转义的字符。

AI 辅助自动生成的规则

用于数据质量测量的 AI 辅助自动规则生成涉及使用人工智能 (AI) 技术自动创建规则来评估和提高数据质量。 自动生成的规则特定于内容。 大多数常见规则将自动生成,因此用户无需花费太多精力来创建自定义规则。

浏览并应用自动生成的规则:

  1. “规则 ”页上选择“建议规则”。
  2. 浏览建议的规则列表。

资产的“规则”选项卡的屏幕截图,其中突出显示了“建议规则”按钮。

  1. 从建议的规则列表中选择要应用于数据资产的规则。

规则建议页的屏幕截图。

后续步骤

  1. 在数据产品上配置并运行数据质量扫描 ,以评估数据产品中所有受支持资产的质量。
  2. 查看扫描结果 以评估数据产品的当前数据质量。