

# FileMatch


 FileMatch 规则允许您将文件与其他文件或校验和进行比较。这可能在一些方案中非常有用：

1.  验证从外部来源接收的文件：您可以使用 FileMatch 通过与校验和进行比较，确保从外部来源接收正确的文件。这有助于验证您所摄取数据的完整性。

1.  比较两个不同文件夹中的数据：FileMatch 可用于比较两个文件夹之间的文件。

 此规则收集一个指标：规则扫描的文件数。

```
{"Dataset.*.FileCount":1}
```

 **使用校验和验证文件：**

 FileMatch 接受一个文件和一组校验和，以确保至少有一个校验和与该文件匹配。

```
FileMatch "s3://amzn-s3-demo-bucket/file.json" in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "MD5"
FileMatch "s3://amzn-s3-demo-bucket/file.json" in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "SHA-1"
FileMatch "s3://amzn-s3-demo-bucket/file.json" in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "SHA-256"
FileMatch "s3://amzn-s3-demo-bucket/file.json" in ["3ee0d8617ac041793154713e5ef8f319"]
```

 支持下列标准算法：
+ MD5
+ SHA-1
+ SHA-256

 如果您不提供算法，则默认为 SHA-256。

 **使用一组校验和验证文件夹中的所有文件：**

```
FileMatch "s3://amzn-s3-demo-bucket /" in ["3ee0d8617ac041793154713e5ef8f319", "7e8617ac041793154713e5ef8f319"] with hashAlgorithm = "MD5"
FileMatch "s3://amzn-s3-demo-bucket /internal-folder/" in ["3ee0d8617ac041793154713e5ef8f319", "7e8617ac041793154713e5ef8f319"]
```

 **比较不同文件夹中的文件** 

```
# Compare all files across two buckets
FileMatch "s3://original_bucket/" "s3://archive_bucket/"
# Compare files within specific subfolders
FileMatch "s3://original_bucket/internal-folder/" "s3://original_bucket/other-folder/"
# Compare only .json files across two folders
FileMatch "s3://original_bucket/" "s3://archive_bucket/" with uriRegex = "\.json$"
# Compare only the 5 most recent .csv files
FileMatch "s3://original_bucket/" "s3://archive_bucket/" with recentFiles = 5 with uriRegex = "\.csv$" with filterOrder = ["uriRegex","recentFiles"]
```

 FileMatch 将检查 `original_bucket` 中文件的内容，并确保其与 `archive_bucket` 中的内容相匹配。如果不完全匹配，则该规则将失效。它还可以检查内部文件夹或单个文件的内容。

 FileMatch 还可以相互检查各个文件。

```
FileMatch "s3://amzn-s3-demo-bucket /file_old.json" "s3://amzn-s3-demo-bucket /file_new.json"
```

 **直接从数据帧推断文件名** 

 您不必总是提供文件路径。例如，当您在 Amazon Glue Data Catalog（由 Amazon S3 支持）中编写规则时，可能很难找到目录表使用的文件夹。AmazonGlue 数据质量自动监测功能可以找到用于填充数据帧的特定文件夹或文件。

**注意**  
 仅当文件成功读取到 DynamicFrame 或 DataFrame 时，此功能才起作用。

```
FileMatch in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "MD5"
FileMatch in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "SHA-1"
FileMatch in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "SHA-256"
FileMatch in ["3ee0d8617ac041793154713e5ef8f319"]
```

 如果提供的校验和与计算的校验和不同，则 FileMatch 将提醒您注意差异。

![\[屏幕截图显示 DQ 状态为规则失效的一条规则。FileMatch 说明失效的原因。\]](http://docs.amazonaws.cn/glue/latest/dg/images/data-quality-file-match.png)


 **可选的基于文件的规则标签：**

 通过标签，您可以控制规则行为。

 **recentFiles** 

 此标签通过将最新文件放在最前面，来限制处理的文件数。

```
FileMatch "s3://bucket/" in ["3ee0d8617ac04179sam4713e5ef8f319"] with recentFiles = 1
```

 **uriRegex** 

**注意**  
 `uriRegex` 标签在 Amazon Glue 5.0 及更高版本中可用。

 此标签通过对文件路径应用正则表达式模式来筛选文件。只有路径与该模式匹配的文件才会被处理。您也可以使用负向先行断言来排除与某个模式匹配的文件。

```
# Match only files with a .json extension
FileMatch "s3://bucket/" in ["3ee0d8617ac04179sam4713e5ef8f319"] with uriRegex = "\.json$"
# Exclude files ending in .tmp using a negative lookahead
FileMatch "s3://bucket/" in ["3ee0d8617ac04179sam4713e5ef8f319"] with uriRegex = "(?!.*\.tmp$).*"
```

 **filterOrder** 

**注意**  
 `filterOrder` 标签在 Amazon Glue 5.0 及更高版本中可用。

 当您同时使用多个筛选标签（例如 `recentFiles` 和 `uriRegex`）时，`filterOrder` 标签用来控制这些标签的应用顺序。默认顺序为首先应用 `recentFiles`，然后应用 `uriRegex`。

```
FileMatch "s3://bucket/" in ["3ee0d8617ac04179sam4713e5ef8f319"] with recentFiles = 1 with uriRegex = "\.json$" with filterOrder = ["uriRegex","recentFiles"]
```

 **matchFileName** 

 此标签可确保文件没有重复的名称。默认行为是 false。

```
FileMatch "s3://amzn-s3-demo-bucket/file.json" in ["3ee0d8617ac04179sam4713e5ef8f319"] with matchFileName = "true"
```

 有几个注意事项：

1.  在 Amazon Glue ETL 中，您必须在 Amazon S3 或 Amazon Glue Data Catalog 转换之后立即进行 **EvaluateDataQuality** 转换。  
![\[屏幕截图显示 DQ 状态为规则失效的一条规则。FileMatch 说明失效的原因。\]](http://docs.amazonaws.cn/glue/latest/dg/images/data-quality-file-match-transform.png)

1.  此规则在 Amazon Glue 交互式会话中不起作用。