数据质量定义语言(DQDL) - Amazon Glue
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

数据质量定义语言(DQDL)

Amazon Glue Data Quality 目前为 Amazon Glue 的预览版,可能会发生变化。

数据质量定义语言(DQDL)是一种特定领域的语言,用于定义 Amazon Glue Data Quality 规则。

本指南介绍了关键的 DQDL 概念,以帮助您理解该语言。它还通过语法和示例为 DQDL 规则类型提供了参考。在使用本指南之前,我们建议您熟悉 Amazon Glue Data Quality。有关更多信息,请参阅Amazon Glue Data Quality(预览版)

DL 语法

DQDL 文档区分大小写,并包含一个规则集,该规则集将各个数据质量规则组合在一起。要构造规则集,必须创建一个名为 Rules(大写)的列表,由一对方括号分隔。该列表应包含一个或多个以逗号分隔的 DQDL 规则,如下例所示。

Rules = [ IsComplete "order-id", IsUnique "order-id" ]

规则结构

DQDL 规则的结构取决于规则类型。但是,DQDL 规则通常符合以下格式。

<RuleType> <Parameter> <Parameter> <Expression>

RuleType 是要配置的规则类型的区分大小写名称。例如,IsCompleteIsUniqueCustomSql。每种规则类型的规则参数都不同。有关 DQDL 规则类型及其参数的完整参考,请参阅DL 规则类型引用

规则组合

DQDL 支持以下逻辑运算符,您可以使用这些运算符来组合规则。

and

当且仅当逻辑 and 运算符连接的规则为 true,逻辑运算符才会产生结果 true。否则,组合规则将导致 false。与 and 运算符连接的每条规则都必须用圆括号括起来。

以下示例使用 and 运算符将两个 DL 规则组合。

(IsComplete "id") and (IsUnique "id")
or

当且仅当逻辑 or 运算符连接的一个或多个规则为 true,逻辑运算符才会产生结果 true。与 or 运算符连接的每条规则都必须用圆括号括起来。

以下示例使用 or 运算符将两个 DL 规则组合。

(RowCount "id" > 100) or (IsPrimaryKey "id")

您可以使用同一个运算符连接多个规则,因此允许使用以下规则组合。

(Mean "Star_Rating" > 3) and (Mean "Order_Total" > 500) and (IsComplete "Order_Id")

但是,您不能将逻辑运算符组合成一个表达式。例如,不允许以下组合。

(Mean "Star_Rating" > 3) and (Mean "Order_Total" > 500) or (IsComplete "Order_Id")

表达式

如果规则类型不生成布尔响应,则必须提供表达式作为参数才能创建布尔响应。例如,以下规则根据表达式检查列中所有值的均值(平均值),以返回真或假结果。

Mean "colA" between 80 and 100

某些规则类型(例如 IsUniqueIsComplete)已经返回布尔响应。

下表列出了您可在 DL 规则中使用的表达式。

支持的 DQDL 表达式
表达式 描述 示例
= x 如果规则类型响应等于 x,则解析为 true
Completeness "colA" = 1.0, ColumnValues "colA" = "2022-06-30"
> x 如果规则类型响应大于 x,则解析为 true
ColumnValues "colA" > 10
< x 如果规则类型响应小于 x,则解析为 true
ColumnValues "colA" < 1000, ColumnValues "colA" < "2022-06-30"
>= x 如果规则类型响应大于 x,则解析为 true
ColumnValues "colA" >= 10
<= x 如果规则类型响应小于或等于 x,则解析为 true
ColumnValues "colA" <= 1000
介于 x y 之间 如果规则类型响应在指定范围内(不包括),则解析为 true。您只能将此表达式类型用于数字和日期类型。
Mean "colA" between 8 and 100, ColumnValues "colA" between "2022-05-31" and "2022-06-30"
在 [a, b, c, ...] 中 如果规则类型响应在指定的集合中,则解析为 true
ColumnValues "colA" in [ 1, 2, 3 ], ColumnValues "colA" in [ "a", "b", "c" ]
匹配 /ab+c/i 如果规则类型响应与正则表达式匹配,则解析为 true
ColumnValues "colA" matches "[a-ZA-Z]*"
now() 仅适用于创建日期表达式的 ColumnValues 规则类型。
ColumnValues "load_date" > (now() - 3 days)
与阈值匹配/[…] 中 指定符合规则条件的值的百分比。仅适用于 ColumnValues 规则类型。
ColumnValues "colA" in ["A", "B"] with threshold > 0.8, ColumnValues "colA" matches "[a-zA-Z]*" with threshold between 0.2 and 0.9

DL 规则类型引用

本部分介绍 Amazon Glue Data Quality 支持的每种规则类型的参考。

注意

DQDL 目前不支持嵌套或列表类型的列数据。

ColumnCorrelation

检查两列与给定表达式之间的相关性。AmazonGlue Data Quality 使用 Pearson 相关系数来测量两列之间的线性相关性。结果是一个介于 -1 和 1 之间的数字,用于衡量关系的强度和方向。

语法

