

# ReferentialIntegrity
<a name="dqdl-rule-types-ReferentialIntegrity"></a>

检查主数据集中一组列的值在多大程度上是引用数据集中一组列值的子集。

**语法**

```
ReferentialIntegrity <PRIMARY_COLS> <REFERENCE_DATASET_COLS> <EXPRESSION>
```
+ **PRIMARY\$1COLS** – 主数据集中列名的逗号分隔列表。

  **支持的列类型**：字节、十进制、双精度、浮点数、整数、长整数、短整数
+ **REFERENCE\$1DATASET\$1COLS** – 此参数包含用句点分隔的两个部分。第一部分是引用数据集的别名。第二部分是用大括号括起的引用数据集中以逗号分隔的列名列表。

  **支持的列类型**：字节、十进制、双精度、浮点数、整数、长整数、短整数
+ **EXPRESSION** — 针对规则类型响应运行以生成布尔值的表达式。有关更多信息，请参阅 [Expressions](dqdl.md#dqdl-syntax-rule-expressions)。

**示例：检查邮政编码列 ** 的引用完整性

以下示例规则检查主数据集 `zipcode` 列中是否有 90% 以上的值存在于 `reference` 数据集的 `zipcode` 列中。

```
ReferentialIntegrity "zipcode" "reference.zipcode" >= 0.9
```

**示例：检查城市和州列的引用完整性**

在以下示例中，包含城市和州信息的列存在于主数据集和引用数据集中。两个数据集中的列名不同。该规则检查主数据集中各列的值集是否与引用数据集中各列的值集完全相等。

```
ReferentialIntegrity "city,state" "reference.{ref_city,ref_state}" = 1.0
```

 **示例动态规则** 
+ `ReferentialIntegrity "city,state" "reference.{ref_city,ref_state}" > avg(last(10))`
+ `ReferentialIntegrity "city,state" "reference.{ref_city,ref_state}" between min(last(10)) - 1 and max(last(10)) + 1`