

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

 FileFreshness を使用すると、指定した条件に基づいてデータファイルが最新になります。データファイルまたはフォルダ全体が最新であることを確認するために、ファイルの最終変更時刻を使用します。

 このルールは 2 つのメトリクスを収集します: 
+ 設定したルールに基づく FileFreshness コンプライアンス
+ ルールでスキャンされたファイル数

```
{"Dataset.*.FileFreshness.Compliance":1,"Dataset.*.FileCount":1} 
```

 異常検出では、これらのメトリクスは考慮されません。

 **ファイルの鮮度の確認** 

 次のルールは、過去 24 時間に tickets.parquet が作成されていることを保証します。

```
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/tickets.parquet" > (now() - 24 hours)
```

 **フォルダの鮮度の確認** 

 次のルールは、フォルダ内のすべてのファイルが過去 24 時間以内に作成または変更された場合に適用されます。

```
FileFreshness "s3://bucket/" >= (now() -1 days)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" >= (now() - 24 hours)
```

 **しきい値によるフォルダまたはファイルの鮮度の確認** 

 次のルールは、フォルダ「tickets」内のファイルの 10% が過去 10 日間に作成または変更された場合に適用されます。

```
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" < (now() - 10 days) with threshold > 0.1
```

 **特定の日付のファイルまたはフォルダの確認** 

 特定の日におけるファイルの鮮度を確認できます。

```
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > "2020-01-01"
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between "2023-01-01" and "2024-01-01"
```

 **ファイルまたはフォルダを時間とともに確認する** 

 FileFreshness を使用して、特定の時間に基づいてファイルが到着したことを確認できます。

```
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between now() and (now() - 45 minutes)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between "9:30 AM" and "9:30 PM"
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > (now() - 10 minutes)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > now()
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between (now() - 2 hours) and (now() + 15 minutes)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between (now() - 3 days) and (now() + 15 minutes)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between "2001-02-07" and (now() + 15 minutes)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > "21:45""
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > "2024-01-01"
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between "02:30" and "04:30"
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between "9:30 AM" and "22:15"
```

 主な考慮事項: 
+  FileFreshness では、日単位、時間単位、分単位を使用してファイルを評価できます 
+  時間については、午前/午後と 24 時間に対応しています 
+  上書きが指定されていない限り、時刻は UTC で計算されます 
+  日付は時刻 00:00 に UTC で計算されます 

 時間ベースの FileFreshness は次のように機能します。

```
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > "21:45"
```
+  まず、UTC 形式で時刻「21:45」と今日の日付を組み合わせて日時フィールドを作成します 
+  次に、日時は指定したタイムゾーンに変換されます 
+  最後に、このルールが評価されます 

 **オプションのファイルベースのルールタグ:** 

 タグを使用すると、このルールの動作を制御できます。

 **recentFiles** 

 このタグは、最新のファイルを最初に保持することで、処理されるファイルの数を制限します。

```
FileFreshness "s3://amzn-s3-demo-bucket/" between (now() - 100 minutes) and (now() + 10 minutes) with recentFiles = 1
```

 **uriRegex** 

**注記**  
 `uriRegex` タグは、AWS Glue 5.0 以降で有効です。

 このタグは、ファイルパスに正規表現パターンを適用してファイルをフィルタリングします。パスがパターンに一致するファイルのみが処理されます。負の先読みを使用して、パターンに一致するファイルを除外することもできます。

```
# Match only files with a .csv extension
FileFreshness "s3://amzn-s3-demo-bucket/" > (now() - 24 hours) with uriRegex = "\.csv$"
# Match Parquet files that contain "orders_" in the path
FileFreshness "s3://amzn-s3-demo-bucket/" > (now() - 24 hours) with uriRegex = ".*orders_.*\.parquet"
# Exclude files ending in .tmp using a negative lookahead
FileFreshness "s3://amzn-s3-demo-bucket/" > (now() - 24 hours) with uriRegex = "(?!.*\.tmp$).*"
```

 **filterOrder** 

**注記**  
 `filterOrder` タグは、AWS Glue 5.0 以降で有効です。

 `recentFiles` や `uriRegex` などの複数のフィルタータグを一緒に使用すると、それらが適用される順序が `filterOrder` タグにより制御されます。デフォルトの順序は最初が `recentFiles` で、次が `uriRegex` です。

```
FileFreshness "s3://amzn-s3-demo-bucket/" > (now() - 24 hours) with recentFiles = 1 with uriRegex = "inventory_" with filterOrder = ["uriRegex","recentFiles"]
```

 上記の例では、最初に「inventory\$1」に一致するファイルのみを選択するために `uriRegex` フィルターが適用され、次に、`recentFiles = 1` がそのフィルタリングされたセットから最新のファイルを取得します。`filterOrder` を使用しない場合、デフォルトの動作では、最初に 1 つの最新のファイルを取得し、次に正規表現を適用します。最新のファイルがパターンと一致しない場合は、一致するファイルが存在しない可能性があります。

**注記**  
 `filterOrder` リスト内のすべての値は、同じルールにも存在している他のフィルタータグ (`recentFiles` または `uriRegex`) を参照している必要があります。`timeZone` や `failFast` などの非フィルタータグは、`filterOrder` では無効です。

 **failFast** 

 `"true"` に設定すると、ルールは、すべてのファイルを評価して適合率を計算するのではなく、鮮度条件を満たしていないファイルに最初に遭遇した時点ですぐに失敗を返します。

```
FileFreshness "s3://amzn-s3-demo-bucket/" > (now() - 24 hours) with failFast = "true"
```

 **timeZone** 

 許可されたタイムゾーンの上書きについては、サポートされているタイムゾーンの「[Allowed Time Zones](https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html)」を参照してください。

```
FileFreshness "s3://path/" > "21:45" with timeZone = "America/New_York"
```

```
FileFreshness "s3://path/" > "21:45" with timeZone = "America/Chicago"
```

```
FileFreshness "s3://path/" > "21:45" with timeZone = "Europe/Paris"
```

```
FileFreshness "s3://path/" > "21:45" with timeZone = "Asia/Shanghai"
```

```
FileFreshness "s3://path/" > "21:45" with timeZone = "Australia/Darwin"
```

 **データフレームから直接ファイル名を推測する** 

 必ずしもファイルパスを指定する必要はありません。例えば、AWS Glue Data Catalog でルールを作成する場合、カタログテーブルが使用しているフォルダを見つけるのが難しい場合があります。 AWSGlue Data Quality は、データフレームへの入力に使用される特定のフォルダまたはファイルを検索し、それらが最新かどうかを検出できます。

**注記**  
 この機能は、ファイルが DynamicFrame または DataFrame に正常に読み取られた場合にのみ機能します。

```
FileFreshness > (now() - 24 hours)
```

 このルールは、動的フレームまたはデータフレームの入力に使用されるフォルダパスまたはファイルを検索します。これは、Amazon S3 パスまたは Amazon S3 ベースの AWS Glue Data Catalog テーブルで機能します。考慮事項がいくつかあります: 

1.  AWS Glue ETL では、Amazon S3 または AWS Glue Data Catalog 変換の直後に **[EvaluateDataQuality]** 変換が必要です。  
![\[このスクリーンショットは、Amazon S3 ノードに接続された Evaluate Data Quality ノードを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/data-quality-file-freshness.png)

1.  このルールは AWS Glue インタラクティブセッションでは機能しません。

 両方の場合でこれを試行した場合、または AWS Glue がファイルを見つけられなかった場合、AWS Glue は次のエラーがスローします: `“Unable to parse file path from DataFrame”` 