ColumnCorrelation <COL_1_NAME> <COL_2_NAME> <EXPRESSION>
  • COL_1_NAME — 要根据其评估数据质量规则的第一列的名称。

    支持的列类型:字节、十进制、双精度、浮点数、整数、长整数、短整数

  • COL_2_NAME — 要根据其评估数据质量规则的第二列的名称。

    支持的列类型:字节、十进制、双精度、浮点数、整数、长整数、短整数

  • EXPRESSION — 针对规则类型响应运行以生成布尔值的表达式。有关更多信息,请参阅表达式

示例:列相关性

以下示例规则检查列 heightweight 之间的相关系数是否具有很强的正相关性(系数值大于 0.8)。

ColumnCorrelation "height" "weight" > 0.8

ColumnExists

检查列是否存在。

语法

ColumnExists <COL_NAME>
  • COL_NAME — 要根据其评估数据质量规则的列的名称。

    支持的列类型:任何列类型

示例:列存在

以下示例规则检查名为 Middle_Name 的列是否存在。

ColumnExists "Middle_Name"

ColumnLength

检查列中每行的长度是否符合给定表达式。

语法

ColumnLength <COL_NAME><EXPRESSION>
  • COL_NAME — 要根据其评估数据质量规则的列的名称。

    支持的列类型:字符串

  • EXPRESSION — 针对规则类型响应运行以生成布尔值的表达式。有关更多信息,请参阅表达式

示例:列行长

以下示例规则检查名为 Postal_Code 的列中每行的值长度是否为 5 个字符。

ColumnLength "Postal_Code" = 5

ColumnValues

针对列中的值运行表达式。

语法

ColumnValues <COL_NAME> <EXPRESSION>
  • COL_NAME — 要根据其评估数据质量规则的列的名称。

    支持的列类型:任何列类型

  • EXPRESSION — 针对规则类型响应运行以生成布尔值的表达式。有关更多信息,请参阅表达式

示例:允许的值

以下示例规则检查指定列中的每个值是否在一组允许的值中。

ColumnValues "Country" in [ "US", "CA", "UK" ]

示例:正则表达式

以下示例规则根据正则表达式检查列中的值。

ColumnValues "First_Name" matches "[a-ZA-Z]*"

示例:日期值

以下示例规则根据日期表达式检查日期列中的值。

ColumnValues "Load_Date" > (now() - 3 days)

示例:数值

以下示例规则检查列值是否与特定的数字约束条件相匹配。

ColumnValues "Customer_ID" between 1 and 2000

完整性

根据给定表达式检查列中完整(非空)值的百分比。

语法

Completeness <COL_NAME> <EXPRESSION>
  • COL_NAME — 要根据其评估数据质量规则的列的名称。

    支持的列类型:任何列类型

  • EXPRESSION — 针对规则类型响应运行以生成布尔值的表达式。有关更多信息,请参阅表达式

示例:空值百分比

以下示例规则检查列中是否有超过 95% 的值是完整的。

Completeness "First_Name" > 0.95

CustomSql

针对数据集运行自定义 SQL 语句,并根据给定表达式检查返回值。SQL 语句必须返回单个数值。

语法

CustomSql <SQL_STATEMENT> <EXPRESSION>
  • SQL_STATEMENT — 返回单个数值的 SQL 语句,由双引号包围。

  • EXPRESSION — 针对规则类型响应运行以生成布尔值的表达式。有关更多信息,请参阅表达式

示例:自定义 SQL

此示例规则使用 SQL 语句检索数据集的记录数。然后,该规则检查记录数是否介于 10 到 20 之间。

重要

primary 别名代表要评估的数据集的名称。在控制台上处理可视化 ETL 任务时,primary 始终表示传递给 EvaluateDataQuality.apply() 转换的 DynamicFrame。当您使用 Amazon Glue 数据目录对表运行数据质量任务时,primary 表示该表。

CustomSql "select count(*) from primary" between 10 and 20

DataFreshness

通过评估当前时间和日期列值之间的差异,来检查列中数据的新鲜度。您可以为此规则类型指定基于时间的表达式,以确保列值是最新的。

语法

DataFreshness <COL_NAME> <EXPRESSION>
  • COL_NAME — 要根据其评估数据质量规则的列的名称。

    支持的列类型:日期

  • EXPRESSION — 以小时或天为单位的数字表达式。必须在表达式中指定时间单位。

示例:数据新鲜度

以下示例规则检查数据的新鲜度。

DataFreshness "Order_Date" <= 24 hours DataFreshness "Order_Date" between 2 days and 5 days

DistinctValuesCount

根据给定的表达式检查列中的不同值的数量。

语法

DistinctValuesCount <COL_NAME> <EXPRESSION>
  • COL_NAME — 要根据其评估数据质量规则的列的名称。

    支持的列类型:任何列类型

  • EXPRESSION — 针对规则类型响应运行以生成布尔值的表达式。有关更多信息,请参阅表达式

示例:不同的列值计数

以下示例规则检查名为 State 的列是否包含 3 个以上的不同值。

