本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
数据质量定义语言(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
是要配置的规则类型的区分大小写名称。例如,IsComplete
、IsUnique
或 CustomSql
。每种规则类型的规则参数都不同。有关 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
某些规则类型(例如 IsUnique
和 IsComplete
)已经返回布尔响应。
下表列出了您可在 DL 规则中使用的表达式。
支持的 DQDL 表达式 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
表达式 | 描述 | 示例 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
= x |
如果规则类型响应等于 x ,则解析为 true 。 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
> x |
如果规则类型响应大于 x ,则解析为 true 。 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
< x |
如果规则类型响应小于 x ,则解析为 true 。 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
>= x |
如果规则类型响应大于 x ,则解析为 true 。 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<= x |
如果规则类型响应小于或等于 x ,则解析为 true 。 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
介于 x 与 y 之间 |
如果规则类型响应在指定范围内(不包括),则解析为 true 。您只能将此表达式类型用于数字和日期类型。 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
在 [a, b, c, ... ] 中 |
如果规则类型响应在指定的集合中,则解析为 true 。 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
匹配 /ab+c/i |
如果规则类型响应与正则表达式匹配,则解析为 true 。 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
now() |
仅适用于创建日期表达式的 ColumnValues 规则类型。 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
与阈值匹配/[…] 中 |
指定符合规则条件的值的百分比。仅适用于 ColumnValues 规则类型。 |
|
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 — 针对规则类型响应运行以生成布尔值的表达式。有关更多信息,请参阅表达式:
示例:列相关性
以下示例规则检查列 height
和 weight
之间的相关系数是否具有很强的正相关性(系数值大于 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
) 和两个不同值(a
和 b
)。因此,集合的唯一值比率为 ½ = 0.5。
语法
UniqueValueRatio
<COL_NAME>
<EXPRESSION>
COL_NAME — 要根据其评估数据质量规则的列的名称。
支持的列类型:任何列类型
EXPRESSION — 针对规则类型响应运行以生成布尔值的表达式。有关更多信息,请参阅表达式:
示例:唯一值比率
此示例检查列与一系列值的唯一值比率。
UniqueValueRatio "test_score" between 0 and 0.5