

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用任務書籤追蹤處理的資料
<a name="monitor-continuations"></a>

AWS Glue 會持續保留前次執行 ETL 任務的狀態資訊，以追蹤在該任務執行期間所處理的資料。此保存狀態資訊稱為*任務書籤*。任務書籤可協助 AWS Glue 維護狀態資訊，以及防止重新處理舊資料。透過任務書籤，您可以在依排定間隔重新執行時處理新資料。任務書籤包括各種任務元素的狀態，例如來源、轉換和目標。例如，ETL 任務可能會讀取 Amazon S3 檔案中的新分割區。AWS Glue 會追蹤已由任務成功處理的分割區，避免重複處理以及任務目標資料存放區中出現重複的資料。

任務書籤實作於 JDBC 資料來源、Relationalize 轉換和部分 Amazon Simple Storage Service (Amazon S3) 來源。下表列出 AWS Glue 針對任務書籤支援的 Amazon S3 來源格式。


| AWS Glue 版本 | Amazon S3 來源格式 | 
| --- | --- | 
| 0.9 版 | JSON、CSV、Apache Avro、XML | 
| 1.0 版和更新版本 | JSON、CSV、Apache Avro、XML、Parquet、ORC | 

如需 AWS Glue 版本的詳細資訊，請參閱[定義 Spark 任務的任務屬性](add-job.md#create-job)。

透過 AWS Glue 指令碼存取時，任務書籤功能具有其他功能。瀏覽產生的指令碼時，您可能會看到與此功能相關的轉換內容。如需詳細資訊，請參閱[使用任務書籤](programming-etl-connect-bookmarks.md)。

**Topics**
+ [在 AWS Glue 中使用任務書籤](#monitor-continuations-implement)
+ [任務書籤功能的操作詳細資訊](#monitor-continuations-script)

## 在 AWS Glue 中使用任務書籤
<a name="monitor-continuations-implement"></a>

當任務開始之後，會將任務書籤選項當成參數傳遞。下表說明在 AWS Glue 主控台中設定任務書籤的選項。


****  

| 工作書籤 | Description | 
| --- | --- | 
| Enable | 讓任務在執行之後更新狀態，以追蹤先前處理的資料。如果您任務的來源具有任務書籤支援，則會追蹤已處理的資料，而且在任務執行時，會處理最後一個檢查點之後的新資料。 | 
| 停用 | 不會使用任務書籤，而且任務一律會處理整個資料集。您需負責管理之前工作執行的輸出。這是預設值。 | 
| 暫停 |  處理上次成功執行後的遞增資料，或由下列子選項識別範圍內的資料，而不更新最後一個書籤的狀態。您需負責管理之前工作執行的輸出。這兩個子選項是： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/monitor-continuations.html) 指定此選項組時，不會更新任務書籤狀態。 子選項是可選的，但是當使用時，必須提供這兩個子選項。  | 

有關在命令列傳遞至任務的參數 (特別是任務標籤) 的詳細資訊，請參閱 [在 Glue AWS 任務中使用任務參數](aws-glue-programming-etl-glue-arguments.md)。

若是 Amazon S3 輸入來源，AWS Glue 任務書籤會檢查物件的上次修改時間，以確認需要重新處理哪些物件。如果自上次任務執行之後已修改您的輸入來源資料，則在您重新執行任務時重新處理檔案。

如為 JDBC 來源，則適用的規定如下：
+ AWS Glue 會針對每個資料表使用一個或多個欄做為書籤索引鍵，以決定新資料和已處理的資料。書籤索引鍵結合在一起，形成單一複合索引鍵。
+ 依預設，AWS Glue 會使用主索引鍵作為書籤索引鍵，但條件是其依序遞增或遞減 (沒有間隙)。
+ 您可以指定要在 AWS Glue 指令碼中用作書籤索引鍵的資料欄。如需在 AWS Glue 指令碼中使用任務書籤的詳細資訊，請參閱 [使用任務書籤](programming-etl-connect-bookmarks.md)。
+ AWS Glue 不支援使用名稱區分大小寫的資料欄作為任務書籤索引鍵。

您可以將 AWS Glue Spark ETL 任務的任務書籤倒轉至任何之前的任務執行。現在，您可以透過將任務書籤倒轉至任何之前的任務執行，更好地支援資料回填方案，從而在後續的任務執行中，僅重新處理已加入書籤的任務執行中的資料。

如果您想要使用相同的任務來重新處理所有資料，則請重設任務書籤。若要重設任務書籤狀態，請使用 AWS Glue 主控台、[ResetJobBookmark 動作 (Python: reset\$1job\$1bookmark)](aws-glue-api-jobs-runs.md#aws-glue-api-jobs-runs-ResetJobBookmark) API 操作或 AWS CLI。例如，使用 AWS CLI輸入下列命令：

```
    aws glue reset-job-bookmark --job-name my-job-name
```

當您倒轉或重設書籤時，AWS Glue 不會清除目標檔案，因為可能有多個目標，且未使用任務書籤追蹤目標。只有來源檔案會使用任務書籤來追蹤。您可以在倒轉和重新處理來源檔案時建立不同的輸出目標，以避免輸出中的資料重複。

AWS Glue 會依任務來追蹤任務書籤。如果您刪除任務，任務書籤將不會保留。

在某些情況下，您可能已啟用 AWS Glue 任務書籤，但 ETL 任務正在重新處理已在稍早執行中處理的資料。如需解決此錯誤常見原因的資訊，請參閱[對 Glue 常見設定錯誤進行故障診斷](glue-troubleshooting-errors.md)。

## 任務書籤功能的操作詳細資訊
<a name="monitor-continuations-script"></a>

本節說明如何使用任務書籤的更多操作詳細資訊。

任務書籤會存放任務的狀態。都會依任務名稱和版本號碼輸入狀態的每個執行個體。指令碼呼叫 `job.init` 時，會擷取其狀態，而且一律會取得最新版本。在狀態內，有多個狀態元素，即指令碼中每個來源、轉換和目的地執行個體所特有的。這些狀態元素是依連接到指令碼中對應元素 (來源、轉換或目的地) 的轉換內容所識別。從使用者指令碼呼叫 `job.commit` 時，會自動儲存狀態元素。指令碼會從引數取得任務名稱以及任務書籤的控制選項。

任務書籤中的狀態元素是來源、轉換或目的地特定的資料。例如，假設您想要從上游任務或程序持續寫入的 Amazon S3 位置讀取遞增資料。在此情況下，指令碼必須判斷到目前為止已處理哪些項目。Amazon S3 來源的任務書籤實作會儲存資訊，因此，在重新執行任務時，只能使用儲存的資訊來篩選新物件，以及重新計算下次執行任務的狀態。時間戳記用來篩選新的檔案。

除了狀態元素之外，任務書籤還會有*執行次數*、*嘗試次數*和*版本號碼*。執行次數會追蹤任務的執行，而嘗試次數會記錄任務執行的嘗試。任務執行次數是每次成功執行所遞增的依序增加數目。嘗試次數會追蹤每次執行的嘗試，而且只有在失敗嘗試之後執行時才會遞增。版本號碼會依序遞增，並追蹤任務書籤的更新。

在 AWS Glue 服務資料庫中，所有轉換的書籤狀態會儲存為索引鍵/值對：

```
{
  "job_name" : ...,
  "run_id": ...,
  "run_number": ..,
  "attempt_number": ...
  "states": {
    "transformation_ctx1" : {
      bookmark_state1
    },
    "transformation_ctx2" : {
      bookmark_state2
    }
  }
}
```

**最佳實務**  
下列是使用任務書籤的最佳實務。
+ *不要在已啟用書籤的情況下更改資料來源屬性*。例如，有一個資料來源 0 指向 Amazon S3 輸入路徑 A，且該任務啟用了書籤並從已執行了好幾輪的來源進行讀取。如果您將資料來源 0 的輸入路徑變更為 Amazon S3 路徑 B，而不變更 `transformation_ctx`， AWS Glue 任務將使用儲存的舊書籤狀態。這會導致輸入路徑 B 中的檔案遺失或略過檔案， AWS Glue 如同假設這些檔案已在先前的執行中處理過一樣。
+ *使用帶有書籤的目錄表，以便更好地管理分割區*。書籤既適用於 Data Catalog 中的資料來源，也適用於來自選項的資料來源。但是，使用來自選項的方法會難以刪除/新增分割區。將目錄表與爬蟲程式結合使用可以提供更好的自動化來追蹤新增的[分割區](https://docs.aws.amazon.com/glue/latest/dg/tables-described.html#tables-partition)，並可讓您靈活地使用 [pushdown 述詞](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-partitions.html)選擇特定的分割區。
+ *將 [AWS Glue Amazon S3 檔案清單建立工具](https://aws.amazon.com/premiumsupport/knowledge-center/glue-oom-java-heap-space-error/)用於大型資料集*。書籤將列出每個輸入分割區下的所有檔案並執行篩選，因此如果單個分割區下的檔案太多，書籤可能會遇到驅動程式 OOM 的問題。使用 AWS Glue Amazon S3 檔案清單工具，避免一次列出記憶體中的所有檔案。