DistinctValuesCount "State" > 3

检查列的值是否与给定表达式匹配。熵测量消息中包含的信息级别。给定列中值的概率分布,熵描述了识别一个值需要多少位。

语法

Entropy <COL_NAME> <EXPRESSION>
  • COL_NAME — 要根据其评估数据质量规则的列的名称。

    支持的列类型:任何列类型

  • EXPRESSION — 针对规则类型响应运行以生成布尔值的表达式。有关更多信息,请参阅表达式

示例:列熵

以下示例规则检查名 Feedback 为的列的熵值是否大于一。

Entropy "Star_Rating" > 1

IsComplete

检查列中的所有值是否完整(非空)。

语法

IsComplete <COL_NAME>
  • COL_NAME — 要根据其评估数据质量规则的列的名称。

    支持的列类型:任何列类型

示例:空值

以下示例检查名为 email 的列中的所有值是否均为非空值。

IsComplete "email"

IsPrimaryKey

检查列是否包含主键。如果列中的所有值都是唯一且完整(非空值),则该列包含主键。

语法

IsPrimaryKey <COL_NAME>
  • COL_NAME — 要根据其评估数据质量规则的列的名称。

    支持的列类型:任何列类型

示例:主键:

以下示例规则检查名为 Customer_ID 的列是否包含主键。

IsPrimaryKey "Customer_ID"

IsUnique

检查列中的所有值是否唯一,并返回布尔值。

语法

IsUnique <COL_NAME>
  • COL_NAME — 要根据其评估数据质量规则的列的名称。

    支持的列类型:任何列类型

示例:唯一列值

以下示例规则检查名为 email 的列中的所有值是否均为非空值。

IsUnique "email"

Mean

检查列中所有值的均值(平均值)是否与给定表达式匹配。

语法

Mean <COL_NAME> <EXPRESSION>
  • COL_NAME — 要根据其评估数据质量规则的列的名称。

    支持的列类型:字节、十进制、双精度、浮点数、整数、长整数、短整数

  • EXPRESSION — 针对规则类型响应运行以生成布尔值的表达式。有关更多信息,请参阅表达式

示例:平均值

以下示例规则检查列中所有值的平均值是否超过阈值。

Mean "Star_Rating" > 3

RowCount

根据给定表达式检查数据集的行数。在表达式中,您可以使用 >< 等运算符指定行数或行范围。

语法

RowCount <EXPRESSION>
  • EXPRESSION — 针对规则类型响应运行以生成布尔值的表达式。有关更多信息,请参阅表达式

示例:行数数字校验

以下示例规则检查行数是否在给定范围内。

RowCount between 10 and 100

StandardDeviation

根据给定表达式检查列中所有值的标准差。

语法

StandardDeviation <COL_NAME> <EXPRESSION>
  • COL_NAME — 要根据其评估数据质量规则的列的名称。

    支持的列类型:字节、十进制、双精度、浮点数、整数、长整数、短整数

  • EXPRESSION — 针对规则类型响应运行以生成布尔值的表达式。有关更多信息,请参阅表达式

示例:标准差

以下示例规则检查名为 colA 的列中值的标准差是否小于指定值。

StandardDeviation "Star_Rating" < 1.5

总计

根据给定表达式检查列中所有值的总和。

语法

Sum <COL_NAME> <EXPRESSION>
  • COL_NAME — 要根据其评估数据质量规则的列的名称。

    支持的列类型:字节、十进制、双精度、浮点数、整数、长整数、短整数

  • EXPRESSION — 针对规则类型响应运行以生成布尔值的表达式。有关更多信息,请参阅表达式

示例:总和

以下示例规则检查列中所有值的总和是否超过给定阈值。

Sum "transaction_total" > 500000

独特性

根据给定表达式检查列中唯一值的百分比。唯一值只出现一次。

语法

Uniqueness <COL_NAME> <EXPRESSION>
  • COL_NAME — 要根据其评估数据质量规则的列的名称。

    支持的列类型:任何列类型

  • EXPRESSION — 针对规则类型响应运行以生成布尔值的表达式。有关更多信息,请参阅表达式

示例:唯一性百分比

以下示例规则检查列中唯一值的百分比是否与某些数字标准相匹配。

Uniqueness "email" = 1.0

UniqueValueRatio

根据给定表达式检查列中唯一值比率。唯一值比率是唯一值除以列中所有不同值的数量得出的分数。唯一值仅出现一次,而不同值至少出现一次。

例如,集合 [a, a, b] 包含一个唯一值 (b) 和两个不同值(ab)。因此,集合的唯一值比率为 ½ = 0.5。

语法

UniqueValueRatio <COL_NAME> <EXPRESSION>
  • COL_NAME — 要根据其评估数据质量规则的列的名称。

    支持的列类型:任何列类型

  • EXPRESSION — 针对规则类型响应运行以生成布尔值的表达式。有关更多信息,请参阅表达式

示例:唯一值比率

此示例检查列与一系列值的唯一值比率。

UniqueValueRatio "test_score" between 0 and 0.5