Compartir a través de

映射数据流中的断言转换

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

提示

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

数据流在 Azure 数据工厂和 Azure Synapse 管道中均可用。 本文适用于映射数据流。 如果不熟悉转换,请参阅介绍性文章使用映射数据流转换数据

利用断言转换,你能够在映射数据流中生成自定义规则,以用于数据质量和数据验证。 你可以生成确定值是否满足预期值域的规则。 此外,你还可以生成检查行唯一性的规则。 断言转换将有助于确定数据中的每一行是否满足一组标准。 断言转换还允许设置在不满足数据验证规则时的自定义错误消息。

断言类型

配置

在断言转换配置面板中,你将选择断言类型、为断言提供唯一名称和可选说明,并定义表达式和可选筛选器。 “数据预览”窗格将指示哪些行未通过断言。 此外,可以使用 isError()hasError() 对断言失败的行向下游测试每个行标记。

断言设置

断言类型

  1. 期望为 true:表达式的结果必须计算为布尔值 true 结果。 使用它验证数据中的域值范围。
  2. 期望为 unique:将列或表达式设置为数据中的唯一性规则。 使用它标记重复的行。
  3. 预期为 exists:此选项仅在选中第二个传入流时可用。 exists 将查看两个流并根据指定的列或表达式确定两个流中是否都存在行。 若要为存在添加第二个流,请选择 Additional streams

断言配置

数据流失败

如果想要断言规则失败时数据流活动立即失败,请选择 fail data flow

断言 ID

断言 ID 是一个属性,可在其中输入断言的(字符串)名称。 你稍后将能够借助 hasError() 在数据流下游使用标识符,或能够输出断言失败代码。 每个数据流中的断言 ID 必须是唯一的。

断言说明

在此处为断言输入字符串说明。 也可以在此处使用表达式和行上下文列值。

筛选器

筛选器是一个可选属性,可在其中根据表达式值将断言筛选为仅限行子集。

表达式

为每个断言输入一个计算表达式。 每个断言转换可以有多个断言。 每种类型的断言都需要一个表达式,ADF 需计算该表达式以测试断言是否通过。

忽略 null

默认情况下,断言转换将在行断言计算中包含 NULL。 你可以选择使用此属性忽略 NULL。

直接断言行失败

断言失败时,可选择使用接收器转换上的“错误”选项卡将这些错误行定向到 Azure 中的文件。 还可以通过忽略错误行来选择接收器转换,以完全不输出断言失败的行。

示例

source(output(
		AddressID as integer,
		AddressLine1 as string,
		AddressLine2 as string,
		City as string,
		StateProvince as string,
		CountryRegion as string,
		PostalCode as string,
		rowguid as string,
		ModifiedDate as timestamp
	),
	allowSchemaDrift: true,
	validateSchema: false,
	isolationLevel: 'READ_UNCOMMITTED',
	format: 'table') ~> source1
source(output(
		CustomerID as integer,
		AddressID as integer,
		AddressType as string,
		rowguid as string,
		ModifiedDate as timestamp
	),
	allowSchemaDrift: true,
	validateSchema: false,
	isolationLevel: 'READ_UNCOMMITTED',
	format: 'table') ~> source2
source1, source2 assert(expectExists(AddressLine1 == AddressLine1, false, 'nonUS', true(), 'only valid for U.S. addresses')) ~> Assert1

数据流脚本

示例

source1, source2 assert(expectTrue(CountryRegion == 'United States', false, 'nonUS', null, 'only valid for U.S. addresses'),
	expectExists(source1@AddressID == source2@AddressID, false, 'assertExist', StateProvince == 'Washington', toString(source1@AddressID) + ' already exists in Washington'),
	expectUnique(source1@AddressID, false, 'uniqueness', null, toString(source1@AddressID) + ' is not unqiue')) ~> Assert1