

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

# 建置視覺化的 ETL 任務
<a name="author-job-glue"></a>

## 使用 建置視覺化 ETL 任務 AWS Glue Studio
<a name="build-etl-jobs-glue-studio"></a>

 AWS Glue Studio 提供視覺化界面，用於在其中建立、執行和監控Extract/Transform/Load (ETL) 任務 AWS Glue。中的任務 AWS Glue 包含執行擷取、轉換和載入 (ETL) 工作的商業邏輯。使用 AWS Glue Studio，您可以視覺化地編寫資料轉換工作流程，並在 AWS Glue Apache Spark 型無伺服器 ETL 引擎上順暢地執行它們。您可以使用拖放式介面建立在各種資料存放區與串流之間移動和轉換資料的任務，而無需學習 Spark 或編寫程式碼。

AWS Glue 任務封裝了一個指令碼，會連線至您的來源資料、處理資料，然後將它寫出至您的資料目標。一般而言，任務會執行擷取、轉換和載入 (ETL) 指令碼。任務可以執行專為 Apache Spark 和 Ray 執行期環境設計的指令碼。任務也可以執行一般用途 Python 指令碼 (Python shell 任務） AWS Glue觸發程序，可根據排程或事件或隨需啟動任務。您可以監控任務執行以了解執行時間指標，例如完成狀態、持續時間和開始時間。

您可以使用 AWS Glue 產生的指令碼，也可以提供自己的指令碼。藉助來源結構描述以及目標位置或結構描述，AWS Glue Studio 程式碼產生器可自動建立 Apache Spark API (PySpark) 指令碼。您可以將此指令碼做為起點，編輯其內容以符合您的目標。

AWS Glue 可以寫入多種資料格式的輸出檔案。每種任務類型可支援不同的輸出格式。某些資料格式也可寫入常見的壓縮格式。

### 在 AWS 主控台中管理 AWS Glue 任務
<a name="console-jobs"></a>

若要檢視現有的任務，請登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 開啟 AWS Glue主控台。接著，請在 AWS Glue 中選擇 **Jobs (工作)** 索引標籤。**Jobs** (任務) 清單會顯示與每項任務相關指令碼的位置、任務最近修改的時間，以及目前的任務書籤選項。

 您可以在 AWS Glue 主控台的 **ETL** 區塊中建立工作。建立新任務時，或儲存任務後，您可以使用 AWS Glue Studio 修改您的 ETL 任務。您可以在視覺化編輯器中編輯節點，或在開發人員模式中編輯任務指令碼來執行此動作。您也可以在視覺化編輯器中新增和移除節點，以建立更複雜的 ETL 任務。

### 在 AWS Glue Studio 中建立任務的後續步驟
<a name="create-jobs-next"></a>

您可以使用視覺化任務編輯器來設定任務的節點。每個節點代表一個動作，例如從源位置讀取資料或應用轉換到資料。您新增至任務的每個節點都具有提供資料位置或轉換相關資訊的屬性。

建立和管理任務的後續步驟如下：
+ [在 AWS Glue Studio 中啟動視覺化的 ETL 任務](edit-nodes-chapter.md)
+ [檢視任務指令碼](managing-jobs-chapter.md#view-job-script)
+ [修改任務屬性](managing-jobs-chapter.md#edit-jobs-properties)
+ [儲存任務](managing-jobs-chapter.md#save-job)
+ [開始任務執行](managing-jobs-chapter.md#start-jobs)
+ [檢視最近任務執行的資訊](managing-jobs-chapter.md#view-job-run-details)
+ [存取任務監控儀表板](view-job-runs.md#monitoring-accessing-dashboard)

## 使用 Amazon SageMaker 建置視覺化的 ETL 流程
<a name="build-etl-jobs-smus"></a>

 使用 Amazon SageMaker Unified Studio 工作流程，您可以在 Amazon SageMaker Unified Studio 中設定和執行一系列任務。Amazon SageMaker Unified Studio 工作流程使用 Apache Airflow 來建立資料處理程序的模型，並協調您的 Amazon SageMaker Unified Studio 程式碼成品。如需詳細資訊，請參閱[在 Amazon SageMaker Unified Studio 中使用工作流程](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/workflow-orchestration.html)。

# 在 AWS Glue Studio 中啟動視覺化的 ETL 任務
<a name="edit-nodes-chapter"></a>

您可以使用 AWS Glue Studio 中簡單的視覺介面來建立您的 ETL 任務。您使用 **Jobs (任務)** 頁面以建立新任務。您也可以使用指令碼編輯器或筆記本直接使用 AWS Glue Studio ETL 任務指令碼。

在 **Jobs** (任務) 頁面上，您可以查看您使用 AWS Glue Studio 或 AWS Glue 建立的所有任務。您可以在此頁面上檢視、管理和執行您的任務。

 另請參閱[部落格教學課程](https://aws.amazon.com/blogs/big-data/making-etl-easier-with-aws-glue-studio/)，了解關於如何使用 AWS Glue Studio 建立 ETL 任務的另一個範例。

## 在 AWS Glue Studio 中啟動任務
<a name="create-jobs-start"></a>

 AWS Glue 可讓您透過視覺化介面、互動式程式碼筆記本或指令碼編輯器來建立任務。您可以按一下任何選項來啟動任務，或根據範例任務建立新任務。

 範例任務會使用您選擇的工具建立任務。例如，範例任務可讓您建立視覺化 ETL 任務以將 CSV 檔案聯結至型錄資料表，或是在使用 pandas 時，於互動式程式碼筆記本中使用 AWS Glue for Ray 或 AWS Glue for Spark 建立任務，或使用 SparkSQL 在互動式程式碼筆記本中建立任務。

### 在 AWS Glue Studio 中從頭開始建立任務
<a name="create-jobs-start-from-scratch"></a>

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/gluestudio/](https://console.aws.amazon.com/gluestudio/) 開啟 AWS Glue Studio主控台。

1.  從導覽窗格中選擇 **ETL 任務**。

1.  在**建立任務**區段中，選取任務的組態選項。  
![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/sample-jobs.png)

    用於從頭開始建立任務的選項：
   +  **視覺化 ETL**：在專注於資料流程的視覺化介面中進行撰寫 
   +  **使用互動式程式碼筆記本進行撰寫**：在以 Jupyter 筆記本為基礎的筆記本介面中以互動方式撰寫任務 

      選取此選項時，您必須在建立筆記本撰寫工作階段之前提供其他資訊。如需如何指定此資訊的詳細資訊，請參閱 [AWS Glue Studio 中的筆記本入門](notebook-getting-started.md)。
   + **使用指令碼編輯器撰寫程式碼**：對於熟悉 ETL 指令碼程式設計和撰寫的人，選擇此選項來建立新的 Spark ETL 任務。選擇引擎 (Python shell、Ray、Spark (Python) 或 Spark (Scala))。然後，選擇**重新開始**或**上傳指令碼**，從本機檔案上傳現有的指令碼。如果您選擇使用指令碼編輯器，則無法使用視覺化任務編輯器設計或編輯任務。

     Spark 任務在由 AWS Glue 管理的 Apache Spark 環境中執行。預設情況下，新指令碼以 Python 編碼。若要編寫新的 Scala 指令碼，請參閱[在 AWS Glue Studio 中建立和編輯 Scala 指令碼](edit-nodes-script.md#edit-job-scala-script)。

### 在 AWS Glue Studio 中從範例任務建立任務
<a name="create-jobs-start-from-example-job"></a>

 您可以選擇從範例任務建立任務。在**範例任務**區段中，選擇範例任務，然後選擇**建立範例任務**。從其中一個選項建立範例任務會提供您可以使用的快速範本。

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/gluestudio/](https://console.aws.amazon.com/gluestudio/) 開啟 AWS Glue Studio主控台。

1.  從導覽窗格中選擇 **ETL 任務**。

1.  選取用於從範例任務建立任務的選項：
   +  **聯結多個來源的視覺化 ETL 任務**：讀取三個 CSV 檔案、合併資料、變更資料類型，然後將資料寫入 Amazon S3 並對其進行編目以供日後查詢。
   +  **使用 Pandas 的 Spark 筆記本**：使用與 Spark 相結合的流行 Pandas 架構，探索和視覺化資料。
   +  **使用 SQL 的 Spark 筆記本**：透過 SQL 快速開始使用 Apache Spark。透過 AWS Glue Data Catalog 存取資料，並使用熟悉的命令轉換資料。

1. 選擇**建立範例任務**。

# 任務編輯器功能
<a name="job-editor-features"></a>

任務編輯器提供下列功能，用以建立和編輯任務。
+ 任務的視覺化圖表，每個任務任務都有一個節點：用於讀取資料的資料來源節點；用於修改資料的轉換節點；用於寫入資料的資料目標節點。

  您可以在任務圖表中檢視和設定每個節點的屬性。您也可以檢視任務圖表中每個節點的結構描述和範例資料。這些功能可協助您驗證任務是否正在以正確的方式修改和轉換資料，而不必執行任務。
+ [Script viewing and editing (指令碼檢視和編輯)] 索引標籤，您可以在其中修改為任務產生的程式碼。
+ [Job details (任務詳細資訊)] 索引標籤，您可以在其中設定各種設定，以自訂 AWS Glue ETL 任務執行的環境。
+ 「[Runs (執行)] 索引標籤，您可以在此檢視任務的目前和先前執行、檢視任務執行的狀態，以及存取任務執行的記錄。
+ 「資料品質」標籤，您可在其中將資料品質規則套用至任務。
+ [Schedules (排程)] 索引標籤，您可以在其中設定任務的開始時間，或設定週期性任務執行。
+ 「版本控制」標籤，您可在其中設定 Git 服務，以搭配任務使用。

## 在視覺化任務編輯器中使用結構描述預覽
<a name="schema-previews"></a>

建立或編輯任務時，您可以使用 **Output schema (輸出結構描述)** 索引標籤來檢視您資料的結構描述。

在查看結構描述之前，任務編輯器需要存取資料來源的許可。您可以在編輯器的 [Job details (任務詳細資訊)] 索引標籤或節點的 **Output schema (輸出結構描述)** 索引標籤中指定 IAM 角色。如果 IAM 角色具有存取資料來源的所有必要許可，則您可以在節點的 **Output schema (輸出結構描述)** 索引標籤檢視結構描述。

## 在視覺化任務編輯器中使用資料預覽
<a name="data-previews"></a>



[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/EqmljEWlp0c/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/EqmljEWlp0c)




資料預覽可協助您使用資料範例建立和測試任務，而不必重複執行任務。透過使用資料預覽，您可以：
+ 測試 IAM 角色，以確保您可以存取資料來源或資料目標。
+ 檢查轉換是否以預期的方式修改資料。例如，如果您使用篩選器轉換，您可以確定篩選器選取正確的資料子集。
+ 檢查資料。如果您的資料集包含具有多種類型值的欄，則資料預覽會顯示這些欄的元組清單。每個元組會包含資料類型及其值。

**注意**  
 如果您使用資料預覽工作階段和自訂 SQL 或自訂程式碼節點，資料預覽工作階段會依原樣執行整個資料集的 SQL 或程式碼區塊。

 建立或編輯任務時，您可以使用任務畫布下方的**資料預覽**標籤來檢視您的資料範例。當任務上已設定角色或帳戶中已設定預設 IAM 角色時，新的資料預覽任務階段將自動啟動。如果先前尚未設定角色，您可以透過選取角色來啟動工作階段。

**注意**  
 您針對資料預覽任務階段所選擇的角色亦將用於任務。



 您可以按一下資訊圖示，查看工作階段的狀態和進度，以及工作階段詳細資料。

 當工作階段準備就緒時，AWS Glue Studio 將會載入所選節點的資料。您可以在進行時檢視**完成百分比**。

![\[螢幕擷取畫面顯示已啟動之節點的「資料預覽」索引標籤。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/data-preview-progress.png)


 當您撰寫視覺化任務時，AWS Glue Studio 將會在您切換**輸出結構描述**索引標籤中的**推論任務階段的結構描述**時，自動更新選取之節點的結構描述。

![\[螢幕擷取畫面顯示已啟動之節點的「資料預覽」索引標籤。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/data-preview-output-schema.png)


 設定資料預覽偏好設定：

選擇設定圖示 (齒輪符號)，以設定資料預覽的偏好設定。這些設定適用於任務圖表中的所有節點。您可以：
+ 選擇將文字從一行換至下一行。此選項預設為啟用。
+ 變更列數 (預設為 200) 
+ 選擇 IAM 角色或視需要建立 IAM 角色
+ 選擇在您撰寫任務時自動開始新的任務階段。這會在撰寫任務時佈建新的互動式工作階段。**此設定會在帳戶層級套用。**完成設定後，便會在編輯任何任務時套用至您帳戶中的所有使用者。
+ 選擇自動推論結構描述。系統會針對選取的節點自動推論輸出結構描述
+ 選擇自動匯入 AWS Glue 程式庫。此功能相當實用，可在新增需要工作階段重新啟動的轉換時，防止資料預覽重新啟動新的工作階段

 其他功能包括：
+ 選擇 **Previewing x of y fields (預覽 y 欄位中的 x)** 按鈕以選取要預覽的欄 (欄位)。當您使用預設設定來預覽資料時，任務編輯器會顯示資料集的前 5 欄。您可以將此變更為全部顯示或全不顯示 (不建議使用)。
+ 水平和垂直捲動資料預覽視窗。
+ 使用最大化按鈕，將「資料預覽」標籤展開至覆蓋任務圖表，以便進一步檢視資料和資料結構。同樣地，請使用最小化按鈕將「資料預覽」標籤最小化。您也可以抓取控點窗格並向上拖曳，以展開**資料預覽**標籤。  
![\[螢幕擷取畫面顯示了最小化和最大化按鈕反白顯示的「資料預覽」窗格，以及可用於垂直擴展「資料預覽」窗格的控點窗格。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/data-preview-maximize-handle.png)
+ 使用**結束工作階段**來停止資料預覽。在您停止工作階段時，可以選擇新的 IAM 角色，並設定其他設定 (例如開啟或關閉設定以自動啟動新工作階段、推斷結構描述，或匯入 AWS Glue 程式庫)，然後再次啟動工作階段。

## 使用資料預覽時的限制
<a name="data-preview-limits"></a>

當您使用資料預覽時，可能會遇到下列限制。
+ 第一次選擇 [Data preview (資料預覽)] 索引標籤時，您必須選擇 IAM 角色。此角色必須具有必要的許可，才能存取建立資料預覽所需的資料和其他資源。
+ 提供 IAM 角色之後，需要一段時間才能檢視資料。對於資料少於 1 GB 的資料集，最多可能需要一分鐘的時間。如果您有大型資料集，您應該使用分割區來改善載入時間。直接從 Amazon S3 載入資料具有最佳效能。
+ 如果您有非常大的資料集，而且查詢用於資料預覽的資料需要超過 15 分鐘，請求將會逾時。資料預覽有 30 分鐘的閒置逾時時間。若要減少此情況，請縮減資料集大小以使用資料預覽。
+ 依預設，您會在「資料預覽」標籤中看到前 50 個資料欄。如果欄沒有資料值，您會收到一則訊息，指出沒有資料可顯示。您可以增加取樣的列數，或選取不同的欄以查看資料值。
+ 資料預覽目前不支援串流資料來源或使用自訂連接器的資料來源。
+ 一個節點上的錯誤會影響整個任務。如果任何一個節點在資料預覽中發生錯誤，則錯誤將會顯示在所有節點上，直到您修正為止。
+ 如果您變更任務的資料來源，則可能需要更新該資料來源的子節點以符合新的結構描述。例如，如果您有可修改欄的 ApplyMapping 節點，而該欄不存在於取代資料來源中，則需要更新 ApplyMapping 轉換節點。
+ 如果您檢視 SQL 查詢轉換節點的 [Data preview (資料預覽)] 索引標籤，且 SQL 查詢使用不正確的欄位名稱，則 [Data preview (資料預覽)] 索引標籤會顯示錯誤。

## 指令碼程式碼產生
<a name="code-gen"></a>

使用視覺化編輯器建立任務時，會自動為您產生 ETL 程式碼。AWS Glue Studio 會建立功能完整的任務指令碼，並將其儲存在 Amazon S3 位置。

AWS Glue Studio 產生兩種形式的程式碼：原始版本或經典版本，以及更新的簡化版本。依預設，使用新的程式碼產生器建立任務指令碼。您可以使用 **Script** (指令碼) 索引標籤上的經典程式碼產生器產生任務指令碼，方法是選擇 **Generate classic script** (產生經典指令碼) 切換按鈕。

在新版本的產生程式碼中，一些差異包括：
+ 大型註解區塊不再新增至指令碼
+ 程式碼中的輸出結構會使用您在視覺化編輯器中指定的節點名稱。在類別指令碼中，輸出結構只是命名為 `DataSource0`、`DataSource1`、`Transform0`、`Transform1`、`DataSink0`、`DataSink1`，以此類推。
+ 長命令會分割成多行，以避免為檢視完整命令而捲動頁面。

AWS Glue Studio 中的新功能需要新版本的程式碼產生，並且不適用於經典程式碼指令碼。當您嘗試執行這些任務時，系統會提示您更新任務。

# 使用 AWS Glue 受管轉換來轉換資料
<a name="edit-jobs-transforms"></a>

 AWS Glue Studio 會提供兩種類型的轉換：
+  **AWS Glue 原生轉換** – 適用於所有使用者，並由 AWS Glue 管理。
+  **自訂視覺化轉換** – 允許您上傳自己的轉換以在 AWS Glue Studio 中使用 

## AWS Glue 受管資料轉換節點
<a name="edit-jobs-transforms-glue-managed"></a>

AWS Glue Studio 提供一組內建轉換，讓您用於處理資料。您的資料從任務圖表中的一個節點傳遞到稱為 `DynamicFrame` 的資料結構中的另一個節點，這是 Apache Spark SQL `DataFrame` 的擴展。

在任務的預先填入圖表中，資料來源和資料目標節點之間是**變更結構描述**轉換節點。您可以設定此轉換節點來修改資料，也可以使用其他轉換。

AWS Glue Studio 提供以下內建轉換：
+ **[ChangeSchema](transforms-configure-applymapping.md)**：將資料來源中的資料屬性索引鍵映射至資料目標中的資料屬性索引鍵。您可以重新命名索引鍵、修改索引鍵的資料類型，以及選擇要從資料集中捨棄哪些索引鍵。
+ **[SelectFields](transforms-configure-select-fields.md)**：選擇您要保留的資料屬性索引鍵。
+ **[DropFields](transforms-configure-drop-fields.md)**：選擇您要捨棄的資料屬性索引鍵。
+ **[RenameField](transforms-configure-rename-field.md)**：重新命名單一資料屬性索引鍵。
+ **[Spigot](transforms-configure-spigot.md)**：將資料範例寫入 Amazon S3 儲存貯體。
+ **[Join](transforms-configure-join.md)**：使用指定資料屬性索引鍵上的比較片語，將兩個資料集聯結為一個資料集。可以使用內、外、左、右、左半、左反聯結。
+ **[聯集](transforms-configure-union.md)**：合併多個具有相同結構描述之資料來源的資料列。
+ **[SplitFields](transforms-configure-split-fields.md)**：將資料屬性索引鍵分成兩個 `DynamicFrames`。輸出是 `DynamicFrames` 的集合：一個具有所選資料屬性索引鍵，另一個具有其餘資料屬性索引鍵。
+ **[SelectFromCollection](transforms-selectfromcollection-overview.md)**：請從 `DynamicFrames` 集合選擇一個 `DynamicFrame`。輸出為所選的 `DynamicFrame`。
+ **[FillMissingValues](transforms-configure-fmv.md)**：尋找遺失值之資料集中的記錄，並新增具有由插補決定建議值的新欄位。
+ **[Filter](transforms-filter.md)** (篩選條件)：根據篩選條件，將資料集分割成兩個。
+  **[刪除 null 欄位](transforms-dropnull-fields.md)**：如果資料行中的所有值都為 "null"，則從資料集中刪除此行。
+  **[刪除重複項](transforms-drop-duplicates.md)**：選擇符合整個資料列或指定索引鍵，從資料來源中移除資料列。
+ **[SQL](transforms-sql.md)**：在文字輸入欄位中輸入 SparkSQL 程式碼，以使用 SQL 查詢來轉換資料。輸出是一個單一 `DynamicFrame`。
+  **[彙總](transforms-aggregate-fields.md)**：在選定的欄位和列上執行計算 (例如平均值、總和、最小值、最大值)，並建立一個新欄位來包含新計算的值。
+ **[壓平合併](transforms-flatten.md)**：將結構內的欄位擷取到頂層欄位。
+ **[UUID](transforms-uuid.md)**：針對每個資料列新增具有通用不重複識別碼的資料欄。
+ **[識別符](transforms-identifier.md)**：針對每個資料列新增含有數字識別符的資料欄。
+ **[時間戳記](transforms-to-timestamp.md)**：將資料欄轉換為時間戳記類型。
+ **[格式化時間戳記](transforms-format-timestamp.md)**：將時間戳記資料欄轉換為格式化字串。
+ **[條件式路由器轉換](transforms-conditional-router.md)**：對傳入資料套用多個條件。傳入資料的每個資料列均依據群組篩選條件進行評估，並將其處理到其對應的群組。
+  **[串連資料欄轉換](transforms-concatenate-columns.md)**：使用具有選用間隔符號之其他資料欄的值來構建新的字串資料欄。
+  **[分割字串轉換](transforms-split-string.md)**：使用規則運算式將字串分解為字符陣列，以定義分割方式。
+  **[陣列至資料欄轉換](transforms-array-to-columns.md)**：將陣列類型之資料欄的部分或全部元素擷取到新資料欄中。
+  **[新增目前時間戳記轉換](transforms-add-current-timestamp.md)**：以處理資料的時間來標記資料列。這對於稽核目的或追蹤資料管道中的延遲非常實用。
+  **[樞紐資料列至資料欄轉換](transforms-pivot-rows-to-columns.md)**：透過旋轉成為新資料欄的所選資料欄上的唯一值來彙總數值。如果選取多資料欄，則會串連這些值以命名新資料欄。
+  **[取消樞紐資料欄至資料列](transforms-unpivot-columns-to-rows.md)**：將資料欄轉換為新資料欄的值，並為每個唯一值產生一個資料列。
+  **[自動平衡處理轉換](transforms-autobalance-processing.md)**：在工作者之間更好地重新分發資料。這對資料不平衡或其來源不允許進行足夠平行處理的情況非常實用。
+  **[衍生資料欄轉換](transforms-derived-column.md)**：根據數學公式或 SQL 運算式定義新資料欄，您可以在其中使用資料中的其他資料欄，以及常數和常值。
+  **[查詢轉換](transforms-lookup.md)**：當索引鍵符合資料中定義的查詢資料欄時，從已定義的目錄資料表新增資料欄。
+  **[分解陣列或映射成資料列轉換](transforms-explode-array.md)**：將巢狀結構中的值擷取到更容易操作的個別資料列中。
+  **[記錄比對轉換](transforms-record-matching.md)**：調用現有的記錄比對機器學習資料分類轉換。
+  **[移除 Null 資料列轉換](transforms-remove-null-rows.md)**：從所有資料欄為 Null 或空白的資料集資料列移除。
+  **[解析 JSON 資料欄轉換](transforms-parse-json-column.md)**：解析包含 JSON 資料的字串資料欄，並將其轉換為結構或陣列資料欄，具體取決於 JSON 是物件還是陣列。
+  **[擷取 JSON 路徑轉換](transforms-extract-json-path.md)**：從 JSON 字串資料欄擷取新資料欄。
+  **[從規則運算式中擷取字串片段](transforms-regex-extractor.md)**：使用規則運算式擷取字串片段，並從中建立新資料欄，或在使用規則運算式組時建立多個資料欄。
+ **[Custom transform](transforms-custom.md)** (自訂轉換)：在文字輸入欄位中輸入程式碼，以使用自訂轉換。輸出是 `DynamicFrames` 的集合。

# 在 AWS Glue Studio 中使用資料準備配方
<a name="glue-studio-data-preparation"></a>

 **資料準備配方**轉換可讓您使用互動式網格樣式撰寫介面，從頭開始撰寫資料準備配方。其還允許您匯入現有的 AWS Glue DataBrew 配方，然後在 AWS Glue Studio中編輯其。

 您可以從「資源」面板取得**資料準備配方**節點。您可以將**資料準備配方**節點連線至視覺化工作流程中的另一個節點，無論它是資料來源節點還是其他轉換節點。選擇 AWS Glue DataBrew 配方和版本後，配方中套用的步驟會顯示在節點屬性索引標籤中。

## 先決條件
<a name="glue-studio-databrew-prerequisites"></a>
+  如果匯入 AWS Glue DataBrew 配方，您會擁有必要的 IAM 許可，如 [在 中匯入 AWS Glue DataBrew 配方 AWS Glue Studio](glue-studio-data-preparation-import-recipe.md) 中所述。
+  必須建立資料預覽工作階段。

## 限制
<a name="glue-studio-databrew-limitations"></a>
+  AWS Glue DataBrew 配方僅支援[商業 DataBrew 區域](https://docs.aws.amazon.com/general/latest/gr/databrew.html)。
+  並非所有 AWS Glue DataBrew 配方都受 支援AWS Glue。某些配方無法在 AWS Glue Studio 中執行。
  +  不支援具有 `UNION` 和 `JOIN` 轉換的配方，但是，AWS Glue Studio 已具有「聯結」和「聯集」轉換節點，可用於**資料準備配方**節點之前或之後。
+  從 AWS Glue 4.0 版開始的任務支援**資料準備配方**節點。將**資料準備配方**節點新增至任務後，系統會自動選取此版本。
+  **資料準備配方**節點需要使用 Python。當**資料準備配方**節點新增至任務時，會自動設定此選項。
+  將新的**資料準備配方**節點新增至視覺化圖表時，系統會自動使用正確的程式庫重新啟動您的資料預覽工作階段，以使用**資料準備配方**節點。
+  **資料準備配方**節點不支援匯入或編輯下列轉換：`GROUP_BY`、`PIVOT`、`UNPIVOT` 和 `TRANSPOSE`。

## 額外功能
<a name="glue-studio-data-preparation-recipe-transform-features"></a>

 選取**資料準備配方**轉換後，您可以在選擇**撰寫配方**之後採取其他動作。
+  新增步驟 – 您可以視需要透過選擇「新增步驟」圖示為配方新增其他步驟，或透過選擇一個動作來使用「預覽」窗格中的工具列。  
![\[螢幕擷取畫面顯示了「新增配方」圖示。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/add-recipe-icon.png)  
![\[螢幕擷取畫面顯示了「新增配方」圖示。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/author-recipe-toolbar.png)
+  匯入配方 – 選擇**更多**，然後選擇**匯入配方**以用於您的 AWS Glue Studio 任務。  
![\[螢幕擷取畫面顯示了更多圖示。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/data-preparation-recipe-node-more-icon.png)  
![\[螢幕擷取畫面顯示了更多圖示。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/data-preparation-recipe-node-more-features.png)
+  下載為 YAML – 選擇**更多**，然後選擇**下載為 YAML** 以下載您的配方，以在 外部儲存 AWS Glue Studio。
+  下載為 JSON – 選擇**更多**，然後選擇**下載為 JSON** 以下載您的配方，以在 外部儲存 AWS Glue Studio。
+  復原和重做配方步驟 – 使用網格中的資料時，您可以在「預覽」窗格中復原和重做配方步驟。  
![\[螢幕擷取畫面顯示了更多圖示。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/author-recipe-toolbar-undo-redo.png)

# 在視覺化 ETL AWS Glue 任務中撰寫和執行資料準備配方
<a name="glue-studio-data-preparation-recipe-transform-tutorial"></a>

 在此案例中，您可以撰寫資料準備配方，而不必先在 DataBrew 中建立配方。開始撰寫配方之前，您必須：
+  正在執行作用中資料預覽工作階段。在資料預覽工作階段處於 READY 狀態時，**撰寫配方**將變為作用中，您可以開始撰寫或編輯配方。  
![\[螢幕擷取畫面會將資料預覽工作階段顯示為完成。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/data-preparation-recipe-data-preview-complete.png)
+  確保已啟用**自動匯入 Glue 程式庫**的切換。  
![\[螢幕擷取畫面顯示「自動匯入 Glue 程式庫」已開啟的選項。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/data-preparation-recipe-automatically-import-glue-libraries.png)

   您可以在「資料預覽」窗格中選擇齒輪圖示來執行此操作。  
![\[螢幕擷取畫面顯示「自動匯入 Glue 程式庫」已開啟的選項。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/data-preview-preferences.png)

**若要在 AWS Glue Studio中撰寫資料準備配方，請執行以下操作：**

1.  將**資料準備配方**轉換新增至您的任務畫布。您的轉換應連接至資料來源節點父項。新增**資料準備配方**節點時，節點會使用適當的程式庫重新啟動，而且您會看到正在準備的資料框架。  
![\[螢幕擷取畫面顯示在新增資料準備配方之後的資料框架載入。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/data-preparation-preparing-dataframe.png)

1.  資料預覽工作階段準備就緒後，任何先前套用的步驟的資料會出現在畫面底部。

1.  選擇**撰寫配方**。這可讓您在 中啟動新的配方 AWS Glue Studio。  
![\[螢幕擷取畫面顯示「轉換」面板，其中包含名稱和節點父項的欄位，以及「撰寫配方」的選項。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/data-preparation-recipe-transform-tab-new.png)

1.  在任務畫布右側的**轉換**面板中，輸入您的資料準備配方的名稱。

1.  在左側，畫布將取代為您的資料的網格檢視。在右側，**轉換**面板會變更以顯示您的配方步驟。選擇**新增步驟**，以在配方中新增第一個步驟。  
![\[螢幕擷取畫面會在選擇「新增步驟」後顯示「轉換」面板。在您選擇資料欄時，選項會動態變更。您可以選擇排序、對資料欄採取動作，以及篩選值。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/author-recipe-preview-data-transform-panel.png)

1.  在**轉換**面板中，選擇排序、對資料欄採取動作，以及篩選值。例如，選擇**重新命名資料欄**。  
![\[螢幕擷取畫面會在選擇「新增步驟」後顯示「轉換」面板。在您選擇資料欄時，選項會動態變更。您可以選擇排序、對資料欄採取動作，以及篩選值。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/author-recipe-add-step.png)

1.  在右側的「轉換」面板中，重新命名資料欄的選項可讓您選擇要重新命名的來源資料欄，以及輸入新的資料欄名稱。完成後，選擇**套用**。

    您可以預覽每個步驟、復原步驟並重新排序步驟，然後使用任何動作圖示，例如篩選條件、排序、分區、合併等。在資料網格中執行動作時，步驟會新增至「轉換」面板中的配方。  
![\[螢幕擷取畫面顯示已反白顯示工具列的「預覽資料網格」。您可以使用任何工具來套用動作，並將其新增至右側的「轉換」面板中的配方。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/author-recipe-preview-data-grid.png)

    如果您需要進行變更，您可以透過預覽每個步驟的結果、復原步驟和重新排序步驟，在「預覽」窗格中執行此操作。例如：
   +  復原/重做步驟 – 選擇**復原**圖示來復原步驟。您可以選擇**重做**圖示來重複步驟。  
![\[螢幕擷取畫面顯示了更多圖示。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/author-recipe-toolbar-undo-redo.png)
   +  重新排序步驟 – 當您重新排序步驟時， AWS Glue Studio 會驗證每個步驟，並讓您知道步驟是否無效。

1.  套用步驟後，「轉換」面板會顯示配方中的所有步驟。您可以清除所有步驟以重新開始，透過選擇「新增」圖示來新增更多步驟，或選擇**完成撰寫配方**。  
![\[螢幕擷取畫面顯示「轉換」面板，其中包含新增至配方的步驟。完成後，選擇完成撰寫配方，或選擇「新增」圖示，將更多步驟新增至配方。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/author-recipe-done-authoring-recipe.png)

1.  選擇畫面右上角的**儲存**。在您儲存任務之前，系統不會儲存您的配方步驟。

# 在 中匯入 AWS Glue DataBrew 配方 AWS Glue Studio
<a name="glue-studio-data-preparation-import-recipe"></a>

 在 中 AWS Glue DataBrew，配方是一組資料轉換步驟。 AWS Glue DataBrew 配方會說明如何轉換已讀取的資料，且不描述讀取資料的位置和方法，以及如何寫入資料。此項在 AWS Glue Studio 的來源和目標節點中設定。如需配方的詳細資訊，請參閱[建立和使用 AWS Glue DataBrew 配方。 ](https://docs.aws.amazon.com/databrew/latest/dg/recipes.html)

 若要在 中使用 AWS Glue DataBrew 配方AWS Glue Studio，請從在 中建立配方開始 AWS Glue DataBrew。如果您已擁有要使用的配方，則可略過此步驟。

## 的 IAM 許可 AWS Glue DataBrew
<a name="glue-studio-databrew-permissions"></a>

 本主題提供的資訊可協助您了解 IAM 管理員在 AWS Identity and Access Management (IAM) 政策中可用於資料準備配方轉換的動作和資源。

 如需 中安全性的其他資訊 AWS Glue，請參閱[存取管理](https://docs.aws.amazon.com/glue/latest/dg/security.html)。

**注意**  
 下表列出使用者在匯入現有 AWS Glue DataBrew 配方時所需的許可。


**「資料準備配方」轉換動作**  

| Action | Description | 
| --- | --- | 
| databrew:ListRecipes | 准許擷取 AWS Glue DataBrew 配方。 | 
| databrew:ListRecipeVersions | 准許擷取 AWS Glue DataBrew 配方版本。 | 
| databrew:DescribeRecipe | 准許擷取 AWS Glue DataBrew 配方描述。 | 



 您用於存取此功能的角色應具有允許數個 AWS Glue DataBrew 動作的政策。您可以使用包含必要動作的 `AWSGlueConsoleFullAccess` 政策，或將下列內嵌政策新增至您的角色，來實現此目的：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "databrew:ListRecipes",
        "databrew:ListRecipeVersions",
        "databrew:DescribeRecipe"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------



 若要使用「資料準備配方」轉換，您必須將 `IAM:PassRole` 動作新增至許可政策。


**其他必要許可**  

| Action | Description | 
| --- | --- | 
| iam:PassRole | 授予 IAM 許可，以允許使用者傳遞核准的角色。 | 

如果沒有這些許可，會發生下列錯誤：

```
"errorCode": "AccessDenied"
"errorMessage": "User: arn:aws:sts::account_id:assumed-role/AWSGlueServiceRole is not 
authorized to perform: iam:PassRole on resource: arn:aws:iam::account_id:role/service-role/AWSGlueServiceRole 
because no identity-based policy allows the iam:PassRole action"
```



## 匯入 AWS Glue DataBrew 配方
<a name="glue-studio-databrew-import-steps"></a>

**若要匯入 AWS Glue DataBrew 配方並在 中使用 AWS Glue Studio：**

 如果您有現有的**資料準備配方**節點，而且想要直接在其中編輯配方步驟 AWS Glue Studio，則必須將配方步驟匯入您的 AWS Glue Studio 任務。

1.  使用資料來源啟動 AWS Glue Studio 中的 AWS Glue 任務。

1.  將**資料準備配方**節點新增至任務畫布。  
![\[螢幕擷取畫面顯示「新增節點」模態，其中包含可供選取的資料準備配方。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/glue-add-node-data-preparation-recipe.png)

1.  在「轉換」面板中，輸入配方的名稱。

1.  從下拉式清單中選取畫布上的可用節點，以選擇一或多個父節點。

1.  選擇**撰寫配方**。如果**撰寫配方**為灰色，則在選取節點父項且資料預覽工作階段完成之前不可用。  
![\[Author Data Preparation Recipe form with name field and node parents selection dropdown.\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/glue-author-data-preparation-recipe.png)

1.  資料框架會載入並顯示有關來源資料的詳細資訊。

    選取**更多動作**圖示，然後選擇**匯入配方**。  
![\[Data preparation interface showing "Build your Recipe" with an "Add step" button.\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/glue-dataframe-import-recipe.png)

1.  使用「匯入配方」精靈來完成步驟。在步驟 1 中，搜尋您的配方，選取其，然後選擇**下一步**。  
![\[Import recipe interface showing two recipes, with one selected for import.\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/import-recipe-step-1.png)

1.  在步驟 2 中，選擇您的匯入選項。您可以選擇「將新配方附加至現有配方」或「覆寫現有配方」。選擇**下一步**。  
![\[Import recipe interface showing selected recipe, version, and two imported steps.\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/import-recipe-step-2.png)

1.  在步驟 3 中，驗證配方步驟。匯入 AWS Glue DataBrew 配方後，您可以直接編輯此配方 AWS Glue Studio。  
![\[Recipe import interface showing two steps and a validation progress indicator.\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/import-recipe-step-3.png)  
![\[Import recipe interface showing validated steps for sorting and formatting data.\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/import-recipe-step-3-validated-2.png)

1.  之後，這些步驟將作為 AWS Glue 任務的一部分匯入。在**任務詳細資訊**索引標籤中進行必要的組態變更，例如命名任務和視需要調整配置的容量。選擇**儲存**以儲存您的任務和配方。
**注意**  
 JOIN、UNION、GROUP\$1BY、PIVOT、UNPIVOT、TRANSPOSE 不支援配方匯入，也不適用於配方撰寫模式。

1.  (選用) 視需要新增其他轉換節點來完成撰寫任務，並新增資料目標節點。

    如果您在匯入配方之後重新排序步驟， 會對這些步驟 AWS Glue 執行驗證。例如，如果您重新命名然後刪除資料欄，而且在頂端移動了刪除步驟，則重新命名步驟會無效。然後，您可以編輯步驟來修正驗證錯誤。

# 從 遷移 AWS Glue DataBrew 至 AWS Glue Studio
<a name="databrew-migration-to-glue-studio"></a>

 如果您在 中有配方 AWS Glue DataBrew，請使用下列檢查清單將您的配方遷移至 AWS Glue Studio。


| 如果您想要 | 則執行此操作 | 
| --- | --- | 
|  允許使用者擷取 AWS Glue DataBrew 配方、配方版本和配方描述。 |  將 IAM 許可新增至允許角色存取必要動作的政策。請參閱 [的 IAM 許可 AWS Glue DataBrew](glue-studio-data-preparation-import-recipe.md#glue-studio-databrew-permissions)。 | 
|  將現有 AWS Glue DataBrew 配方匯入 AWS Glue Studio。 |  請遵循 [匯入 AWS Glue DataBrew 配方](glue-studio-data-preparation-import-recipe.md#glue-studio-databrew-import-steps) 中的步驟。 | 
|  使用 JOIN 和 UNION 匯入配方。 |  不支援具有 UNION 和 JOIN 轉換的配方。在資料準備配方節點之前或之後，使用 AWS Glue Studio 中的聯結和聯集轉換。 | 

# 使用「變更結構描述」重新映射資料屬性索引鍵
<a name="transforms-configure-applymapping"></a>

*變更結構描述*轉換會將來源資料屬性索引鍵重新映射到目標資料所需的設定。在「變更結構描述」轉換節點中，您可以：
+ 變更多個資料屬性索引鍵的名稱。
+ 變更資料屬性索引鍵的資料類型 (如果支援新的資料類型，且兩種資料類型之間有轉換路徑)。
+ 透過指示要捨棄的資料屬性索引鍵來選擇資料屬性索引鍵的子集。

也可以根據需要新增額外的*變更結構描述*節點至任務圖表，例如修改其他資料來源，或遵循*聯結*轉換。

## 使用具有小數資料類型的變更結構描述
<a name="transforms-configure-applymapping-decimal-datatype"></a>

 使用具有小數資料類型的**變更結構描述**轉換時，**變更結構描述**轉換會將精確度修改為預設值 (10,2)。若要修改此值並設定使用案例的精確度，可以使用 **SQL 查詢**轉換，並以特定精確度轉換資料欄。

 例如，如果您擁有名為「DecimalCol」的輸入資料欄類型 Decimal，並且您想要將其重新映射到名為「OutputDecimalCol」且特定精確度為 (18,6) 的輸出資料欄，則您應該：

1.  在**變更結構描述**轉換之後新增後續的 **SQL 查詢**轉換。

1.  在 **SQL 查詢**轉換中，使用 SQL 查詢將重新映射的資料欄轉換為所需的精確度。SQL 查詢如下所示：

   ```
   SELECT col1, col2, CAST(DecimalCol AS DECIMAL(18,6)) AS OutputDecimalCol
   FROM __THIS__
   ```

    在上述 SQL 查詢中：
   +  `col1` 和 `col2` 是資料中的其他資料欄，您想要在不修改的情況下對其進行傳遞。
   +  `DecimalCol` 是輸入資料的原始資料欄名稱。
   +  `CAST(DecimalCol AS DECIMAL(18，6))` 會將 `DecimalCol` 轉換為 Decimal 類型，精確度為 18 位數，小數位數為 6 位。
   +  `AS OutputDecimalCol` 會將轉換的資料欄重新命名為 `OutputDecimalCol`。

 透過使用 **SQL 查詢**轉換，可以覆寫**變更結構描述**轉換設定的預設精確度，並明確地將 Decimal 資料欄轉換為所需的精確度。此方法可讓您利用**變更結構描述**轉換來重新命名和重組資料，同時透過後續 **SQL 查詢**轉換處理 Decimal 資料欄的精確度要求。

## 將「變更結構描述」轉換新增至您的任務
<a name="transforms-configure-applymapping-add-to-job"></a>

**注意**  
**變更結構描述**轉換不區分大小寫。

**將「變更結構描述」轉換節點新增至您的任務圖表**

1. (選用) 根據需要開啟資源面板，然後選擇**變更結構描述**，將新轉換新增至您的任務圖表。

1. 在節點屬性面板中，輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. 選擇節點屬性面板中的**轉換**索引標籤。

1. 修改輸入結構描述：
   + 若要重新命名資料屬性索引鍵，請在**目標索引鍵**欄位中輸入索引鍵的新名稱。
   + 若要變更資料屬性索引鍵的資料類型，請從**資料類型**清單中為索引鍵選擇新的資料類型。
   + 若要從目標結構描述移除資料屬性索引鍵，請選擇該索引鍵的**捨棄**核取方塊。

1. (選用) 設定轉換節點屬性之後，您可以選擇節點詳細資訊面板中的**輸出結構描述**索引標籤來檢視資料的修改後結構描述。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。如果您尚未在**任務詳細資訊**索引標籤上指定 IAM 角色，系統會提示您在此輸入 IAM 角色。

1. (選用) 設定節點屬性和轉換屬性之後，您可以選擇節點詳細資訊面板中的**資料預覽**索引標籤來預覽修改後的資料集。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。使用此功能需支付相關費用，並且在您提供 IAM 角色後立即開始計費。

# 使用「刪除重複項」
<a name="transforms-drop-duplicates"></a>

 「刪除重複項」轉換會為您提供兩個選項，以從資料來源中移除資料列。您可以選擇移除完全相同的重複資料列，也可以選擇要比對的欄位，并根据所選欄位僅移除這些資料列。

 例如，在此資料集中，您有重複的資料列，其中某些資料列中的所有值與另一資料列完全相同，而資料列中的某些值則相同或不同。


| Row | Name | Email | Age | State | 注意 | 
| --- | --- | --- | --- | --- | --- | 
| 1 | Joy | joy@gmail | 33 | NY |  | 
| 2 | Tim | tim@gmail | 45 | OH |  | 
| 3 | Rose | rose@gmail | 23 | NJ |  | 
| 4 | Tim | tim@gmail | 42 | OH |  | 
| 5 | Rose | rose@gmail | 23 | NJ |  | 
| 6 | Tim | tim@gmail | 42 | OH | 這是一個重複的資料列，並與第 4 資料列的所有值完全相符 | 
| 7 | Rose | rose@gmail | 23 | NJ | 這是一個重複的資料列，並與第 5 資料列的所有值完全相符 | 

 如果您選擇符合整個資料列，則會從資料集中移除第 6 資料列和第 7 資料列。資料集現在為：


| Row | Name | Email | Age | State | 
| --- | --- | --- | --- | --- | 
| 1 | Joy | joy@gmail | 33 | NY | 
| 2 | Tim | tim@gmail | 45 | OH | 
| 3 | Rose | rose@gmail | 23 | NJ | 
| 4 | Tim | tim@gmail | 42 | OH | 
| 5 | Rose | rose@gmail | 23 | NJ | 

 如果您選擇指定索引鍵，則可以選擇移除與 ‘name’ 和 ‘email’ 相符的資料列。這讓您可以更好地控制資料集的「重複資料列」。透過指定 ‘name’ 和 ‘email’，資料集現在為：


| Row | Name | Email | Age | State | 
| --- | --- | --- | --- | --- | 
| 1 | Joy | joy@gmail | 33 | NY | 
| 2 | Tim | tim@gmail | 45 | OH | 
| 3 | Rose | rose@gmail | 23 | NJ | 



 需要謹記的一些事項：
+  為了將資料列識別為重複項，值需區分大小寫。資料列中的所有值都需具有相同的大小寫，這適用於您選擇的任一選項 (符合整個資料列或指定索引鍵)。
+  所有值都會以字串形式讀入。
+  **刪除重複項**轉換使用 Spark dropDuplicates 命令。
+  使用**刪除重複項**轉換時，會保留第一個資料列，並刪除其他資料列。
+  **刪除重複項**轉換不會變更資料框的結構描述。如果您選擇指定索引鍵，則所有欄位都保留在產生的資料框中。

# 使用 SelectFields 移除大多數資料屬性索引鍵
<a name="transforms-configure-select-fields"></a>

您可以使用 *SelectFields* 轉換，從資料集建立資料屬性索引鍵的子集。您可以指定要保留的資料屬性索引鍵，其餘的項目會從資料集中移除。

**注意**  
*SelectFields* 轉換區分大小寫。如果您需要不區分大小寫的方式來選擇欄位，請使用 *ApplyMapping*。

**將 SelectFields 轉換節點新增至任務圖表**

1. (選用) 根據需要開啟資源面板，然後選擇 **SelectFields**，將新轉換新增至您的任務圖表。

1. 在 **Node properties (節點屬性)** 索引標籤上，輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. 選擇節點詳細資訊面板中的**轉換**索引標籤。

1. 在 **SelectFields** 標題下，選擇您想要保留的資料集中的資料屬性索引鍵。任何未選取的資料屬性索引鍵都會從資料集中捨棄。

   您也可以選擇欄標題**欄位**旁的核取方塊，自動選擇資料集中的所有資料屬性索引鍵。然後，您可以取消選取個別資料屬性索引鍵，將其從資料集中移除。

1. (選用) 設定轉換節點屬性之後，您可以選擇節點詳細資訊面板中的**輸出結構描述**索引標籤來檢視資料的修改後結構描述。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。如果您尚未在**任務詳細資訊**索引標籤上指定 IAM 角色，系統會提示您在此輸入 IAM 角色。

1. (選用) 設定節點屬性和轉換屬性之後，您可以選擇節點詳細資訊面板中的**資料預覽**索引標籤來預覽修改後的資料集。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。使用此功能需支付相關費用，並且在您提供 IAM 角色後立即開始計費。

# 使用 DropFields 保留大部分的資料屬性索引鍵
<a name="transforms-configure-drop-fields"></a>

您可以使用 *DropFields* 轉換，從資料集建立資料屬性索引鍵的子集。您可以指定要從資料集中移除的資料屬性索引鍵，並保留其餘的索引鍵。

**注意**  
*DropFields* 轉換區分大小寫。如果您需要不區分大小寫的方式來選取欄位，請使用*變更結構描述*。

**將 DropFields 轉換節點新增到您的任務圖表**

1. (選用) 根據需要開啟資源面板，然後選擇 **DropFields**，將新轉換新增至您的任務圖表。

1. 在**節點屬性**索引標籤上，輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. 選擇節點詳細資訊面板中的**轉換**索引標籤。

1. 在 **DropFields** 標題下，選擇要從資料來源捨棄的資料屬性索引鍵。

   您也可以選擇欄標題**欄位**旁的核取方塊，自動選擇資料集中的所有資料屬性索引鍵。然後，您可以取消選取個別資料屬性索引鍵，以便它們保留在資料集中。

1. (選用) 設定轉換節點屬性之後，您可以選擇節點詳細資訊面板中的**輸出結構描述**索引標籤來檢視資料的修改後結構描述。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。如果您尚未在**任務詳細資訊**索引標籤上指定 IAM 角色，系統會提示您在此輸入 IAM 角色。

1. (選用) 設定節點屬性和轉換屬性之後，您可以選擇節點詳細資訊面板中的**資料預覽**索引標籤來預覽修改後的資料集。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。使用此功能需支付相關費用，並且在您提供 IAM 角色後立即開始計費。

# 重新命名資料集中的欄位
<a name="transforms-configure-rename-field"></a>

您可以使用 *RenameField* 轉換來變更資料集中個別屬性索引鍵的名稱。

**注意**  
*RenameField* 轉換區分大小寫。如果您需要不區分大小寫的轉換，請使用 *ApplyMapping*。

**提示**  
如果您使用*變更結構描述*轉換，您可以使用單一轉換重新命名資料集中的多個資料屬性索引鍵。

**將 RenameField 轉換節點新增至任務圖表**

1. (選用) 根據需要開啟資源面板，然後選擇 **RenameField**，將新轉換新增至您的任務圖表。

1. 在**節點屬性**索引標籤上，輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. 選擇**轉換**索引標籤。

1. 在**資料欄位**標題下，從來源資料中選擇屬性索引鍵，然後在**新欄位名稱**欄位中輸入新名稱。

1. (選用) 設定轉換節點屬性之後，您可以選擇節點詳細資訊面板中的**輸出結構描述**索引標籤來檢視資料的修改後結構描述。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。如果您尚未在**任務詳細資訊**索引標籤上指定 IAM 角色，系統會提示您在此輸入 IAM 角色。

1. (選用) 設定節點屬性和轉換屬性之後，您可以選擇節點詳細資訊面板中的**資料預覽**索引標籤來預覽修改後的資料集。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。使用此功能需支付相關費用，並且在您提供 IAM 角色後立即開始計費。

# 使用 Spigot 對您的資料集進行取樣
<a name="transforms-configure-spigot"></a>

若要測試任務所執行的轉換，您可能需要取得資料樣本，以檢查轉換是否如預期運作。*Spigot* 轉換會將記錄子集從資料集寫入 Amazon S3 儲存貯體中的 JSON 檔案。資料取樣方法可以是從檔案開頭的特定記錄數目，或是用於挑選記錄的機率因素。

**將 Spigot 轉換節點新增到您任務圖表**

1. (選用) 根據需要開啟資源面板，然後選擇 **Spigot**，將新轉換新增至您的任務圖表。

1. 在**節點屬性**索引標籤上，輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. 選擇節點詳細資訊面板中的**轉換**索引標籤。

1. 輸入 Amazon S3 路徑或選擇 Amazon S3 路徑**瀏覽 S3**在 Amazon S3 中選擇位置。這是任務寫入包含資料範例之 JSON 檔案的位置。

1. 輸入取樣方式的資訊。您可指定從資料集的開頭開始寫入的**記錄數**的值，以及選擇任何給定記錄的**機率閾值** (以十進制值輸入，最大值為 1)。

   例如，若要從資料集寫入前 50 筆記錄，您可以將**記錄數**設定為 50，以及**機率閾值** 設定為 1 (100%)。

# 聯結資料集
<a name="transforms-configure-join"></a>

*Join* 轉換允許您將兩個資料集合成一個。您可以在要比較的每個資料集的結構描述中指定索引鍵名稱。`DynamicFrame` 的輸出包含索引鍵符合聯結條件的列。符合聯結條件的每個資料集中的列會合併成輸出 `DynamicFrame` 中的單一列，其中包含任何一個資料集中找到的所有欄。

**將 Join 轉換節點新增到您的任務圖表**

1. 如果只有一個可用的資料來源，您必須將新的資料來源節點新增至任務圖表。

1. 選擇聯結的其中一個來源節點。開啟資源面板，然後選擇**聯結**，將新轉換新增至您的任務圖表。

1. 在 **Node properties (節點屬性)** 索引標籤上，輸入任務圖表中節點的名稱。

1. 在**節點屬性**索引標籤的**節點父項**標題下，新增一個節點父項，以便有兩個資料集為聯結提供輸入。父項可以是資料來源節點或轉換節點。
**注意**  
一個聯結只能有兩個父節點。

1. 選擇**轉換**索引標籤。

   如果您看到一則訊息，指出有衝突的索引鍵名稱，您可以：
   + 選擇**解決它**以自動將 *ApplyMapping* 轉換節點新增到您的任務圖表。ApplyMapping 節點會將字首新增至資料集中與其他資料集中的索引鍵名稱相同的任何索引鍵。例如，如果您使用預設值 **right**，那麼右側資料集中任何具有與左側資料集索引鍵相同名稱的索引鍵將被重命名為 `(right)key name`。
   + 在任務圖表中的前面手動新增轉換節點，以移除或重新命名衝突的索引鍵。

1. 在**聯結類型**清單中選擇聯結的類型。
   + **內部聯結**：根據聯結條件，從兩個資料集為每個相符項目傳回欄的列。不會傳回不符合聯結條件的列。
   + **左聯結**：左側資料集的所有列，以及右側資料集中符合聯結條件的列。
   + **右聯結**：右側資料集的所有列，以及左側資料集中符合聯結條件的列。
   + **外聯結**：來自兩個資料集的所有列。
   + **左半聯結**：根據聯結條件，在右側資料集內具有相符項目的左側資料集中所有列。
   + **左反聯結**：根據聯結條件，在右側資料集內沒有相符項目的左側資料集中所有列。

1. 在**轉換**索引標籤的**聯結條件**標題下，選擇**新增條件**。從每個資料集中選擇要比較的屬性索引鍵。比較運算子左側的屬性索引鍵稱為左側資料集，右側的屬性索引鍵稱為右側資料集。

   對於更複雜的聯結條件，您可以多次選擇**新增條件**，新增其他比對索引鍵。如果您不小心新增條件，您可以選擇刪除圖示 (![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/delete-icon-black.png)) 將其移除。

1. (選用) 設定轉換節點屬性之後，您可以選擇節點詳細資訊面板中的**輸出結構描述**索引標籤來檢視資料的修改後結構描述。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。如果您尚未在**任務詳細資訊**索引標籤上指定 IAM 角色，系統會提示您在此輸入 IAM 角色。

1. (選用) 設定節點屬性和轉換屬性之後，您可以選擇節點詳細資訊面板中的**資料預覽**索引標籤來預覽修改後的資料集。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。使用此功能需支付相關費用，並且在您提供 IAM 角色後立即開始計費。

如需聯結輸出結構描述的範例，請試想在具有下列屬性索引鍵的兩個資料集之間使用聯結：

```
Left: {id, dept, hire_date, salary, employment_status}
Right: {id, first_name, last_name, hire_date, title}
```

聯結被設定為使用 `=` 比較運算子比對 `id` 和 `hire_date` 索引鍵。

因為這兩個資料集都包含 `id` 和 `hire_date` 索引鍵，您選擇**解決它**以自動新增字首 **right** 到右側資料集的索引鍵。

輸出結構描述中的索引鍵將是：

```
{id, dept, hire_date, salary, employment_status, 
(right)id, first_name, last_name, (right)hire_date, title}
```

# 使用「聯集」來合併資料列
<a name="transforms-configure-union"></a>

 如果您想要合併具有相同結構描述的多個資料來源的資料列，可以使用「聯集」轉換節點。

 「聯集」轉換有兩種類型：

1. ALL：套用 ALL 時，產生的聯集不會移除重複的資料列。

1. DISTINCT：套用 DISTINCT 時，產生的聯集會移除重複的資料列。

 **聯集與聯結** 

 您可以使用「聯集」來合併資料列。您可以使用「聯結」來合併資料欄。

**在視覺化 ETL 畫布中使用「聯集」轉換**

1.  新增多個資料來源以執行聯集轉換。若要新增資料來源，請開啟資源面板，然後從「來源」索引標籤中選擇資料來源。在使用「聯集」轉換之前，您必須確保聯集中涉及的所有資料來源都具有相同的結構描述和結構。

1.  當您至少有兩個要使用「聯集」轉換合併的資料來源時，請將其新增至畫布以建立「聯集」轉換。開啟畫布上的資源面板並搜尋 'Union'。您也可以選擇資源面板中的「轉換」索引標籤，向下捲動直到找到「聯集」轉換，然後選擇**聯集**。

1. 選取任務畫布上的「聯集」節點。在「節點屬性」視窗中，選擇要連線至「聯集」轉換的父節點。

1. AWS Glue 檢查相容性，以確保「聯集」轉換可套用至所有資料來源。如果資料來源的結構描述相同，則會允許執行此操作。如果資料來源沒有相同的結構描述，則會顯示無效的錯誤訊息：“此聯集的輸入結構描述不相同。請考慮使用 ApplyMapping 來符合結構描述。」 若要修正此問題，請選擇使用 **ApplyMapping**。

1. 選擇聯集類型。

   1. ALL：依預設會選取「所有聯集」類型；如果資料組合中有任何資料列，則會產生重複的資料列。

   1. DISTINCT：如果您想要從產生的資料組合中移除重複資料列，請選擇 DISTINCT。

# 使用 SplitFields 將資料集分成兩個
<a name="transforms-configure-split-fields"></a>

*SplitFields* 轉換可讓您選擇輸入資料集中的某些資料屬性索引鍵，並將其放入一個資料集中，並將未選取的索引鍵放入個別的資料集中。這個轉換的輸出是 `DynamicFrames` 的集合。

**注意**  
您必須使用 *SelectFromCollection* 轉換以將 `DynamicFrames` 的集合轉換成單一 `DynamicFrame`，然後才能將輸出傳送到目標位置。

*SplitFields* 轉換區分大小寫。如果您需要不區分大小寫的屬性索引鍵名稱，請新增 *ApplyMapping* 轉換做為父節點。

**將 SplitFields 轉換節點新增到您的任務圖表**

1. (選用) 根據需要開啟資源面板，然後選擇 **SplitFields**，將新轉換新增至您的任務圖表。

1. 在**節點屬性**索引標籤上，輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. 選擇**轉換**索引標籤。

1. 選擇要放入第一個資料集的屬性索引鍵。您沒有選擇的索引鍵會放置在第二個資料集中。

1. (選用) 設定轉換節點屬性之後，您可以選擇節點詳細資訊面板中的**輸出結構描述**索引標籤來檢視資料的修改後結構描述。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。如果您尚未在**任務詳細資訊**索引標籤上指定 IAM 角色，系統會提示您在此輸入 IAM 角色。

1. (選用) 設定節點屬性和轉換屬性之後，您可以選擇節點詳細資訊面板中的**資料預覽**索引標籤來預覽修改後的資料集。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。使用此功能需支付相關費用，並且在您提供 IAM 角色後立即開始計費。

1. 設定 *SelectFromCollection* 轉換節點來處理產生的資料集。

# *SelectFromCollection* 轉換概觀
<a name="transforms-selectfromcollection-overview"></a>

某些轉換有多個資料集作為其輸出，而不是單個資料集，例如 *SplitFields*。*SelectFromCollection* 轉換從資料集的集合 (`DynamicFrames` 的陣列) 選擇一個資料集 (`DynamicFrame`)。轉換的輸出是選定的 `DynamicFrame`。

您必須在使用建立 `DynamicFrames` 集合的轉換後使用此轉換，例如：
+ 自訂程式碼轉換
+ *SplitFields*

如果在任何這些轉換之後您沒有新增 *SelectFromCollection* 至您的任務圖表，您會收到任務錯誤。

此轉換的父節點必須是傳回 `DynamicFrames` 集合的節點。如果您為傳回單一 `DynamicFrame` 的此轉換節點選擇父項，例如 *Join* 轉換，您的任務會傳回錯誤。

同樣地，如果您在任務圖表中使用 *SelectFromCollection* 節點作為需要單一 `DynamicFrame` 作為輸入之轉換的父項，您的任務也會傳回錯誤。

![\[螢幕擷取畫面顯示節點詳細資訊面板的 [Node properties (節點屬性)] 索引標籤上的 [Node parents (節點父項)] 欄位。所選節點父項是 SplitFields 且顯示的錯誤訊息指出「父節點分割欄位輸出集合，但節點捨棄欄位不接受集合」。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/screenshot-edit-splitfields-wrong-parent.png)


# 使用 SelectFromCollection 選擇要保留的資料集
<a name="transforms-configure-select-collection"></a>

使用 *SelectFromCollection* 轉換以將 `DynamicFrames` 集合轉換成單一 `DynamicFrame`。

**將 SelectFromCollection 轉換節點新增到您的任務圖表**

1. (選用) 根據需要開啟資源面板，然後選擇 **SelectFromCollection**，將新轉換新增至您的任務圖表。

1. 在**節點屬性**索引標籤上，輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. 選擇**轉換**索引標籤。

1. 在**影格索引**標題下，選擇對應於您想從 `DynamicFrames` 集合中選取之 `DynamicFrame` 的陣列索引號碼。

   例如，如果此轉換的父節點是 *SplitFields* 轉換，在**輸出結構描述**索引標籤，您可以看到每個 `DynamicFrame` 的結構描述。如果您想要保留 `DynamicFrame` 與 **輸出 2** 的結構描述相關聯，您需要為**影格索引**的值選取 **1**，這是清單中的第二個值。

   只有 `DynamicFrame` 會包含在輸出中。

1. (選用) 設定轉換節點屬性之後，您可以選擇節點詳細資訊面板中的**輸出結構描述**索引標籤來檢視資料的修改後結構描述。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。如果您尚未在**任務詳細資訊**索引標籤上指定 IAM 角色，系統會提示您在此輸入 IAM 角色。

1. (選用) 設定節點屬性和轉換屬性之後，您可以選擇節點詳細資訊面板中的**資料預覽**索引標籤來預覽修改後的資料集。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。使用此功能需支付相關費用，並且在您提供 IAM 角色後立即開始計費。

# 尋找並填入資料集中遺失的值
<a name="transforms-configure-fmv"></a>

您可以使用 *FillMissingValues* 轉換以尋找遺失值的資料集中的記錄，並新增具有由插補決定值的新欄位。輸入資料集用於訓練機器學習 (ML) 模型，以決定遺失值應該是什麼。如果您使用增量資料集，則會使用每個增量集作為 ML 模型的訓練資料，因此結果可能不會那麼準確。

**在任務圖表中使用 FillMissingValues 轉換節點**

1. (選用) 根據需要開啟資源面板，然後選擇 **FillMissingValues**，將新轉換新增至您的任務圖表。

1. 在 **Node properties (節點屬性)** 索引標籤上，輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. 選擇**轉換**索引標籤。

1. 對於**資料欄位**，從您要分析遺失值的來源資料中選擇欄或欄位名稱。

1. (選用) 在**新增欄位名稱**欄位中，輸入新增至每筆記錄的欄位名稱，該欄位將保留已分析欄位的估計取代值。如果已分析的欄位沒有遺失值，則分析欄位中的值會複製到新欄位中。

   如果未指定新欄位的名稱，則預設名稱是已分析欄位的名稱，附加上 `_filled`。例如，如果您為**資料欄位**輸入 **Age**，並且不指定**新欄位名稱**的值，則會將名為 **Age\$1filled** 的新欄位新增至每個記錄。

1. (選用) 設定轉換節點屬性之後，您可以選擇節點詳細資訊面板中的**輸出結構描述**索引標籤來檢視資料的修改後結構描述。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。如果您尚未在**任務詳細資訊**索引標籤上指定 IAM 角色，系統會提示您在此輸入 IAM 角色。

1. (選用) 設定節點屬性和轉換屬性之後，您可以選擇節點詳細資訊面板中的**資料預覽**索引標籤來預覽修改後的資料集。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。使用此功能需支付相關費用，並且在您提供 IAM 角色後立即開始計費。

# 篩選資料集中的索引鍵
<a name="transforms-filter"></a>

使用 *Filter* 轉換，藉由根據規則表達式篩選輸入資料集中的記錄來建立新的資料集。輸出中會移除不符合篩選條件的列。
+ 對於字串資料類型，您可以篩選索引鍵值與指定字串相符的列。
+ 對於數值資料類型，您可以使用比較運算子 `<`、`>`、`=`、`!=`、`<=` 及 `>=` 將索引鍵值與指定值進行比較，以篩選列。

如果您指定多個篩選條件，則預設會使用 `AND` 運算子來結合結果，但您可以改為選擇 `OR`。

*Filter* 轉換區分大小寫。如果您需要不區分大小寫的屬性索引鍵名稱，請新增 *ApplyMapping* 轉換做為父節點。

**將 Filter 轉換節點新增到您的任務圖表**

1. (選用) 根據需要開啟資源面板，然後選擇**篩選**，將新轉換新增至您的任務圖表。

1. 在 **Node properties (節點屬性)** 索引標籤上，輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. 選擇**轉換**索引標籤。

1. 選擇**全域和** 或 **全域或**。這會決定多個篩選條件的組合方式。所有條件都使用 `AND` 或 `OR` 操作來結合。如果您只有一個篩選條件，則可以選擇任一個。

1. 選擇**篩選條件**區段的**新增條件**按鈕以新增篩選條件。

   在**索引鍵**欄位中，從資料集中選擇屬性索引鍵名稱。在**操作**欄位中，選擇比較運算子。在**數值**欄位中，輸入比較值。以下是篩選條件的一些範例：
   + `year >= 2018`
   + `State matches 'CA*'`

   當您篩選字串值時，請確定比較值使用的規則表達式格式符合任務屬性中選取的指令碼語言 (Python 或 Scala)。

1. 視需要加入其他篩選條件。

1. (選用) 設定轉換節點屬性之後，您可以選擇節點詳細資訊面板中的**輸出結構描述**索引標籤來檢視資料的修改後結構描述。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。如果您尚未在**任務詳細資訊**索引標籤上指定 IAM 角色，系統會提示您在此輸入 IAM 角色。

1. (選用) 設定節點屬性和轉換屬性之後，您可以選擇節點詳細資訊面板中的**資料預覽**索引標籤來預覽修改後的資料集。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。使用此功能需支付相關費用，並且在您提供 IAM 角色後立即開始計費。

# 使用 DropNullFields 刪除具有空值的欄位
<a name="transforms-dropnull-fields"></a>

 如果欄位中的所有值都為 ‘null’，使用 *DropNullFields* 轉換以從資料集中刪除此欄位。依預設，AWS Glue Studio 將識別空物件，但某些值，如空字串、值為 “null” 的字串、-1 整數或其他預留位置 (如零) 不會自動識別為空值。

**使用 DropNullFields**

1.  新增一個 DropNullFields 節點到任務圖表。

1.  在**節點屬性**索引標籤上，選擇代表空值的其他值。您可以選擇不選取任何值或選取所有值：  
![\[螢幕擷取畫面顯示 DropNullFields 節點的「轉換」索引標籤。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/DropNullFields-transform-tab.png)
   +  空字串 ("" 或 '') – 包含空字串的欄位將被刪除 
   +  "null string" – 包含帶有字 'null' 的字串的欄位將被刪除 
   +  -1 整數 – 包含 -1 整數的欄位將被刪除 

1.  如果需要，您也可以指定自訂空值。這些是資料集中可能唯一的空值。若要新增自訂空值，請選擇**新增值**。

1.  輸入自訂空值。例如，這可以為 0，或用來表示資料集中之 null 的任何值。

1.  在下拉式清單欄位中選擇資料類型。資料類型可以是字串或整數。
**注意**  
 自訂空值及其資料類型必須完全相符，才能將欄位識別為空值並移除此欄位。部分相符，其中只有自訂 Null 值相符，但資料類型不會導致移除欄位。

# 使用 SQL 查詢轉換資料
<a name="transforms-sql"></a>

您可以使用 **SQL** 轉換來以 SQL 查詢的形式編寫自己的轉換。

SQL 轉換節點可以有多個資料集作為輸入，但只產生一個資料集作為輸出。包含一個文字欄位，您可以在其中輸入 Apache SparkSQL 查詢。您可以將別名指派給每個用作輸入的資料集，以協助簡化 SQL 查詢。如需 SQL 語法的詳細資訊，請參閱 [Spark SQL 文件](https://spark.apache.org/docs/latest/sql-ref.html)。

**注意**  
如果您使用 Spark SQL 轉換搭配位於 VPC 中的資料來源，請新增 AWS Glue VPC 端點至包含資料來源的 VPC。如需設定開發端點的詳細資訊，請參閱 *AWS Glue 開發人員指南*中的[新增開發端點](https://docs.aws.amazon.com/glue/latest/dg/add-dev-endpoint.html)、[設定適用於開發端點的環境](https://docs.aws.amazon.com/glue/latest/dg/start-development-endpoint.html)以及[存取您的開發端點](https://docs.aws.amazon.com/glue/latest/dg/dev-endpoint-elastic-ip.html)。

**在任務圖表中使用 SQL 轉換節點**

1. (選用) 視需要將轉換節點新增至任務圖表。選擇 **Spark Query** 節點類型。
**注意**  
 如果您使用資料預覽工作階段和自訂 SQL 或自訂程式碼節點，資料預覽工作階段會依原樣執行整個資料集的 SQL 或程式碼區塊。

1. 在 **Node properties (節點屬性)** 索引標籤上，輸入任務圖表中節點的名稱。如果尚未選取節點父項，或者如果您想要進行 SQL 轉換的多個輸入，請從 **Node parents (節點父項)** 清單選擇用作轉換之輸入來源的節點。視需要新增其他父節點。

1. 選擇節點詳細資訊面板中的 **Transform (轉換)** 索引標籤。

1. SQL 查詢的來源資料集是由您在每個節點欄位的 **Name (名稱)** 中指定的名稱來識別。如果您不想使用這些名稱，或者名稱不適合 SQL 查詢，您可以將名稱關聯到每個資料集。主控台提供預設別名，例如 `MyDataSource`。

   例如，如果 SQL 轉換節點的父節點名為 `Rename Org PK field`，您可以將名稱 `org_table` 與此資料集相關聯。然後可以在 SQL 查詢中使用此別名來代替節點名稱。

1. 在 **Code block (程式碼區塊)** 標題下的文字輸入欄位，貼上或輸入 SQL 查詢。文字欄位會顯示 SQL 語法反白顯示和關鍵字建議。

1. 選取 SQL 轉換節點後，選擇 **Output schema (輸出結構描述)** 索引標籤，然後選擇 **Edit (編輯)**。提供描述 SQL 查詢輸出欄位的欄和資料類型。

   使用頁面的 **Output schema (輸出結構描述)** 區段中的以下動作指定結構描述：
   + 若要重新命名欄，請將游標放在欄的 **Key (索引鍵)** 文字方塊 (也稱為*欄位*或*屬性索引鍵*)，然後輸入新名稱。
   + 若要變更欄的資料類型，請從下拉式清單中選取欄的新資料類型。
   + 若要將新的頂層欄新增至結構描述，請選擇 [Overflow (溢位)] (![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/edit-schema-actions-button.png)) 按鈕，然後選擇 **Add root key (新增根索引鍵)**。新的欄會加入在結構描述的頂端。
   + 若要從結構描述移除欄，請選擇索引鍵名稱最右側的刪除圖示 (![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/delete-icon-black.png))。

1. 當您完成指定輸出結構描述時，請選擇 **Apply (套用)** 儲存您的變更，並結束結構描述編輯器。如果您不想儲存變更，請選擇 **Cancel (取消)** 以編輯結構描述編輯器。

1. (選用) 設定節點屬性和轉換屬性之後，您可以選擇節點詳細資訊面板中的 **Data preview (資料預覽)** 索引標籤來預覽修改後的資料集。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。使用此功能需支付相關費用，並且在您提供 IAM 角色後立即開始計費。

# 使用彙總在選取的欄位上執行加總計算
<a name="transforms-aggregate-fields"></a>

**若要使用彙總轉換**

1.  將彙總節點新增至任務圖表。

1.  在**節點屬性**索引標籤上，透過選擇下拉式清單欄位 (選用) 來選擇要分組在一起的欄位。您可以一次選取多個欄位，或在搜尋列中輸入來搜尋欄位名稱。

    選取欄位時，會顯示名稱和資料類型。若要移除欄位，請選擇欄位上的 'X'。  
![\[螢幕擷取畫面顯示「彙總」節點的「轉換」索引標籤。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/Aggregate-transform-tab.png)

1.  選擇**彙總另一個資料欄**。至少需要選取一個欄位。  
![\[選擇彙總另一個資料行時，螢幕擷取畫面會顯示這些欄位。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/Aggregate-fieldtoaggregate.png)

1.  在**要彙總的欄位**中選擇一個欄位。

1.  選擇要套用至所選欄位的彙總函數：
   +  avg – 計算平均值 
   +  countDistinct – 計算唯一非空值的數量 
   +  count – 計算非空值的數量 
   +  first – 傳回滿足 'group by' 條件的第一個值 
   +  last – 傳回滿足 'group by' 條件的最後一個值 
   +  kurtosis – 計算頻率分佈曲線峰值的清晰度 
   +  max – 傳回滿足 'group by' 條件的最大值 
   +  min – 傳回滿足 'group by' 條件的最小值 
   +  skewness – 測量正態分佈的概率分佈的不對稱性 
   +  stddev\$1pop – 計算人口標準差，並返回人口方差的平方根 
   +  sum – 群組中所有值的總和 
   +  sumDistinct – 群組中不同值的總和 
   +  var\$1samp – 群組的樣本變異數 (忽略空值) 
   +  var\$1pop – 群組的母體變異數 (忽略空值) 

# 壓平合併巢狀結構
<a name="transforms-flatten"></a>

*壓平合併*資料中巢狀結構的欄位，使其成為頂層欄位。新欄位會使用欄位名稱來命名，其字首為與之關聯的結構欄位的名稱，並以點分隔。

例如，如果資料具有名稱為 "phone\$1numbers" 之結構類型的欄位，則其中包含一個名稱為 "home\$1phone" 的 “Struct” 類型的欄位，以及 "country\$1code" 和 "number" 兩個欄位。經壓平合併後，這兩個欄位將成為頂層欄位，名稱分別為："phone\$1numbers.home\$1phone.country\$1code" 和 "phone\$1numbers.home\$1phone.number"。

**在您的任務圖表中新增*壓平合併*轉換節點**

1. 開啟資源面板，然後選擇**轉換**索引標籤，然後選擇**壓平合併**，將新轉換新增至您的任務圖表。您也可以在搜尋列中輸入「壓平合併」，然後按一下「壓平合併」節點。新增節點時選取的節點將成為其父節點。  
![\[螢幕擷取畫面顯示資源面板以及填入「壓平合併」一詞的搜尋列。搜尋結果會顯示「壓平合併」轉換。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/transform-flatten.png)

1. (選用) 在**節點屬性**索引標籤上，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. (選用) 在**轉換**索引頁籤上，您可以限制要壓平合併的最大巢狀層級。例如，將該值設定為 1，意味著只會壓平合併頂層結構。將最大值設定為 2，將會直接壓平合併頂層及其下方的結構。

# 新增 UUID 資料欄
<a name="transforms-uuid"></a>

當您新增 *UUID* (通用不重複識別符) 資料欄時，會為每個資料列指派不重複的 36 字元字串。

**在您的任務圖表中新增 *UUID* 轉換節點**

1. 開啟資源面板，然後選擇 **UUID**，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. (選用) 在**節點屬性**索引標籤上，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. (選用) 在**轉換**索引標籤上，您可以自訂新資料欄的名稱。依預設，該名稱會命名為 "uuid"。

# 新增識別符資料欄
<a name="transforms-identifier"></a>

為資料集中的每個資料列指派數值*識別符*。

**在您的任務圖表中新增*識別符*轉換節點**

1. 開啟資源面板，然後選擇**識別符**，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. (選用) 在**節點屬性**索引標籤上，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. (選用) 在**轉換**索引標籤上，您可以自訂新資料欄的名稱。依預設，該名稱會命名為 "id"。

1. (選用) 如果任務以遞增方式處理和存放資料，您會想要避免在任務執行之間重複使用相同的 ID。

   在**轉換**索引標籤上，標記**不重複**核取方塊選項。這會在識別符中包含任務時間戳記，使其在多次執行之間是不重複的。若要允許更大的數字，資料欄而不是類型 long 將會是十進位。

# 將資料欄轉換為時間戳記類型
<a name="transforms-to-timestamp"></a>

您可以使用轉換*截止時間戳記*，將數值或字串資料欄的資料類型變更為時間戳記，以便使用該資料類型存放，或套用至需要時間戳記的其他轉換。

**在您的任務圖表中新增*截止時間戳記*轉換節點**

1. 開啟資源面板，然後選擇**截止時間戳記**，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. (選用) 在**節點屬性**索引標籤上，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. 在**轉換**索引標籤上，輸入要轉換的資料欄名稱。

1. 在**轉換**索引標籤上，定義如何透過選擇類型來剖析選取的資料欄。

   如果該值是一個數字，則可以用秒 (Unix/Python 時間戳記)、毫秒或微秒來表示，選擇相應的選項。

   如果該值是格式化字串，則選擇 "iso" 類型，該字串需要符合 ISO 格式的其中一個變體，例如："2022-11-02T14:40:59.915Z"。

   如果您不知道目前的類型，或者不同的資料列使用不同的類型，則可以選擇 ”autodetect“，系統會以較小的效能成本來做出最佳猜測。

1. (選用) 在**轉換**索引標籤上，您可以建立新資料欄並輸入新資料欄名稱來保留原始資料欄，而不是轉換選取的資料欄。

# 將時間戳記資料欄轉換為格式化字串
<a name="transforms-format-timestamp"></a>

根據模式將時間戳記資料欄格式化為字串。您可以使用*格式化時間戳記*，作為所需格式的字串來取得日期和時間。您可以使用 [Spark 日期語法](https://spark.apache.org/docs/latest/sql-ref-datetime-pattern.html)，以及大多數 [Python 日期碼](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes)來定義格式。

例如，如果您想要日期字串格式化為 "2023-01-01 00:00"，則可以使用 Spark 語法將這種格式定義為 "yyyy-MM-dd HH:mm" 或使用等效的 Python 日期碼將其定義為 "%Y-%m-%d %H:%M"

**在您的任務圖表中新增*格式化時間戳記*轉換節點**

1. 開啟資源面板，然後選擇**格式化時間戳記**，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. (選用) 在**節點屬性**索引標籤上，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. 在**轉換**索引標籤上，輸入要轉換的資料欄名稱。

1. 在**轉換**索引標籤上，輸入要使用的**時間戳記格式**模式，使用 [Spark 日期語法](https://spark.apache.org/docs/latest/sql-ref-datetime-pattern.html)或 [Python 日期碼](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes)來表示。

1. (選用) 在**轉換**索引標籤上，您可以建立新資料欄並輸入新資料欄名稱來保留原始資料欄，而不是轉換選取的資料欄。

# 建立條件式路由器轉換
<a name="transforms-conditional-router"></a>

 條件式路由器轉換可讓您對傳入資料套用多個條件。傳入資料的每個資料列均依據群組篩選條件進行評估，並將其處理到其對應的群組。如果資料列符合多個群組篩選條件，則轉換會將資料列傳遞給多個群組。如果資料列不符合任何條件，則可以捨棄或路由至預設輸出群組。

 此轉換與篩選條件轉換類似，但對於想要在多個條件下測試相同輸入資料的使用者很有用。

**新增條件式路由器轉換：**

1.  選擇要執行條件式路由器轉換的節點。這可以是來源節點或其他轉換。

1.  選擇**操作**，然後使用搜尋列來尋找並選擇 'Conditional Router'。**條件式路由器**轉換與兩個輸出節點一起新增。一個輸出節點，即 'Default group'，包含的記錄與其他輸出節點中定義的任何條件均不相符。無法編輯預設群組。  
![\[螢幕擷取畫面顯示連線至來源節點的條件式路由器轉換節點。輸出節點顯示來自條件式路由器節點的分支。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/transform-conditional-router-node.png)

    您可以選擇**新增群組**來新增其他輸出群組。針對每個輸出群組，您可以為群組命名，並新增篩選條件和邏輯運算子。  
![\[螢幕擷取畫面顯示條件式路由器轉換索引標籤，其中包含命名輸出群組、邏輯運算子和條件式篩選條件等選項。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/transform-conditional-router-tab.png)

1.  輸入群組的新名稱，以對輸出群組名稱重新命名。AWS Glue Studio 會自動為您對群組命名 (例如，'output\$1group\$11')。

1.  選擇邏輯運算子 (**AND**、**OR**)，並透過指定**索引鍵**、**操作**和**值**來新增**篩選條件**。邏輯運算子可讓您實作多個篩選條件，並在您指定的每個篩選條件上執行邏輯運算子。

    指定索引鍵後，您可以從結構描述的可用索引鍵中進行選擇。然後，您可以根據選取的索引鍵類型來選擇可用的操作。例如，如果索引鍵類型為 'string'，則可從中選擇的可用操作為 'matches'。  
![\[螢幕擷取畫面顯示條件式路由器轉換索引標籤，其中包含索引鍵、操作和值等篩選條件欄位。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/transform-conditional-router-filter-condition.png)

1.  在**值**欄位中，輸入值。若要新增其他篩選條件，請選擇**新增條件**。若要移除篩選條件，請選擇垃圾桶圖示。

# 使用「串連資料欄」轉換附加資料欄
<a name="transforms-concatenate-columns"></a>

 「串連」轉換允許您使用具有選用間隔符號之其他資料欄的值來構建新的字串資料欄。例如，如果我們將串連資料欄 “date” 定義為 “year”、“month”、“day”(按該順序) 的串連，並以 “-” 作為間隔符號，我們將得到：


| day | month | year | date | 
| --- | --- | --- | --- | 
| 01 | 01 | 2020 | 2020-01-01 | 
| 02 | 01 | 2020 | 2020-01-02 | 
| 03 | 01 | 2020 | 2020-01-03 | 
| 04 | 01 | 2020 | 2020-01-04 | 

**若要新增「串連」轉換：**

1. 開啟資源面板。然後選擇**串連資料欄**，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. (選用) 在**節點屬性**索引標籤上，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從節點父項清單選擇用作轉換之輸入來源的節點。

1. 在**轉換**索引標籤上，輸入將保留串連字串的資料欄名稱，以及要串連的資料欄。您在下拉式選單中檢查資料欄的順序將是使用的順序。  
![\[螢幕擷取畫面顯示「串連」轉換的「轉換」索引標籤。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/transforms-concatenate-transform-tab.png)

1. **分隔符號 – 選用**：輸入要在串連欄位之間放置的字串。預設沒有分隔符號。

1. **Null 值 – 選用**：輸入資料欄值為 Null 時要使用的字串。依預設，在資料欄具有 'NULL' 或 'NA' 值的情況下，使用空字串。

# 使用「分割字串」轉換來分解字串資料欄
<a name="transforms-split-string"></a>

 「分割字串」轉換允許使用規則運算式將字串分解為字符陣列，以定義分割方式。然後，您可以將資料欄保留為陣列類型，或在此之後套用**陣列至資料欄**轉換，以將陣列值擷取到頂層欄位中，並假設每個字符都有我們事先知道的含義。此外，如果字符的順序不重要 (例如一組類別)，則可以使用**分解**轉換為每個值產生一個單獨的資料列。

 例如，您可以使用逗號作為模式來分割 “categories” 資料欄，以新增 “categories\$1arr” 資料欄。


| product\$1id | categories | categories\$1arr | 
| --- | --- | --- | 
| 1 | sports,winter | [sports, winter] | 
| 2 | garden,tools | [garden, tools] | 
| 3 | videogames | [videogames] | 
| 4 | game,boardgame,social | [game, boardgame, social] | 

**若要新增「分割字串」轉換：**

1. 開啟資源面板，然後選擇「分割字串」，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. (選用) 在節點屬性索引標籤上，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從節點父項清單選擇用作轉換之輸入來源的節點。

1. 在**轉換**索引標籤上，選擇要分割的資料欄，然後輸入要用於分割字串的模式。在大多數情況下，您只需輸入字元，除非它作為規則運算式具有特殊含義並需要逸出。需要逸出的字元為 `\.[]{}()<>*+-=!?^$|`，字元前面加上反斜線。例如，如果您想透過一個點 ('.') 分隔，則需要輸入 `\.`。但是，逗號沒有特殊含義，可以按以下方式指定：`,`。  
![\[螢幕擷取畫面顯示「分割字串」轉換的「轉換」索引標籤。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/transforms-split-string-transform-tab.png)

1. (選用) 如果要保留原始字串資料欄，則可以為新陣列資料欄輸入名稱，這樣可以同時保留原始字串資料欄和新的記號化陣列資料欄。

# 使用「陣列至資料欄」轉換，將陣列的元素擷取到頂層資料欄中
<a name="transforms-array-to-columns"></a>

 「陣列至資料欄」轉換可讓您將陣列類型之資料欄的部分或全部元素擷取到新資料欄中。如果陣列有足夠的值來擷取，則該轉換將盡可能地填充新資料欄，並且您可以選擇將元素放在指定位置。

 例如，如果您有一個陣列資料欄 “subnet”，是在 ip v4 子網路上套用「分割字串」轉換的結果，則可以將第一個和第四個位置擷取到新資料欄 “first\$1octect” 和 “forth\$1octect” 中。在此範例中，轉換的輸出將是 (注意，最後兩個資料列的陣列比預期的短)：


| 子網 | first\$1octect | fourth\$1octect | 
| --- | --- | --- | 
| [54, 240, 197, 238] | 54 | 238 | 
| [192, 168, 0, 1] | 192 | 1 | 
| [192, 168] | 192 |  | 
| [] |  |  | 

**若要新增「陣列至資料欄」轉換：**

1. 開啟資源面板，然後選擇**陣列至資料欄**，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. (選用) 在**節點屬性**索引標籤上，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從節點父項清單選擇用作轉換之輸入來源的節點。

1. 在**轉換**索引標籤上，選擇要擷取的陣列資料欄，然後輸入所擷取字符的新資料欄清單。  
![\[螢幕擷取畫面顯示「陣列至資料欄」轉換的「轉換」索引標籤。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/transforms-array-to-columns-transform-tab.png)

1. (選用) 如果您不想採用陣列字符以指派給資料欄，則可以指定要採用的索引，這些索引將按照指定順序指派給資料欄清單。例如，如果輸出資料欄是 “column1, column2, column3” 和索引 “4, 1, 3”，則陣列的第四個元素將轉到 column1，第一個元素轉到 column2，第三個元素轉到 column3 (如果陣列比索引編號短，則將設定 NULL 值)。

# 使用新增目前時間戳記轉換
<a name="transforms-add-current-timestamp"></a>

 **新增目前時間戳記**轉換可讓您以處理資料的時間來標記資料列。這對於稽核目的或追蹤資料管道中的延遲非常實用。您可以將此新資料欄新增為時間戳記資料類型或格式化字串。

**若要新增「新增目前時間戳記」轉換：**

1. 開啟資源面板，然後選擇**新增目前時間戳記**，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. (選用) 在**節點屬性**索引標籤上，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從節點父項清單選擇用作轉換之輸入來源的節點。  
![\[螢幕擷取畫面顯示新增目前時間戳記轉換的「轉換」索引標籤。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/transforms-add-current-timestamp-transform-tab.png)

1. (選用) 在**轉換**索引標籤上，輸入新資料欄的自訂名稱，如果您希望將資料欄設定為格式化日期字串，請輸入格式。

# 使用「樞紐資料列至資料欄」轉換
<a name="transforms-pivot-rows-to-columns"></a>

 **樞紐資料列至資料欄**轉換可讓您透過旋轉將變為新資料欄之所選新資料欄上的唯一值來彙總數值資料欄 (如果選取多個資料欄，則會串連這些值以命名新資料欄)。如此就可以合併資料列，同時為每個唯一值提供包含部分彙總的更多資料欄。例如，如果您有按月份和國家/地區劃分的以下銷售額資料集 (經過排序以便說明)：


| year | month | 國家/地區 | amount | 
| --- | --- | --- | --- | 
| 2020 | Jan | uk | 32 | 
| 2020 | Jan | de | 42 | 
| 2020 | Jan | us | 64 | 
| 2020 | Feb | uk | 67 | 
| 2020 | Feb | de | 4 | 
| 2020 | Feb | de | 7 | 
| 2020 | Feb | us | 6 | 
| 2020 | Feb | us | 12 | 
| 2020 | Jan | us | 90 | 

 如果您將**金額**和**國家**樞紐操作為彙總資料欄，則會從原始**國家**資料欄建立新資料欄。在下表中，您會看到新資料欄 **de**、**uk** 和 **us**，而非**國家**資料欄。


| year | month | de | uk | us | 
| --- | --- | --- | --- | --- | 
| 2020 | Jan | 42 | 32 | 64 | 
| 2020 | Jan | 11 | 67 | 18 | 
| 2021 | Jan |  |  | 90 | 

 如果您想要對月份和縣市進行樞紐操作，則會為這些資料欄的每個值組合取得一個資料欄：


| year | Jan\$1de | Jan\$1uk | Jan\$1us | Feb\$1de | Feb\$1uk | Feb\$1us | 
| --- | --- | --- | --- | --- | --- | --- | 
| 2020 | 42 | 32 | 64 | 11 | 67 | 18 | 
| 2021 |  |  | 90 |  |  |  | 

**若要新增「樞紐資料列至資料欄」轉換：**

1. 開啟資源面板，然後選擇**樞紐資料列至資料欄**，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. (選用) 在**節點屬性**索引標籤上，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從節點父項清單選擇用作轉換之輸入來源的節點。

1. 在**轉換**索引標籤上，選擇要彙總以產生新資料欄值的數值資料欄、要套用的彙總函數，以及將其唯一值轉換為新資料欄的資料欄。  
![\[螢幕擷取畫面顯示「樞紐資料列至資料欄」轉換的「轉換」索引標籤。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/transforms-pivot-rows-to-columns-transform-tab.png)

# 使用「取消樞紐資料欄至資料列」轉換
<a name="transforms-unpivot-columns-to-rows"></a>

 **取消樞紐**轉換允許您將資料欄轉換為新資料欄的值，並為每個唯一值產生一個資料列。這與樞紐相反，但請注意，它不是等效的，因為它不能將具有彙總的相同值之資料列分開，也不能將組合拆分為原始資料欄 (您可以稍後使用「分割」轉換來執行此操作)。例如，如果您有下列資料表：


| year | month | de | uk | us | 
| --- | --- | --- | --- | --- | 
| 2020 | Jan | 42 | 32 | 64 | 
| 2020 | Feb | 11 | 67 | 18 | 
| 2021 | Jan |  |  | 90 | 

 您可以取消資料欄樞紐：“de”、“uk” 和 “us” 至值為 “amount” 的資料欄 “country” 中，並取得以下內容 (為了說明目的而在此處排序)：


| year | month | 國家/地區 | amount | 
| --- | --- | --- | --- | 
| 2020 | Jan | uk | 32 | 
| 2020 | Jan | de | 42 | 
| 2020 | Jan | us | 64 | 
| 2020 | Feb | uk | 67 | 
| 2020 | Feb | de | 11 | 
| 2020 | Feb | us | 18 | 
| 2021 | Jan | us | 90 | 

 請注意，預設不會產生具有 NULL 值的資料欄 (“de” 和 “uk of Jan 2021”)。您可以啟用該選項以取得：


| year | month | 國家/地區 | amount | 
| --- | --- | --- | --- | 
| 2020 | Jan | uk | 32 | 
| 2020 | Jan | de | 42 | 
| 2020 | Jan | us | 64 | 
| 2020 | Feb | uk | 67 | 
| 2020 | Feb | de | 11 | 
| 2020 | Feb | us | 18 | 
| 2021 | Jan | us | 90 | 
| 2021 | Jan | de |  | 
| 2021 | Jan | uk |  | 

**若要新增「取消樞紐資料欄至資料列」轉換：**

1. 開啟資源面板，然後選擇**取消樞紐資料欄至資料列**，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. (選用) 在**節點屬性**索引標籤上，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從節點父項清單選擇用作轉換之輸入來源的節點。

1. 在**轉換**索引標籤上，輸入要建立的新資料欄，以保留要取消樞紐之所選資料欄的名稱和值。  
![\[螢幕擷取畫面顯示「取消樞紐資料欄至資料列」轉換的「轉換」索引標籤。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/transforms-unpivot-columns-to-rows-transform-tab.png)

# 使用「自動平衡處理」轉換來最佳化您的執行期
<a name="transforms-autobalance-processing"></a>

 **自動平衡處理**轉換會在工作者之間重新分配資料，以達到更好的效能。這對資料不平衡或其來源不允許進行足夠平行處理的情況很有幫助。在來源被壓縮或為 JDBC 的情況下，這很常見。資料的重新分配具有適度的效能成本，因此如果資料已經很平衡，最佳化可能無法減省工作量。在下方，該轉換使用 Apache Spark 重新分割，在多個最適合叢集容量的分割區之間隨機重新指派資料。高級使用者可以手動輸入多個分割區。此外，它還可以根據指定的資料欄重新整理資料，以最佳化分割資料表的寫入。這會產生更緊湊的輸出檔案。

****

1. 開啟資源面板，然後選擇**自動平衡處理**，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. (選用) 在**節點屬性**索引標籤上，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從節點父項清單選擇用作轉換之輸入來源的節點。

1. (選用) 在**轉換**索引標籤上，您可以輸入數個分割區。一般而言，建議讓系統決定此值，但是如果您需要控制此值，可以調整乘數或輸入特定值。如果要儲存依資料欄分割的資料，您可以選擇與重新分割資料欄相同的資料欄。這樣一來，它將最大限度地減少每個分割區上的檔案數量，並避免在每個分割區內留下很多檔案，這將影響查詢該資料之工具的效能。  
![\[螢幕擷取畫面顯示「自動平衡處理」轉換的「轉換」索引標籤。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/transforms-autobalance-processing-transform-tab.png)

# 使用「衍生資料欄」轉換合併其他資料欄
<a name="transforms-derived-column"></a>

 **衍生資料欄**轉換可讓您根據數學公式或 SQL 運算式定義新資料欄，您可以在其中使用資料中的其他資料欄以及常數和常值。例如，若要從 "success" 和 "count" 資料欄衍生 “percentage” 資料欄，您可以輸入 SQL 運算式："success \$1 100 / count \$1\$1 '%'"。

 範例結果：


| success | count | 百分比 | 
| --- | --- | --- | 
| 14 | 100 | 14% | 
| 6 | 20 | 3% | 
| 3 | 40 | 7.5% | 

**若要新增「衍生資料欄」轉換：**

1. 開啟資源面板，然後選擇 **衍生資料欄**，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. (選用) 在**節點屬性**索引標籤上，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從節點父項清單選擇用作轉換之輸入來源的節點。

1. 在**轉換**索引標籤上，輸入資料欄的名稱及其內容的運算式。  
![\[螢幕擷取畫面顯示「衍生資料欄」轉換的「轉換」索引標籤。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/transforms-dervied-column-transform-tab.png)

# 使用「查詢」轉換從目錄資料表新增相符資料
<a name="transforms-lookup"></a>

 當索引鍵符合資料中定義的查詢資料欄時，**查詢**轉換可讓您從定義的目錄資料表新增資料欄。這等同於在資料與用作條件相符資料欄的查詢資料表之間進行左外部聯結。

**若要新增「查詢」轉換：**

1. 開啟資源面板，然後選擇**查詢**，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. (選用) 在**節點屬性**索引標籤上，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從節點父項清單選擇用作轉換之輸入來源的節點。

1. 在**轉換**索引標籤上，輸入用於執行查詢的完整目錄資料表名稱。例如，如果您的資料庫是 “mydb”，資料表是 “mytable”，則輸入 “mydb.mytable”。然後輸入條件以在查詢資料表中尋找相符項目 (如果組成了查詢索引鍵)。輸入以逗號分隔的索引鍵資料欄清單。如果一個或多個索引鍵資料欄的名稱不相同，則需要定義相符映射。

   例如，如果資料的資料欄是 “user\$1id” 和 “region”，並且在使用者資料表中，對應的資料欄名為 “id” 和 “region”，則在**要相符的資料欄**欄位中輸入：“user\$1id=id, region”。您可以執行 region=region 的動作，但並非必要，因為它們是相同的。

1. 最後，輸入要從查詢資料表中相符的資料列引入的資料欄，以將它們合併到資料中。如果沒有找到相符項目，這些資料欄將設定為 NULL。
**注意**  
在**查詢**轉換下，它使用左聯結以提高效率。如果查詢資料表具有複合索引鍵，請確保將要相符的資料欄設定為與所有索引鍵資料欄相符，以便僅產生一個相符項目。否則，將有多個查詢資料列相符，這將導致為每個相符項目新增額外的資料列。  
![\[螢幕擷取畫面顯示「查詢」轉換的「轉換」索引標籤。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/transforms-lookup-transform-tab.png)

# 使用「將陣列或映射分解成資料列」轉換
<a name="transforms-explode-array"></a>

 **分解**轉換可讓您將巢狀結構中的值擷取到更容易操作的個別資料列。對於陣列，該轉換會為陣列的每個值產生一個資料列，並複寫資料列中其他資料欄的值。對於映射，該轉換將為每個條目產生一個資料列，其中索引鍵和值作為資料欄加上該資料列中的任何其他資料欄。

 例如，如果此資料集中的「類別」陣列資料欄具有多個值。


| product\$1id | category | 
| --- | --- | 
| 1 | [sports, winter] | 
| 2 | [garden, tools] | 
| 3 | [videogames] | 
| 4 | [game, boardgame, social] | 
| 5 | [] | 

 如果將「類別」資料欄分解為具有相同名稱的資料欄，則會覆寫該資料欄。您可以選取要包含 NULL 以取得下列項目 (為了說明目的而排序)：


| product\$1id | category | 
| --- | --- | 
| 1 | sports | 
| 1 | winter | 
| 2 | garden | 
| 2 | tool | 
| 3 | videogames | 
| 4 | game | 
| 4 | boardgame | 
| 4 | social | 
| 5 |  | 

**若要新增「將陣列或映射分解成資料列」轉換：**

1. 開啟資源面板，然後選擇**將陣列或映射分解成資料列**，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. (選用) 在**節點屬性**索引標籤上，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從節點父項清單選擇用作轉換之輸入來源的節點。

1. 在**轉換**索引標籤上，選擇要分解的資料欄 (它必須是陣列或映射類型)。然後輸入陣列項目的資料欄名稱，或輸入索引鍵和值的資料欄名稱 (如果您要分解映射)。

1. (選用) 在**轉換**索引標籤上，依預設，如果要分解的資料欄為 NULL 或具有空白結構，則在分解的資料集中會省略它。如果您想保留資料列 (新資料欄為 NULL)，請勾選「包含 NULL」。  
![\[螢幕擷取畫面顯示「將陣列或映射分解成資料列」轉換的「轉換」索引標籤。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/transforms-explode-array-transform-tab.png)

# 使用「記錄比對」轉換來調用現有的資料分類轉換
<a name="transforms-record-matching"></a>

此轉換會調用現有的記錄比對機器學習資料分類轉換。

轉換會根據標籤，針對訓練過的模型來評估目前的資料。新增資料欄 "match\$1id"，以根據演算法訓練將每個資料列指派給一組視為等效的項目。如需詳細資訊，請參閱 [Record matching with Lake Formation FindMatches](https://docs.aws.amazon.com/glue/latest/dg/machine-learning.html)。

**注意**  
視覺化任務 AWS Glue 使用的 版本必須與 AWS Glue 用來建立記錄比對轉換的版本相符。

![\[螢幕擷取畫面顯示該轉換的資料預覽版。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/recording-matching-transform-1.png)


**將「記錄比對」轉換節點新增至您的任務圖表**

1. 開啟資源面板，然後選擇**記錄比對**，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. 在節點屬性面板中，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. 在**轉換**索引標籤上，輸入從**機器學習轉換**頁面擷取的 ID：  
![\[螢幕擷取畫面顯示「機器學習轉換」頁面中的 ID。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/recording-matching-transform-2.png)

1. (選用) 在**轉換**索引標籤上，您可以勾選新增可信度分數的選項。以額外運算為代價，該模型將估計每個相符項目的可信度分數，並將其作為附加資料欄。

# 移除 Null 資料列
<a name="transforms-remove-null-rows"></a>

此轉換會移除所有資料欄皆為 Null 的資料集資料列。此外，您可以擴展此條件以包含空白欄位，以便在至少有一個非空白資料欄的情況下保留資料列。

**將「移除 Null 資料列」轉換節點新增至您的任務圖表**

1. 開啟資源面板，然後選擇**移除 Null 資料列**，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. 在節點屬性面板中，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. (選用) 如果您想要求非 Null 值且非空白的資料列，可在**轉換**索引標籤上勾選**擴展**選項，這樣就會在此轉換中將空字串、陣列或映射視為 Null 值。

# 剖析包含 JSON 資料的字串資料欄
<a name="transforms-parse-json-column"></a>

此轉換會剖析包含 JSON 資料的字串資料欄，並將其轉換為結構或陣列資料欄，具體取決於 JSON 是物件還是陣列。(選用) 您可以保留已剖析資料欄和原始資料欄。

您可以使用選擇性的取樣來提供或推斷 JSON 結構描述 (若為 JSON 物件)。

**將「剖析 JSON 資料欄」轉換節點新增至您的任務圖表**

1. 開啟資源面板，然後選擇**剖析 JSON 資料欄**，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. 在節點屬性面板中，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. 在**轉換**索引標籤上，選取包含 JSON 字串的資料欄。

1. (選用) 在**轉換**索引標籤上，使用 SQL 語法輸入 JSON 資料所遵循的結構描述，例如：如果是物件，則為 "field1 STRING, field2 INT"；如果是陣列，則為 "ARRAY<STRING>"。

   如果是陣列就需要結構描述，但如果是物件，若未指定結構描述，則將使用資料來推斷結構描述。若要減少推斷結構描述的影響 (特別是在大型資料集上)，您可以輸入**用於推斷結構描述的範例比例**，以避免讀取整筆資料兩次。如果值小於 1，則會使用隨機範例的對應比例來推斷結構描述。如果資料可靠且物件在資料列之間保持一致，則可以使用小比例 (例如 0.1) 來改善效能。

1. (選用) 如果要同時保留原始字串資料欄和已剖析的資料欄，您可以在**轉換**索引標籤上輸入新的資料欄名稱。

# 擷取 JSON 路徑
<a name="transforms-extract-json-path"></a>

此轉換會從 JSON 字串資料欄擷取新資料欄。當您只需要幾個資料元素，而且不想將整個 JSON 內容匯入資料表結構描述時，此轉換非常有用。

**將「擷取 JSON 路徑」轉換節點新增至您的任務圖表**

1. 開啟資源面板，然後選擇**擷取 JSON 路徑**，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. 在節點屬性面板中，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. 在**轉換**索引標籤上，選取包含 JSON 字串的資料欄。輸入一個或多個以逗號分隔的 JSON 路徑運算式，每個運算式都會參考如何從 JSON 陣列或物件中擷取值。例如，如果 JSON 資料欄包含具有屬性 "prop\$11" 和 "prop2" 的物件，則可同時擷取兩者，並指定它們的名稱 "prop\$11, prop\$12"。

   如果 JSON 欄位具有特殊字元，若要從此 JSON `{"a. a": 1}` 中擷取屬性，可以使用 `$['a. a']` 路徑。例外狀況為逗號，因為它被保留用來分隔路徑。然後輸入每個路徑的對應資料欄名稱，並以逗號分隔。

1. (選用) 在**轉換**索引標籤上，您可以選擇在擷取後刪除 JSON 資料欄，這在擷取所需的部分後不需要其餘 JSON 資料時很有意義。

# 使用規則運算式擷取字串片段
<a name="transforms-regex-extractor"></a>

此轉換使用規則運算式擷取字串片段，並從中建立新資料欄，或使用 Regex 群組建立多個資料欄。

**將「Regex 擷取器」轉換節點新增至您的任務圖表**

1. 開啟資源面板，然後選擇 **Regex 擷取器**，將新轉換新增至您的任務圖表。新增節點時選取的節點將成為其父節點。

1. 在節點屬性面板中，您可以輸入任務圖表中節點的名稱。如果尚未選取節點父項，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

1. 在**轉換**索引標籤上，輸入規則運算式及其需要套用的資料欄。然後輸入要存放相符字串的新資料欄名稱。只有當來源資料欄為 Null 時，新資料欄才會是 Null。如果 Regex 不相符，則資料欄將為空白。

   如果 Regex 使用群組，則會有一個用逗號分隔的對應資料欄名稱，但是您可以透過將資料欄名稱保留為空白來跳過群組。

   例如，如果您有一個資料欄為 "purchase\$1date"，其中包含使用長和短 ISO 日期格式的字串，然後您想要擷取年、月、日和小時 (如果可用)。請注意小時群組為選用，否則在不可用的資料列中，擷取的所有群組都將是空白字串 (因為 Regex 不相符)。在這種情況下，我們不希望群組使時間可選，而是讓其成為內部時間，因此我們將名稱留空，使其不會被擷取 (該群組將包括 T 字元)。  
![\[螢幕擷取畫面顯示為 Regex 擷取器設定的規則運算式。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/regex-extractor-1.png)

   產生資料預覽：  
![\[螢幕擷取畫面顯示為 Regex 擷取器設定的資料預覽。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/regex-extractor-2.png)

# 建立自訂轉換
<a name="transforms-custom"></a>

如果您需要對資料執行更複雜的轉換，或是想要將資料屬性索引鍵新增至資料集，您可以將**自訂程式碼**轉換新增至您的任務圖表。自訂程式碼節點可讓您輸入執行轉換的指令碼。

使用自訂程式碼時，您必須使用結構描述編輯器來指出透過自訂程式碼對輸出所做的變更。編輯結構描述時，您可以執行下列動作：
+ 新增或移除資料屬性索引鍵
+ 變更資料屬性索引鍵的資料類型
+ 變更資料屬性索引鍵的名稱
+ 重新建構巢狀屬性索引鍵

您必須使用 *SelectFromCollection* 轉換以從自訂轉換節點的結果選擇單一 `DynamicFrame`，然後才能將輸出傳送到目標位置。

使用下列任務，將自訂轉換節點新增到您的任務圖表。

## 將自訂程式碼轉換節點新增至任務圖表
<a name="transforms-custom-addnode"></a>

**將自訂轉換節點新增到您的任務圖表**

1. (選用) 根據需要開啟資源面板，然後選擇**自訂轉換**，將自訂轉換新增至您的任務圖表。

1. 在 **Node properties (節點屬性)** 索引標籤上，輸入任務圖表中節點的名稱。如果尚未選取節點父項，或者如果您想要進行自訂轉換的多個輸入，請從**節點父項**清單選擇用作轉換之輸入來源的節點。

## 輸入自訂轉換節點的程式碼
<a name="transforms-custom-addcode"></a>

您可以在輸入欄位中輸入或複製程式碼。任務會使用此程式碼來執行資料轉換。您可以提供 Python 或 Scala 的程式碼片段。程式碼應該需要一個或多個 `DynamicFrames` 作為輸入，並會傳回 `DynamicFrames` 的集合。

**輸入自訂轉換節點的指令碼**

1. 在任務圖表中選取自訂轉換節點後，選擇**轉換**索引標籤。

1. 在**程式碼區塊**標題下的文字輸入欄位，貼上或輸入轉換的程式碼。您使用的程式碼必須符合**任務詳細資訊**索引標籤指定的語言。

   在程式碼中引用輸入節點時，AWS Glue Studio 會根據建立的順序循序命名任務圖表節點傳回的 `DynamicFrames`。在程式碼中使用下列其中一種命名方法：
   + 經典程式碼產生 – 使用功能性名稱來引用任務圖表中的節點。
     + 資料來源節點：`DataSource0`、`DataSource1`、`DataSource2`，以此類推。
     + 轉換節點：`Transform0`、`Transform1`、`Transform2`，以此類推。
   + 新程式碼產生 – 使用節點的**節點屬性**索引標籤，附加 '`_node1`'、'`_node2`'，以此類推。例如，`S3bucket_node1`、`ApplyMapping_node2`、`S3bucket_node2`、`MyCustomNodeName_node1`。

   如需新程式碼產生器的詳細資訊，請參閱 [指令碼程式碼產生](job-editor-features.md#code-gen)。

下列範例展示要在程式碼方塊中輸入的程式碼格式：

------
#### [ Python ]

下面的範例採用第一個接收的 `DynamicFrame`、將其轉換成 `DataFrame` 來套用原生篩選方法 (只保留超過 1000 個投票的記錄)，然後將其轉換回 `DynamicFrame`，然後再傳回它。

```
def FilterHighVoteCounts (glueContext, dfc) -> DynamicFrameCollection:
    df = dfc.select(list(dfc.keys())[0]).toDF()
    df_filtered = df.filter(df["vote_count"] > 1000)
    dyf_filtered = DynamicFrame.fromDF(df_filtered, glueContext, "filter_votes")
    return(DynamicFrameCollection({"CustomTransform0": dyf_filtered}, glueContext))
```

------
#### [ Scala ]

下面的範例採用第一個接收的 `DynamicFrame`、將其轉換成 `DataFrame` 來套用原生篩選方法 (只保留超過 1000 個投票的記錄)，然後將其轉換回 `DynamicFrame`，然後再傳回它。

```
object FilterHighVoteCounts {
  def execute(glueContext : GlueContext, input : Seq[DynamicFrame]) : Seq[DynamicFrame] = {
    val frame = input(0).toDF()
    val filtered = DynamicFrame(frame.filter(frame("vote_count") > 1000), glueContext)
    Seq(filtered)
  }
}
```

------

## 編輯自訂轉換節點的結構描述
<a name="transforms-custom-editschema"></a>

當您使用自訂轉換節點時，AWS Glue Studio 不會自動推斷由轉換建立的輸出結構描述。您可以使用結構描述編輯器來描述由自訂轉換程式碼所實作的結構描述變更。

自訂程式碼節點可以有任意數量的父節點，每個節點都會提供 `DynamicFrame` 作為自訂程式碼的輸入。自訂程式碼節點會傳回 `DynamicFrames` 的集合。用作輸入的每個 `DynamicFrame` 會有相關聯的結構描述。您必須新增用於描述每個由自訂程式碼節點傳回之 `DynamicFrame` 的結構描述。

**注意**  
 當您在自訂轉換上設定自己的結構描述時，AWS Glue Studio 不會從以前的節點繼承結構描述。若要更新結構描述，請選擇自訂轉換節點，然後選擇資料預覽索引標籤。產生預覽後，選擇 'Use Preview Schema'。然後，結構描述將會由使用預覽資料的結構描述替換。

**編輯自訂轉換節點的輸出結構描述**

1. 在任務圖表中選取自訂轉換節點後，在節點詳細資訊面板中，選擇**輸出結構描述**索引標籤。

1. 選擇**編輯**以對結構描述進行變更。

   如果您有巢狀資料屬性索引鍵 (例如陣列或物件)，您可以選擇每個結構描述面板右上方的**展開列**圖示 (![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/expand-rows-icon.png))，以展開子資料屬性索引鍵的清單。選擇此圖示後，它會變更為**摺疊列**圖示 (![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/collapse-rows-icon.png))，您可以選擇摺疊子屬性索引鍵清單。

1. 使用頁面右側區段中的下列動作來修改結構描述：
   + 若要重新命名屬性索引鍵，請將游標放在屬性索引鍵的**索引鍵**文字方塊，然後輸入新名稱。
   + 若要變更屬性索引鍵的資料類型，請使用清單來選擇屬性索引鍵的新資料類型。
   + 若要將新的頂層屬性索引鍵新增至結構描述，請選擇位於**取消**按鈕左側的**溢位** (![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/edit-schema-actions-button.png)) 圖示，然後選擇**新增根索引鍵**。
   + 若要將子屬性索引鍵新增至結構描述，請選擇與父索引鍵相關聯**新增索引鍵**圖示 ![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/filter-add-icon.png)。輸入子索引鍵的名稱，然後選擇資料類型。
   + 若要從結構描述移除屬性索引鍵，請選擇索引鍵名稱最右側的**移除**圖示 (![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/delete-icon-black.png))。

1. 如果您的自訂轉換程式碼使用多個 `DynamicFrames`，您可以新增其他輸出結構描述。
   + 若要新增空白結構描述，請選擇**溢位** (![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/edit-schema-actions-button.png)) 圖示，然後選擇**新增輸出結構描述**。
   + 若要將現有結構描述複製到新的輸出結構描述，請確定要複製的結構描述顯示在結構描述選取器中。選擇**溢位** (![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/edit-schema-actions-button.png)) 圖示，然後選擇**複製**。

   如果要移除輸出結構描述，請確定要複製的結構描述顯示在結構描述選取器中。選擇**溢位** (![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/edit-schema-actions-button.png)) 圖示，然後選擇**刪除**。

1. 新增根索引鍵至新的結構描述或編輯重複的索引鍵。

1. 當您修改輸出結構描述時，請選擇**套用**按鈕以儲存您的變更，並結束結構描述編輯器。

   如果您不想儲存您的變更，請選擇**取消**按鈕。

## 設定自訂轉換輸出
<a name="transforms-custom-output"></a>

自訂程式碼轉換會傳回 `DynamicFrames` 集合，即使結果集內只有一個 `DynamicFrame`。

**處理自訂轉換節點的輸出**

1. 新增*SelectFromCollection*轉換節點，該節點具有自訂轉換節點做為其父節點。更新此轉換以指示您想要使用的資料集。如需詳細資訊，請參閱[使用 SelectFromCollection 選擇要保留的資料集](transforms-configure-select-collection.md)。

1. 如果您想使用自訂轉換節點產生的其他 `DynamicFrames`，請新增其他 *SelectFromCollection* 轉換至任務圖表。

   請試想下列場景：您新增自訂轉換節點，將航班資料集分割成多個資料集，但在每個輸出結構描述中複製某些識別屬性索引鍵，例如航班日期或航班號碼。您可以為每個輸出結構描述新增 *SelectFromCollection* 轉換節點，並將自訂轉換節點做為其父項。

1. (選用) 然後，您可以使用每個 *SelectFromCollection* 將節點轉換為任務中其他節點的輸入，或作為資料目標節點的父節點。

# 使用自訂視覺化轉換來轉換資料
<a name="custom-visual-transform"></a>

 自訂視覺化轉換允許您建立轉換並使其可用於 AWS Glue Studio 任務。自訂視覺化轉換讓可能不熟悉編寫程式碼的 ETL 開發人員，使用 AWS Glue Studio 介面搜尋和使用不斷增長的轉換程式庫。

 您可以建立自訂視覺化轉換，然後將其上傳到 Amazon S3，以便透過 AWS Glue Studio 中的視覺化編輯器加以使用，從而處理這些任務。

**Topics**
+ [開始使用自訂視覺化轉換](custom-visual-transform-getting-started.md)
+ [步驟 1. 建立 JSON 組態檔案](custom-visual-transform-json-config-file.md)
+ [步驟 2. 實作轉換邏輯](custom-visual-transform-implementation.md)
+ [步驟 3。在 AWS Glue Studio 中驗證自訂視覺化轉換並進行疑難排解](custom-visual-transform-validation.md)
+ [步驟 4. 視需要更新自訂視覺化轉換](custom-visual-transform-updating-transforms.md)
+ [步驟 5. 在 AWS Glue Studio 中使用自訂視覺化轉換](custom-visual-transform-create-gs.md)
+ [使用範例](custom-visual-transform-example-json.md)
+ [自訂視覺化指令碼範例](custom-visual-transform-example-scripts.md)
+ [影片](#custom-visual-transform-video)

# 開始使用自訂視覺化轉換
<a name="custom-visual-transform-getting-started"></a>

 若要建立自訂視覺化轉換，請執行以下步驟。
+  步驟 1. 建立 JSON 組態檔案 
+  步驟 2. 實作轉換邏輯 
+  步驟 3。驗證自訂視覺化轉換 
+  步驟 4. 視需要更新自訂視覺化轉換 
+  步驟 5. 在 AWS Glue Studio 中使用自訂視覺化轉換 

 透過設定 Amazon S3 儲存貯體開始使用，然後繼續**步驟 1. 建立 JSON 組態檔案。**

## 先決條件
<a name="custom-visual-transform-prerequisites"></a>

 客戶提供的轉換位於客戶 AWS 帳戶中。該帳戶擁有轉換，因此擁有檢視 (搜尋和使用)、編輯或刪除轉換的所有許可。

 若要在 中使用自訂轉換AWS Glue Studio，您需要建立兩個檔案並將其上傳至該 AWS 帳戶中的 Amazon S3 資產儲存貯體：
+  **Python 檔案** - 包含轉換函數 
+  **JSON 檔案** – 描述轉換。這也稱為定義轉換所需的組態檔案。

 為了將檔案配對在一起，請對兩者使用相同名稱。例如：
+  myTransform.json 
+  myTransform.py 

 或者，您可以透過提供包含圖示的 **SVG 檔案**，為自訂視覺化轉換指定自訂圖示。為了將檔案配對在一起，請對圖示使用相同名稱：
+  myTransform.svg 

 AWS Glue Studio 將使用各自的檔案名稱自動比對它們。任何現有模組的檔案名稱皆不能相同。

## 轉換檔案名稱的建議慣例
<a name="custom-visual-transform-recommended-transform-file-name"></a>

 AWS Glue Studio 會將檔案作為模組 (例如 `import myTransform`) 匯入任務指令碼中。因此，您的檔案名必須遵循為 Python 變數名稱 (識別符) 設定的相同命名規則。具體來說，名稱必須以字母或底線開頭，且完全由字母、數字和/或底線組成。

**注意**  
 確保轉換檔案名稱不會與現有的載入 Python 模組 (例如 `sys, array, copy` 等) 衝突，避免出現未預期的執行時間問題。

## 設定 Amazon S3 儲存貯體
<a name="custom-visual-transform-setting-up-s3"></a>

 您建立的轉換會儲存在 Amazon S3 中，並由 AWS 您的帳戶擁有。只要將檔案 (json 和 py) 上傳到目前存放所有任務指令碼的 Amazon S3 資產資料夾 (例如 `s3://aws-glue-assets-<accountid>-<region>/transforms`)，即可建立新的自訂視覺化轉換。如果使用自訂圖示，也可以將其上傳。按預設，AWS Glue Studio 將從相同 S3 儲存貯體的 /transforms 資料夾中讀取所有 .json 檔案。

# 步驟 1. 建立 JSON 組態檔案
<a name="custom-visual-transform-json-config-file"></a>

 需要 JSON 組態檔案才能定義和描述您的自訂視覺化轉換。組態檔案的結構描述如下。

## JSON 檔案結構
<a name="custom-visual-transform-json-file-structure"></a>

 **欄位** 
+  `name: string` – (必要) 用來識別轉換的轉換系統名稱。遵循為 Python 變數名稱 (識別符) 設定的相同命名規則。具體來說，名稱必須以字母或底線開頭，且完全由字母、數字和/或底線組成。
+  `displayName: string` – (選用) AWS Glue Studio 視覺化任務編輯器中顯示的轉換名稱。如果未指定 `displayName`，則 `name` 會用作 AWS Glue Studio 中的轉換名稱。
+  `description: string` – (選用) 轉換描述會顯示在 AWS Glue Studio 中，且可供搜尋。
+  `functionName: string` – (必要) Python 函數名稱用於識別要在 Python 指令碼中呼叫的函數。
+  `path: string` – (選用) Python 來源檔案的完整 Amazon S3 路徑。如果未指定，則 AWS Glue 使用檔案名稱比對功能將 .json 和 .py 檔案配對在一起。例如，JSON 檔案的名稱 `myTransform.json` 會與位於同一個 Amazon S3 位置的 Python 檔案 `myTransform.py` 配對。
+  `parameters: Array of TransformParameter object` – (選用) 在 AWS Glue Studio 視覺化編輯器中設定參數時顯示的參數清單。

<a name="transformparameter-fields"></a> **TransformParameter 欄位** 
+  `name: string` – (必要) 將作為任務指令碼中的具名引數傳遞至 Python 函數的參數名稱。遵循為 Python 變數名稱 (識別符) 設定的相同命名規則。具體來說，名稱必須以字母或底線開頭，且完全由字母、數字和/或底線組成。
+  `displayName: string` – (選用) AWS Glue Studio 視覺化任務編輯器中顯示的轉換名稱。如果未指定 `displayName`，則 `name` 會用作 AWS Glue Studio 中的轉換名稱。
+  `type: string` – (必要) 接受常見 Python 資料類型的參數類型。有效值： 'str' \$1 'int' \$1 'float' \$1 'list' \$1 'bool'。
+  `isOptional: boolean`：(選用) 決定參數是否為選用參數。依預設，所有參數皆為必要參數。
+  `description: string` – (選用) 描述會顯示在 AWS Glue Studio 中，可協助使用者設定轉換參數。
+  `validationType: string` – (選用) 定義驗證此參數的方式。目前僅支援規則運算式。依預設，系統會將驗證類型設定為 `RegularExpression`。
+  `validationRule: string` – (選用) 在 `validationType` 設定為 `RegularExpression` 時，用於在提交之前驗證表單輸入的規則運算式。規則運算式語法必須相容於 [RegExp Ecmascript 規格](https://tc39.es/ecma262/multipage/text-processing.html#sec-regexp-regular-expression-objects)。
+  `validationMessage: string` – (選用) 驗證失敗時顯示的訊息。
+  `listOptions: An array of TransformParameterListOption object` 或 `string` 或字串值 "column"：(選用) 用於在單選或複選 UI 控制中顯示的選項。接受逗號分隔值清單或 `TransformParameterListOption` 類型的強型別 JSON 物件。您也可以透過指定字串值 "column" 動態填入父節點結構描述中的資料欄清單。
+  `listType: string` – (選用) 定義類型 = 'list' 的選項類型。有效值： 'str' \$1 'int' \$1 'float' \$1 'list' \$1 'bool'。接受常見 Python 資料類型的參數類型。

 **TransformParameterListOption 欄位** 
+  `value: string | int | float | bool` – (必要) 選項值。
+  `label: string` - (可選) 在選取下拉式選單中顯示的選項標籤。

## AWS Glue Studio 中的轉換參數
<a name="custom-visual-transform-parameters"></a>

 依預設，除非參數在 .json 檔案中標記為 `isOptional`，否則參數為必要項。在 AWS Glue Studio 中，參數會顯示在 **Transform** (轉換) 索引標籤中。範例顯示使用者定義的參數，例如電子郵件地址、電話號碼、年齡、性別和原籍國家/地區。

![\[螢幕擷取畫面顯示選取的自訂視覺化轉換，以及包含使用者定義參數的轉換索引標籤。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/dynamic-transform-parameters.png)


 您可以在 `validationMessage` 中指定 `validationRule` 參數並指定驗證訊息，使用 json 檔案中的規則運算式強制執行 AWS Glue Studio 中的某些驗證。

```
      "validationRule": "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$",
      "validationMessage": "Please enter a valid US number"
```

**注意**  
 由於驗證發生在瀏覽器中，您的規則運算式語法必須相容於 [RegExp Ecmascript 規格](https://tc39.es/ecma262/multipage/text-processing.html#sec-regexp-regular-expression-objects)。這些規則運算式不支援 Python 語法。

 新增驗證可防止使用者儲存具有錯誤之使用者輸入的任務。AWS Glue Studio 顯示驗證訊息，如範例所示：

![\[螢幕擷取畫面顯示含有驗證錯誤訊息的自訂視覺化轉換參數：Please enter a valid email address (請輸入有效的電子郵件地址)。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/dynamic-transform-validation-message.png)


 系統會根據參數組態在 AWS Glue Studio 中顯示參數。
+  如果 `type` 是 `str`、`int` 或 `float` 中的任何一項，則會顯示文字輸入欄位。例如，螢幕擷取畫面會顯示「電子郵件地址」和「您的年齡」參數的輸入欄位。  
![\[螢幕擷取畫面顯示含有文字輸入欄位的自訂視覺化轉換參數。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/dynamic-transform-email-address.png)  
![\[螢幕擷取畫面顯示含有文字輸入欄位的自訂視覺化轉換參數。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/dynamic-transform-your-age.png)
+  如果 `type` 為 `bool`，則會顯示核取方塊。  
![\[螢幕擷取畫面顯示含有文字輸入欄位的自訂視覺化轉換參數。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/dynamic-transform-bool.png)
+  如果 `type` 為 `str` 且提供 `listOptions`，則會顯示單一選取清單。  
![\[螢幕擷取畫面顯示含有單一選取清單下拉式選單的自訂視覺化轉換參數。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/dynamic-transform-single-list.png)
+  如果 `type` 為 `list` 和 `listOptions` 且提供 `listType`，則會顯示多選清單。  
![\[螢幕擷取畫面顯示含有清單下拉式選單的自訂視覺化轉換參數。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/dynamic-transform-list-options.png)

### 顯示資料欄選取器作為參數
<a name="custom-visual-transform-parameters-column-selector"></a>

 如果組態要求使用者從結構描述選擇資料欄，您可以顯示資料欄選取器，讓使用者不需要輸入資料欄名稱。透過將 `listOptions` 欄位設定為 "column"，AWS Glue Studio 會根據父節點輸出結構描述動態顯示資料欄選取器。AWS Glue Studio 可以顯示單個或多個資料欄選取器。

 下列範例使用結構描述：

![\[螢幕擷取畫面顯示範例輸出結構描述。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/custom-visual-transform-example-schema.png)


**若要定義「自訂視覺化轉換」參數以顯示單一資料欄：**

1.  在您的 JSON 檔案中，對於 `parameters` 物件，將 `listOptions` 值設為 "column"。這可讓使用者從 AWS Glue Studio 中的點選清單中選擇資料欄。  
![\[螢幕擷取畫面會顯示範例 JSON 檔案 (其中 listOptions 參數設定為 "column") 並在 AWS Glue Studio 中顯示產生的使用者介面。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/custom-visual-transform-example-listoptions-column.png)

1.  您也可以透過將參數定義為以下項目來允許選取多個資料欄：
   +  `listOptions: "column"` 
   +  `type: "list"`   
![\[螢幕擷取畫面會顯示範例 JSON 檔案 (其中 listOptions 參數設定為 "column" 且類型設定為 "list")，並在 AWS Glue Studio 中顯示產生的使用者介面。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/custom-visual-transform-example-listoptions-column-type-list.png)

# 步驟 2. 實作轉換邏輯
<a name="custom-visual-transform-implementation"></a>

**注意**  
 自訂視覺化轉換僅支援 Python 指令碼。不支援 Scala。

 若要新增實作由 .json 組態檔案定義之函數的程式碼，建議將 Python 檔案放置在與 .json 檔案相同的位置，具有相同的名稱，但副檔名為 ".py"。AWS Glue Studio 會自動配對 .json 和 .py 檔案，讓您免於在組態檔案中指定 Python 檔案的路徑。

 在 Python 檔案中，新增宣告的函數，設定具名參數並註冊用於 `DynamicFrame`。以下是 Python 檔案的範例：

```
from awsglue import DynamicFrame

# self refers to the DynamicFrame to transform, 
# the parameter names must match the ones defined in the config
# if it's optional, need to provide a default value
def myTransform(self, email, phone, age=None, gender="", 
                      country="", promotion=False):
   resulting_dynf = # do some transformation on self 
   return resulting_dynf
   
DynamicFrame.myTransform = myTransform
```

 建議使用 AWS Glue 筆記本，以最快的方式開發和測試 Python 程式碼。請參閱 [AWS Glue Studio 中的筆記本入門](https://docs.aws.amazon.com/glue/latest/ug/notebook-getting-started.html)。

 為了說明如何實作轉換邏輯，下列範例中的自訂視覺化轉換是用來篩選傳入資料的轉換，以便僅保留與美國特定州相關的資料。.json 檔案包含 `functionName` 的參數 `custom_filter_state` 和兩個引數 (類型為 "str" 的 "state" 和 "colName")。

 範例組態 .json 檔案是：

```
{
"name": "custom_filter_state",
"displayName": "Filter State",
"description": "A simple example to filter the data to keep only the state indicated.",
"functionName": "custom_filter_state",
"parameters": [
   {
    "name": "colName",
    "displayName": "Column name",
    "type": "str",
    "description": "Name of the column in the data that holds the state postal code"
   },
   {
    "name": "state",
    "displayName": "State postal code",
    "type": "str",
    "description": "The postal code of the state whole rows to keep"
   }   
  ]
}
```

**在 Python 中實作隨附指令碼**

1.  啟動 AWS Glue 筆記本並執行提供給要啟動之工作階段的初始儲存格。執行初始儲存格會建立必要的基本元件。

1.  建立執行篩選的函數 (如範例中所述)，並在 `DynamicFrame` 上註冊。複製下方的程式碼並貼入 AWS Glue 筆記本的儲存格中。

   ```
   from awsglue import DynamicFrame
   
   def custom_filter_state(self, colName, state):
       return self.filter(lambda row: row[colName] == state)
   
   DynamicFrame.custom_filter_state = custom_filter_state
   ```

1.  建立或載入範例資料，以測試相同儲存格或新儲存格中的程式碼。如果在新儲存格中新增範例資料，請不要忘記執行該儲存格。例如：

   ```
   # A few of rows of sample data to test
   data_sample = [
       {"state": "CA", "count": 4},
       {"state": "NY", "count": 2},
       {"state": "WA", "count": 3}    
   ]
   df1 = glueContext.sparkSession.sparkContext.parallelize(data_sample).toDF()
   dynf1 = DynamicFrame.fromDF(df1, glueContext, None)
   ```

1.  測試以使用不同的引數驗證 "custom\$1filter\$1state"：  
![\[螢幕擷取畫面顯示了 AWS Glue 筆記本中的儲存格，其中包含傳遞給 dynamicFrame.show 函數的引數。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/dynamic-transform-notebook-test-python.png)

1.  執行多個測試後，使用 .py 副檔名儲存程式碼，並使用與 .json 檔案名稱相同的名稱命名 .py 檔案。.py 和 .json 檔案應該位於相同的轉換資料夾中。

    複製下方程式碼並貼入檔案中，再使用 .py 檔案副檔名重新命名。

   ```
   from awsglue import DynamicFrame
   
   def custom_filter_state(self, colName, state):
       return self.filter(lambda row: row[colName] == state)
   
   DynamicFrame.custom_filter_state = custom_filter_state
   ```

1.  在 AWS Glue Studio 中，開啟視覺化任務，然後從可用的 **Transforms** (轉換) 清單中選取轉換，以將該轉換新增至任務。

    若要在 Python 指令碼程式碼中重複使用此轉換，請將 Amazon S3 路徑新增至「參考檔案路徑」下任務中的 .py 檔案，然後在指令碼中匯入 Python 檔案的名稱 (不含副檔名)，方法為將 Python 檔案的名稱新增至檔案頂端。例如：`import` <檔案名稱 (不含副檔名)> 

# 步驟 3。在 AWS Glue Studio 中驗證自訂視覺化轉換並進行疑難排解
<a name="custom-visual-transform-validation"></a>

 在將自訂視覺化轉換載入 AWS Glue Studio 之前，AWS Glue Studio 會先驗證 JSON 組態檔案。驗證包括：
+  存在必要欄位 
+  JSON 格式驗證 
+  參數不正確或無效 
+  在同一個 Amazon S3 路徑中存在 .py 和 .json 檔案 
+  比對 .py 和 .json 的檔案名稱 

 如果驗證成功，轉換會列在視覺化編輯器的可用 **Actions** (動作) 清單中。如果提供了自訂圖示，則該圖示應顯示在**動作**旁。

 如果驗證失敗，AWS Glue Studio 不會載入自訂視覺化轉換。

# 步驟 4. 視需要更新自訂視覺化轉換
<a name="custom-visual-transform-updating-transforms"></a>

 一旦建立和使用，只要轉換遵循相應的 json 定義，就可以更新轉換指令碼：
+  指派給 DynamicFrame 時使用的名稱與 json `functionName` 非常相符。
+  函數引數必須在 json 檔案中定義，如[步驟 1. 建立 JSON 組態檔案](custom-visual-transform-json-config-file.md)中所述。
+  Python 檔案的 Amazon S3 路徑無法變更，因為這些任務直接依存於該路徑。

**注意**  
 如果需要進行任何更新，請確保指令碼和 .json 檔案一致地更新，而且透過新轉換再次正確儲存任何視覺化任務。如果在進行更新之後未儲存視覺化任務，將不會套用和驗證更新。如果 Python 指令碼檔案被重新命名或未放置在 .json 檔案旁，則需要您在 .json 檔案中指定完整路徑。

**自訂圖示**

如果您確定**動作**的預設圖示在視覺上無法將其區分為工作流程的一部分，您可以提供自訂圖示，如 [開始使用自訂視覺化轉換](custom-visual-transform-getting-started.md) 中所述。您可以透過更新 Amazon S3 中託管的對應 SVG 來更新圖示。

為了獲得最佳效果，請依照 Cloudscape 設計系統的指引將影像設計為以 32x32 像素檢視。如需有關 Cloudscape 指引的詳細資訊，請參閱 [Cloudscape 文件](https://cloudscape.design/foundation/visual-foundation/iconography/#custom-icons)。

# 步驟 5. 在 AWS Glue Studio 中使用自訂視覺化轉換
<a name="custom-visual-transform-create-gs"></a>

 若要在 AWS Glue Studio 中使用自訂視覺化轉換，請上傳組態檔案和來源檔案，然後從 **Action ** (動作) 選單中選取轉換。任何需要值或輸入的參數都可以在 **Transform** (轉換) 索引標籤中使用。

1.  將兩個檔案 (Python 來源檔案和 JSON 組態檔案) 上傳至存放任務指令碼的 Amazon S3 資產資料夾。依預設，AWS Glue 會從同一個 Amazon S3 儲存貯體內的 **/transforms** 資料夾中提取所有 JSON 檔案。

1.  從 **Action** (動作) 選單中選擇自訂視覺化轉換。其會以您在 .json 組態檔案中指定的轉換 `displayName` 或名稱來命名。

1.  為在組態檔案中設定的任何參數輸入值。  
![\[螢幕擷取畫面顯示具有參數的自訂視覺化轉換，供使用者在 Transform (轉換) 索引標籤中完成。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/dynamic-transform-parameters.png)

# 使用範例
<a name="custom-visual-transform-example-json"></a>

 以下是 .json 組態檔案中所有可能參數的範例。

```
{
  "name": "MyTransform",
  "displayName": "My Transform",
  "description": "This transform description will be displayed in UI",
  "functionName": "myTransform",
  "parameters": [
      {
      "name": "email",
      "displayName": "Email Address",
      "type": "str",
      "description": "Enter your work email address below",
      "validationType": "RegularExpression",
      "validationRule": "^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$",
      "validationMessage": "Please enter a valid email address"
    },
    {
      "name": "phone",
      "displayName": "Phone Number",
      "type": "str",
      "description": "Enter your mobile phone number below",
      "validationRule": "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$",
      "validationMessage": "Please enter a valid US number"
    },
    {
      "name": "age",
      "displayName": "Your age",
      "type": "int",
      "isOptional": true
    },
    {
      "name": "gender",
      "displayName": "Your gender",
      "type": "str",
      "listOptions": [
            {"label": "Male", "value": "male"},
            {"label": "Female", "value": "female"},
            {"label": "Other", "value": "other"}
        ],
      "isOptional": true
    },
    {
      "name": "country",
      "displayName": "Your origin country ?",
      "type": "list",
      "listOptions": "Afghanistan,Albania,Algeria,American Samoa,Andorra,Angola,Anguilla,Antarctica,Antigua and Barbuda,Argentina,Armenia,Aruba,Australia,Austria,Azerbaijan,Bahamas,Bahrain,Bangladesh,Barbados,Belarus,Belgium,Belize,Benin,Bermuda,Bhutan,Bolivia,Bosnia and Herzegovina,Botswana,Bouvet Island,Brazil,British Indian Ocean Territory,Brunei Darussalam,Bulgaria,Burkina Faso,Burundi,Cambodia,Cameroon,Canada,Cape Verde,Cayman Islands,Central African Republic,Chad,Chile,China,Christmas Island,Cocos (Keeling Islands),Colombia,Comoros,Congo,Cook Islands,Costa Rica,Cote D'Ivoire (Ivory Coast),Croatia (Hrvatska,Cuba,Cyprus,Czech Republic,Denmark,Djibouti,Dominica,Dominican Republic,East Timor,Ecuador,Egypt,El Salvador,Equatorial Guinea,Eritrea,Estonia,Ethiopia,Falkland Islands (Malvinas),Faroe Islands,Fiji,Finland,France,France,Metropolitan,French Guiana,French Polynesia,French Southern Territories,Gabon,Gambia,Georgia,Germany,Ghana,Gibraltar,Greece,Greenland,Grenada,Guadeloupe,Guam,Guatemala,Guinea,Guinea-Bissau,Guyana,Haiti,Heard and McDonald Islands,Honduras,Hong Kong,Hungary,Iceland,India,Indonesia,Iran,Iraq,Ireland,Israel,Italy,Jamaica,Japan,Jordan,Kazakhstan,Kenya,Kiribati,Korea (North),Korea (South),Kuwait,Kyrgyzstan,Laos,Latvia,Lebanon,Lesotho,Liberia,Libya,Liechtenstein,Lithuania,Luxembourg,Macau,Macedonia,Madagascar,Malawi,Malaysia,Maldives,Mali,Malta,Marshall Islands,Martinique,Mauritania,Mauritius,Mayotte,Mexico,Micronesia,Moldova,Monaco,Mongolia,Montserrat,Morocco,Mozambique,Myanmar,Namibia,Nauru,Nepal,Netherlands,Netherlands Antilles,New Caledonia,New Zealand,Nicaragua,Niger,Nigeria,Niue,Norfolk Island,Northern Mariana Islands,Norway,Oman,Pakistan,Palau,Panama,Papua New Guinea,Paraguay,Peru,Philippines,Pitcairn,Poland,Portugal,Puerto Rico,Qatar,Reunion,Romania,Russian Federation,Rwanda,Saint Kitts and Nevis,Saint Lucia,Saint Vincent and The Grenadines,Samoa,San Marino,Sao Tome and Principe,Saudi Arabia,Senegal,Seychelles,Sierra Leone,Singapore,Slovak Republic,Slovenia,Solomon Islands,Somalia,South Africa,S. Georgia and S. Sandwich Isls.,Spain,Sri Lanka,St. Helena,St. Pierre and Miquelon,Sudan,Suriname,Svalbard and Jan Mayen Islands,Swaziland,Sweden,Switzerland,Syria,Tajikistan,Tanzania,Thailand,Togo,Tokelau,Tonga,Trinidad and Tobago,Tunisia,Turkey,Turkmenistan,Turks and Caicos Islands,Tuvalu,Uganda,Ukraine,United Arab Emirates,United Kingdom (Britain / UK),United States of America (USA),US Minor Outlying Islands,Uruguay,Uzbekistan,Vanuatu,Vatican City State (Holy See),Venezuela,Viet Nam,Virgin Islands (British),Virgin Islands (US),Wallis and Futuna Islands,Western Sahara,Yemen,Yugoslavia,Zaire,Zambia,Zimbabwe",
      "description": "What country were you born in?",
      "listType": "str",
      "isOptional": true
    },
    {
      "name": "promotion",
      "displayName": "Do you want to receive promotional newsletter from us?",
      "type": "bool",
      "isOptional": true
    }
  ]
}
```

# 自訂視覺化指令碼範例
<a name="custom-visual-transform-example-scripts"></a>

 下列範例會執行對等的轉換。不過，第二個範例 (SparkSQL) 最簡潔且最有效率，其次是 pandas UDF，最後是第一個範例中的低階映射。下列範例是將兩欄加總的簡單轉換範例的完整範例：

```
from awsglue import DynamicFrame
 
# You can have other auxiliary variables, functions or classes on this file, it won't affect the runtime
def record_sum(rec, col1, col2, resultCol):
    rec[resultCol] = rec[col1] + rec[col2]
    return rec
 
 
# The number and name of arguments must match the definition on json config file
# (expect self which is the current DynamicFrame to transform
# If an argument is optional, you need to define a default value here
#  (resultCol in this example is an optional argument)
def custom_add_columns(self, col1, col2, resultCol="result"):
    # The mapping will alter the columns order, which could be important
    fields = [field.name for field in self.schema()]
    if resultCol not in fields:
        # If it's a new column put it at the end
        fields.append(resultCol)
    return self.map(lambda record: record_sum(record, col1, col2, resultCol)).select_fields(paths=fields)
 
 
# The name we assign on DynamicFrame must match the configured "functionName"
DynamicFrame.custom_add_columns = custom_add_columns
```

 下列範例是利用 SparkSQL API 的對等轉換。

```
from awsglue import DynamicFrame
 
# The number and name of arguments must match the definition on json config file
# (expect self which is the current DynamicFrame to transform
# If an argument is optional, you need to define a default value here
#  (resultCol in this example is an optional argument)
def custom_add_columns(self, col1, col2, resultCol="result"):
    df = self.toDF()
    return DynamicFrame.fromDF(
        df.withColumn(resultCol, df[col1] + df[col2]) # This is the conversion logic
        , self.glue_ctx, self.name) 
 
 
# The name we assign on DynamicFrame must match the configured "functionName"
DynamicFrame.custom_add_columns = custom_add_columns
```

 下列範例使用相同的轉換，但使用 pandas UDF，這比使用普通 UDF 更有效率。如需有關撰寫 pandas UDF 的詳細資訊，請參閱 [Apache Spark SQL 文件](https://spark.apache.org/docs/3.1.1/api/python/reference/api/pyspark.sql.functions.pandas_udf.html)。

```
from awsglue import DynamicFrame
import pandas as pd
from pyspark.sql.functions import pandas_udf
 
# The number and name of arguments must match the definition on json config file
# (expect self which is the current DynamicFrame to transform
# If an argument is optional, you need to define a default value here
#  (resultCol in this example is an optional argument)
def custom_add_columns(self, col1, col2, resultCol="result"):
    @pandas_udf("integer")  # We need to declare the type of the result column
    def add_columns(value1: pd.Series, value2: pd.Series) → pd.Series:
        return value1 + value2
 
    df = self.toDF()
    return DynamicFrame.fromDF(
        df.withColumn(resultCol, add_columns(col1, col2)) # This is the conversion logic
        , self.glue_ctx, self.name) 
 
# The name we assign on DynamicFrame must match the configured "functionName"
DynamicFrame.custom_add_columns = custom_add_columns
```

## 影片
<a name="custom-visual-transform-video"></a>

下列影片提供視覺化自訂轉換的簡介，並示範如何使用這些轉換。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/xFpAhANcVcg/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/xFpAhANcVcg)


# 將資料湖架構與 AWS Glue Studio 搭配使用
<a name="gs-data-lake-formats"></a>

## 概觀
<a name="gs-data-lake-formats-overview"></a>

 若檔案存放於在 Amazon S3 上建置的資料湖中，開放原始碼資料湖架構可以簡化這些檔案的增量資料處理。AWS Glue 3.0 及更高版本支援下列開放原始碼資料湖儲存架構：
+  Apache Hudi 
+  Linux Foundation Delta Lake 
+  Apache Iceberg 

 從 AWS Glue 4.0 開始，AWS Glue 會為這些架構提供原生支援，讓您能夠以交易一致的方式讀取和寫入存放在 Amazon S3 中的資料。您不需要安裝個別的連接器或完成額外的設定步驟，就能在 AWS Glue 任務中使用這些架構。

 透過 Spark 指令碼編輯器任務，資料湖架構可以用作 AWS Glue Studio 內的來源或目標。如需使用 Apache Hudi、Apache Iceberg 和 Delta Lake 的詳細資訊，請參閱[搭配使用資料湖架構與 AWS Glue ETL 任務](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-datalake-native-frameworks.html)。

## 從 AWS Glue 串流來源建立開放資料表格式
<a name="gs-data-lake-formats-streaming"></a>

AWS Glue 串流 ETL 任務會持續使用來自串流來源的資料、清理和轉換傳輸中的資料，並在幾秒鐘內提供分析。

AWS 提供廣泛的服務選擇，以支援您的需求。Database Migration Service AWS 等資料庫複寫服務可以將資料從來源系統複寫到 Amazon S3，Amazon S3 通常會託管資料湖的儲存層。雖然在支援線上來源應用程式之關聯式資料庫管理系統 (RDBMS) 上套用更新相當簡單，但在資料湖上套用此 CDC 程序卻相當困難。開放原始碼資料管理架構可簡化增量資料處理與資料管道開發，是解決此問題的絕佳選擇。

如需詳細資訊，請參閱：
+ [使用串流建立以 Apache Hudi AWS Glue 為基礎的near-real-time交易資料湖](https://aws.amazon.com/blogs/big-data/create-an-apache-hudi-based-near-real-time-transactional-data-lake-using-aws-dms-amazon-kinesis-aws-glue-streaming-etl-and-data-visualization-using-amazon-quicksight/)
+ [建置即時 GDPR 對齊的 Apache Iceberg 資料湖](https://aws.amazon.com/blogs/big-data/build-a-real-time-gdpr-aligned-apache-iceberg-data-lake/)

# 在 AWS Glue Studio 中使用 Hudi 架構
<a name="gs-data-lake-formats-hudi"></a>

 建立或編輯任務時，AWS Glue Studio 會視乎您使用的版本，自動為您新增對應的 AWS Glue Hudi 程式庫。如需詳細資訊，請參閱[使用 AWS Glue 中的 Hudi 架構](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format-hudi.html)。

## 在 Data Catalog 資料來源中使用 Apache Hudi 架構
<a name="gs-data-lake-formats-hudi-source-catalog"></a>

**若要將 Hudi 資料來源格式新增至任務，請執行下列操作：**

1.  從「來源」選單中，選擇 AWS Glue Studio Data Catalog。

1.  在**資料來源屬性**索引標籤中，選擇資料庫和資料表。

1.  AWS Glue Studio 顯示格式類型為 Apache Hudi 和 Amazon S3 URL。  
![\[螢幕擷取畫面顯示 Data Catalog 來源節點的資料來源屬性索引標籤。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/data_lake_formats_data_catalog_hudi.png)

## 在 Amazon S3 資料來源中使用 Hudi 架構
<a name="gs-data-lake-formats-hudi-source-s3.title"></a>

1.  從「來源」選單中，選擇 Amazon S3。

1.  如果您選擇 Data Catalog 資料表做為 Amazon S3 來源類型，請選擇資料庫和資料表。

1.  AWS Glue Studio 顯示格式為 Apache Hudi 和 Amazon S3 URL。

1.  如果您選擇 Amazon S3 位置做為 **Amazon S3 來源類型**，請按一下**瀏覽 Amazon S3** 來選擇 Amazon S3 URL。

1.  在**資料格式**中，選取 Apache Hudi。
**注意**  
 如果 AWS Glue Studio 無法從您選取的 Amazon S3 資料夾或檔案推斷結構描述，請選擇**其他選項**，以選取新的資料夾或檔案。  
 在**其他選項**中，選擇**結構描述推論**下的下列選項：  
 讓 AWS Glue Studio 自動選擇一個範例檔案 – AWS Glue Studio 會在 Amazon S3 位置選擇一個範例檔案，以便推斷結構描述。在**自動取樣檔案**欄位中，您可以檢視自動選取的檔案。
 從 Amazon S3 中選擇一個範例檔案 – 按一下**瀏覽 Amazon S3**，選擇要使用的 Amazon S3 檔案。

1.  按一下**推斷結構描述**。然後，您可以按一下**輸出結構描述**索引標籤，來檢視輸出結構描述。

1.  選擇**其他選項**，以輸入鍵值對。  
![\[螢幕擷取畫面顯示 Amazon S3 資料來源節點的「資料來源屬性」索引標籤中的「其他選項」區段。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/data_lake_formats_additional_options.png)

## 在資料目標中使用 Apache Hudi 架構
<a name="gs-data-lake-formats-hudi-target"></a>

### 在 Data Catalog 資料目標中使用 Apache Hudi 架構
<a name="gs-data-lake-formats-hudi-target-catalog"></a>

1.  從**目標**選單中，選擇 AWS Glue Studio Data Catalog。

1.  在**資料來源屬性**索引標籤中，選擇資料庫和資料表。

1.  AWS Glue Studio 顯示格式類型為 Apache Hudi 和 Amazon S3 URL。

#### 在 Amazon S3 資料目標中使用 Apache Hudi 架構
<a name="gs-data-lake-formats-hudi-target-s3"></a>

 輸入值，或者從可用選項中選取，以設定 Apache Hudi 格式。如需有關 Apache Hudi 的詳細資訊，請參閱 [Apache Hudi 文件](https://hudi.apache.org/docs/overview)。

![\[螢幕擷取畫面顯示 Amazon S3 資料來源節點的「資料來源屬性」索引標籤中的「其他選項」區段。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/hudi_s3_target_properties.png)

+  **Hudi 資料表名稱** – 這是 hudi 資料表的名稱。
+  **Hudi 儲存類型** – 從兩個選項中選擇：
  +  **寫入時複製** – 建議用於最佳化讀取效能。這是預設的 Hudi 儲存類型。每次更新都會在寫入期間建立新版檔案。
  +  **讀取時合併** – 建議將寫入延遲降至最低。更新會記錄到以資料列為基礎的 delta 檔案，並視需要壓縮以建立新版本的直欄式檔案。
+  **Hudi 寫入操作** – 請從下列選項中選擇：
  +  **Upsert** – 這是輸入記錄首先透過查詢索引標記為插入或更新的預設操作。建議您更新現有資料的位置。
  +  **插入** – 這會插入記錄，但不檢查現有記錄，並且可能會導致重複。
  +  **大量插入** – 這會插入記錄，建議用於大量資料。
+  **Hudi 記錄關鍵字欄位** – 使用搜尋列來搜尋並選擇主要記錄索引鍵。Hudi 中的記錄由主索引鍵標識，這是記錄所屬的一對記錄索引鍵和分區路徑。
+  **Hudi 預結合欄位** – 這是在實際寫入之前預結合中使用的欄位。當兩個記錄具有相同的索引鍵值時，AWS Glue Studio 會選擇預先組合欄位中值最大的記錄。設定增量值 (例如 updated\$1at) 所屬的欄位。
+  **壓縮類型** – 從壓縮類型選項中選擇：未壓縮、GZIP、LZO 或 Snappy。
+  **Amazon S3 目標位置** – 按一下**瀏覽 S3** 來選擇 Amazon S3 目標位置。
+  **Data Catalog 更新選項** – 請從下列選項中選擇：
  +  不更新資料目錄：(預設值) 如果您不希望任務更新資料目錄 (即使結構描述變更或新增分割區)，請選擇此選項。
  +  在 Data Catalog 中建立資料表，並在後續執行時，更新結構描述並新增分區：如果選擇此選項，任務會在第一次執行任務時，在 Data Catalog 中建立資料表。在後續任務執行中，如果結構描述變更或新增分割區，任務會更新 Data Catalog 資料表。

     您還必須從 Data Catalog 中選取資料庫，然後輸入資料表名稱。
  +  在資料目錄和後續執行中建立資料表，保留現有的結構描述並新增分割區：如果選擇此選項，任務會在第一次執行任務時，在資料目錄中建立資料表。在後續的任務執行中，任務只會更新 Data Catalog 資料表以新增新的分割區。

     您還必須從 Data Catalog 中選取資料庫，然後輸入資料表名稱。
+  分割區索引鍵：選擇要在輸出中用作分割索引鍵的欄。若要新增更多分割區索引鍵，請選擇新增分割區索引鍵。
+  **其他選項** – 根據需要輸入鍵值對。

## 透過 產生程式碼 AWS Glue Studio
<a name="gs-data-lake-formats-hudi-generating-code"></a>

 儲存任務後，如果偵測到 Hudi 來源或目標，則會將下列任務參數新增至任務：
+  `--datalake-formats` – 在視覺化任務中偵測到不同的資料湖格式清單 (可直接選擇 “Format” 或間接選取由資料湖支援的目錄資料表)。
+  `--conf ` – 根據 `--datalake-formats` 的值產生。例如，如果 `--datalake-formats` 的值為 'hudi'，則 AWS Glue 會針對此參數產生 `spark.serializer=org.apache.spark.serializer.KryoSerializer —conf spark.sql.hive.convertMetastoreParquet=false` 的值。

## 覆寫 AWS Glue 提供的程式庫
<a name="gs-data-lake-formats-hudi-overriding-libraries"></a>

 若要使用 AWS Glue 不支援的 Hudi 版本，您可以指定自己的 Hudi 程式庫 JAR 檔案。若要使用您自己的 JAR 檔案：
+  請使用 `--extra-jars` 任務參數。例如 `'--extra-jars': 's3pathtojarfile.jar'`。如需詳細資訊，請參閱 [AWS Glue 任務參數](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html)。
+  請勿包括 `hudi` 作為 `--datalake-formats` 任務參數的值。輸入空白字串做為值，可確保 AWS Glue 不會自動為您提供任何資料湖程式庫。如需詳細資訊，請參閱[使用 AWS Glue 中的 Hudi 架構](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format-hudi.html)。

# 在 AWS Glue Studio 中使用 Delta Lake 架構
<a name="gs-data-lake-formats-delta"></a>

## 在資料來源中使用 Delta Lake 架構
<a name="gs-data-lake-formats-delta-source"></a>

### 在 Amazon S3 資料來源中使用 Delta Lake 架構
<a name="gs-data-lake-formats-delta-lake-s3-data-source"></a>

1.  從「來源」選單中，選擇 Amazon S3。

1.  如果您選擇 Data Catalog 資料表做為 Amazon S3 來源類型，請選擇資料庫和資料表。

1.  AWS Glue Studio 顯示格式為 Delta Lake 和 Amazon S3 URL。

1.  選擇**其他選項**，以輸入鍵值對。例如，鍵值對可能是：**索引鍵**：timestampAsOf 和**值**：2023-02-24 14:16:18。  
![\[螢幕擷取畫面顯示 Amazon S3 資料來源節點的「資料來源屬性」索引標籤中的「其他選項」區段。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/data_lake_formats_additional_options.png)

1.  如果您選擇 Amazon S3 位置做為 **Amazon S3 來源類型**，請按一下**瀏覽 Amazon S3** 來選擇 Amazon S3 URL。

1.  在**資料格式**中，選擇 Delta Lake。
**注意**  
 如果 AWS Glue Studio 無法從您選取的 Amazon S3 資料夾或檔案推斷結構描述，請選擇**其他選項**，以選取新的資料夾或檔案。  
 在**其他選項**中，選擇**結構描述推論**下的下列選項：  
 讓 AWS Glue Studio 自動選擇一個範例檔案 – AWS Glue Studio 會在 Amazon S3 位置選擇一個範例檔案，以便推斷結構描述。在**自動取樣檔案**欄位中，您可以檢視自動選取的檔案。
 從 Amazon S3 中選擇一個範例檔案 – 按一下**瀏覽 Amazon S3**，選擇要使用的 Amazon S3 檔案。

1.  按一下**推斷結構描述**。然後，您可以按一下**輸出結構描述**索引標籤，來檢視輸出結構描述。

### 在 Data Catalog 資料來源中使用 Delta Lake 架構
<a name="gs-data-lake-formats-delta-catalog"></a>

1.  從**來源**選單中，選擇 AWS Glue Studio Data Catalog。

1.  在**資料來源屬性**索引標籤中，選擇資料庫和資料表。

1.  AWS Glue Studio 顯示格式類型為 Delta Lake 和 Amazon S3 URL。
**注意**  
 如果您的 Delta Lake 來源尚未註冊為 AWS Glue Data Catalog 資料表，則會有兩個選項：  
 針對 Delta Lake 資料存放區建立 AWS Glue 爬蟲程式。如需詳細資訊，請參閱[如何為 Delta Lake 的資料儲存指定配置選項](https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-delta-lake)。
 使用 Amazon S3 資料來源，以選取您的 Delta Lake 資料來源。請參閱 [在 Amazon S3 資料來源中使用 Delta Lake 架構](#gs-data-lake-formats-delta-lake-s3-data-source)。

## 在資料目標中使用 Delta Lake 格式
<a name="gs-data-lake-formats-delta-target"></a>

### 在 Data Catalog 資料目標中使用 Delta Lake 格式
<a name="gs-data-lake-formats-delta-target-catalog"></a>

1.  從**目標**選單中，選擇 AWS Glue Studio Data Catalog。

1.  在**資料來源屬性**索引標籤中，選擇資料庫和資料表。

1.  AWS Glue Studio 顯示格式類型為 Delta Lake 和 Amazon S3 URL。

### 在 Amazon S3 資料來源中使用 Delta Lake 格式
<a name="gs-data-lake-formats-delta-target-s3"></a>

 輸入值，或者從可用選項中選取，以設定 Delta Lake 格式。
+  **壓縮類型** – 從壓縮類型選項中選擇：未壓縮或 Snappy。
+  **Amazon S3 目標位置** – 按一下**瀏覽 S3** 來選擇 Amazon S3 目標位置。
+  **Data Catalog 更新選項** – Glue Studio 視覺化編輯器中不支援更新此格式的 Data Catalog。
  +  不更新資料目錄：(預設值) 如果您不希望任務更新資料目錄 (即使結構描述變更或新增分割區)，請選擇此選項。
  +  若要在 AWS Glue 任務執行後更新 Data Catalog，請執行或排程 AWS Glue 爬蟲程式。如需詳細資訊，請參閱[如何為 Delta Lake 的資料儲存指定配置選項](https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-delta-lake)。
+  **分割區索引鍵** – 選擇要在輸出中用作分割索引鍵的欄。若要新增更多分割區索引鍵，請選擇 **Add a partition key (新增分割區索引鍵)**。
+  或者，選擇**其他選項**，以輸入鍵值對。例如，鍵值對可能是：**索引鍵**：timestampAsOf 和**值**：2023-02-24 14:16:18。

# 在 AWS Glue Studio 中使用 Apache Iceberg 架構
<a name="gs-data-lake-formats-iceberg"></a>

## 在資料目標中使用 Apache Iceberg 架構
<a name="gs-data-lake-formats-iceberg-target"></a>

### 在資料目錄資料目標中使用 Apache Iceberg 架構
<a name="gs-data-lake-formats-iceberg-target-catalog"></a>

1.  從**目標**選單中，選擇 AWS Glue Studio Data Catalog。

1.  在**資料來源屬性**索引標籤中，選擇資料庫和資料表。

1.  AWS Glue Studio 將格式類型顯示為 Apache Iceberg 和 Amazon S3 URL。

### 在 Amazon S3 資料目標中使用 Apache Iceberg 架構
<a name="gs-data-lake-formats-iceberg-s3-data-targets"></a>

 輸入值或從可用選項中選取，以設定 Apache Iceberg 格式。
+  **格式**：從下拉式選單中選擇 **Apache Iceberg**。
+  **Amazon S3 目標位置**：按一下**瀏覽 S3** 來選擇 Amazon S3 目標位置。
+  **資料目錄更新選項**：必須選取**在資料目錄中建立資料表，並在後續執行時保留現有結構描述和新增分割區**，才能繼續執行。使用 AWS Glue 撰寫新的 Iceberg 資料表時，需要將 Data Catalog 設定為 Iceberg 資料表的目錄。若要更新已在 Data Catalog 中註冊的現有 Iceberg 資料表，請選擇 Data Catalog 作為目標。
  +  **資料庫**：從 Data Catalog 中選擇資料庫。
  +  **資料表名稱**：輸入資料表名稱的值。Apache Iceberg 資料表名稱必須完全使用小寫。因為不允許使用空格，如有需要請使用底線。例如 "data\$1lake\$1format\$1tables"。

![\[螢幕擷取畫面顯示在 Amazon S3 資料目標中使用 Apache Iceberg 架構時的資料目標屬性。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/apache-iceberg-data-target-properties.png)


## 在 Amazon S3 資料來源中使用 Apache Iceberg 架構
<a name="gs-data-lake-formats-iceberg-source"></a>

### 在資料目錄資料來源中使用 Apache Iceberg 架構
<a name="gs-data-lake-formats-iceberg-source-data-catalog"></a>

1.  從**來源**選單中，選擇 AWS Glue Studio Data Catalog。

1.  在**資料來源屬性**索引標籤中，選擇資料庫和資料表。

1.  AWS Glue Studio 將格式類型顯示為 Apache Iceberg 和 Amazon S3 URL。

![\[螢幕擷取畫面顯示在資料目錄資料來源中使用 Apache Iceberg 架構時的資料目標屬性。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/apache-iceberg-data-source-properties.png)


### 在 Amazon S3 資料來源中使用 Apache Iceberg 架構
<a name="gs-data-lake-formats-iceberg-source-s3"></a>

 Apache Iceberg 無法作為 AWS Glue Studio 中 Amazon S3 來源節點的資料選項使用。

# 使用視覺化 ETL 任務來連線至資料來源
<a name="connecting-to-data-chapter"></a>

 建立新任務時，您可以在 AWS Glue 中編輯視覺化 ETL 任務時，使用連線功能來連線至資料。您可以透過新增使用連接器讀入資料的來源節點，以及用於指定資料寫出位置的目標節點來執行此操作。

**Topics**
+ [修改資料來源節點的屬性](edit-jobs-source.md)
+ [將 Data Catalog 資料表用於資料來源](edit-jobs-source-catalog-tables.md)
+ [將連接器用於資料來源](edit-jobs-source-connectors.md)
+ [將 Amazon S3 中的檔案用於資料來源](edit-jobs-source-s3-files.md)
+ [使用串流資料來源](edit-jobs-source-streaming.md)
+ [參考](edit-jobs-source-references.md)

# 修改資料來源節點的屬性
<a name="edit-jobs-source"></a>

若要指定資料來源屬性，您需先在任務圖表中選擇資料來源節點。然後，在節點詳細資訊面板的右側，設定節點屬性。

**修改資料來源節點的屬性**

1. 前往新任務或已儲存任務的視覺化編輯器。

1. 在任務圖表中選擇資料來源節點。

1. 在節點詳細資訊面板中選擇 **Node properties (節點屬性)** 索引標籤，然後輸入下列資訊：
   + **Name (名稱)**：(選用) 輸入要與任務圖表中節點產生關聯的名稱。此名稱在此任務的所有節點中應該是唯一的。
   + **Node type (節點類型)**：節點類型決定節點所執行的動作。在 **Node type (節點類型)** 的選項清單中，選擇其中一個列於 **Data source (資料來源)** 標題下的值。

1. 設定 **Data source properties (資料來源屬性)** 資訊。如需詳細資訊，請參閱下列章節：
   + [將 Data Catalog 資料表用於資料來源](edit-jobs-source-catalog-tables.md)
   + [將連接器用於資料來源](edit-jobs-source-connectors.md)
   + [將 Amazon S3 中的檔案用於資料來源](edit-jobs-source-s3-files.md)
   + [使用串流資料來源](edit-jobs-source-streaming.md)

1. (選用) 設定節點屬性和資料來源屬性之後，您可以選擇節點詳細資訊面板中的 **Output schema (輸出結構描述)** 索引標籤來檢視資料來源的結構描述。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。如果您尚未在 **Job details (任務詳細資訊)** 索引標籤上指定 IAM 角色，系統會提示您在此輸入 IAM 角色。

1. (選用) 設定節點屬性和資料來源屬性之後，您可以選擇節點詳細資訊面板中的 **Data preview (資料預覽)** 索引標籤來預覽資料來源中的資料集。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。使用此功能需支付相關費用，並且在您提供 IAM 角色後立即開始計費。

# 將 Data Catalog 資料表用於資料來源
<a name="edit-jobs-source-catalog-tables"></a>

對於除 Amazon S3 和連接器以外的所有資料來源，資料表必須存在於 AWS Glue Data Catalog，以取得您選擇的來源類型。AWS Glue 不會建立 Data Catalog 資料表。

**根據 Data Catalog 資料表設定資料來源節點**

1. 前往新任務或已儲存任務的視覺化編輯器。

1. 在任務圖表中選擇資料來源節點。

1. 選擇 **Data source properties (資料來源屬性)** 索引標籤，然後輸入下列資訊：
   + **S3 source type (S3 來源類型)**：(僅適用於 Amazon S3 資料來源) 選擇 **Select a Catalog table (選取目錄資料表)** 以使用現有 AWS Glue Data Catalog 資料表。
   + **Database (資料庫)**：在 Data Catalog 中選擇包含您要用於此任務之來源資料表的資料庫。您可以使用搜尋欄位來依名稱搜尋資料庫。
   + **Table (資料表)**：從清單中選擇與來源資料相關聯的資料表。此資料表必須已存在於 AWS Glue Data Catalog。您可以使用搜尋欄位來依名稱搜尋資料表。
   + **Partition predicate (分割區述詞)**：(僅適用於 Amazon S3 資料來源) 輸入以 Spark SQL 為基礎的布林表達式，該表達式僅包含分割欄，例如：`"(year=='2020' and month=='04')"`
   + **Temporary directory (暫時目錄)**: (僅適用於 Amazon Redshift 資料來源) 輸入 Amazon S3 中工作目錄位置的路徑，您的 ETL 任務可以在此處寫入暫時的中繼結果。
   + **Role associated with the cluster (與叢集相關聯的角色)**: (僅適用於 Amazon Redshift 資料來源) 輸入您的 ETL 任務要使用的角色，該角色包含 Amazon Redshift 叢集的許可。如需詳細資訊，請參閱[資料來源和資料目標許可](getting-started-min-privs-job.md#getting-started-min-privs-data)。

# 將連接器用於資料來源
<a name="edit-jobs-source-connectors"></a>

如果您選取 **Node type (節點類型)** 的連接器，請遵循[使用自訂連接器編寫任務](job-authoring-custom-connectors.md)中的說明以完成設定資料來源屬性。

# 將 Amazon S3 中的檔案用於資料來源
<a name="edit-jobs-source-s3-files"></a>

如果您選擇 Amazon S3 做為資料來源，則可以選擇下列其中一項：
+  Data Catalog 資料庫和資料表。
+ Amazon S3 中的儲存貯體、資料夾或檔案。

如果您使用 Amazon S3 儲存貯體作為資料來源，則 AWS Glue 會從其中一個檔案，或使用您指定為範例檔案的檔案中，偵測位於指定位置之資料的結構描述。結構描述偵測會發生在您使用 **Infer schema (推斷結構描述)** 按鈕時。如果變更 Amazon S3 位置或範例檔案，則必須選擇 **Infer schema (推斷結構描述)**，以使用新資訊執行結構描述偵測。

**設定直接從 Amazon S3 中的檔案讀取的資料來源節點**

1. 前往新任務或已儲存任務的視覺化編輯器。

1. 在任務圖表中為 Amazon S3 來源選擇資料來源節點。

1. 選擇 **Data source properties (資料來源屬性)** 索引標籤，然後輸入下列資訊：
   + **S3 source type (S3 來源類型)**：(僅適用於 Amazon S3 資料來源) 選擇 **S3 location (S3 位置)** 選項。
   + **S3 URL**：輸入包含任務資料的 Amazon S3 儲存貯體、資料夾或檔案的路徑。您可以選擇 **Browse S3 (瀏覽 S3)**，從您的帳戶可用位置選取路徑。
   + **Recursive** (遞迴)：如果您想要 AWS Glue 從 S3 位置的子資料夾中的檔案讀取資料，請選擇此選項。

     如果子資料夾包含分割的資料，AWS Glue 不會將資料夾名稱中指定的任何分割區資訊新增至 Data Catalog 。例如，請試想在 Amazon S3 中有以下資料夾：

     ```
     S3://sales/year=2019/month=Jan/day=1
     S3://sales/year=2019/month=Jan/day=2
     ```

     如果選擇 **Recursive** (遞迴)，然後選取 `sales` 資料夾作為您的 S3 位置，則 AWS Glue 會讀取所有子資料夾中的資料，但不會為年份、月份或日建立分割區。
   + **Data format (資料格式)**：選擇儲存資料的格式。您可以選擇 JSON、CSV 或 Parquet。您選取的值會告訴 AWS Glue 任務如何從來源檔案讀取資料。
**注意**  
如果您沒有為資料選取正確的格式，則 AWS Glue 可能會正確推斷結構描述，但任務將無法正確解析來源檔案中的資料。

     根據您選擇的格式，您可以輸入其他組態選項。
     + **JSON** (JavaScript 物件標記法)
       + **JsonPath**：輸入指向用來定義資料表結構描述之物件的 JSON 路徑。JSON 路徑表達式一律以將 XPath 表達式與 XML 文件搭配使用的相同方式，來參照 JSON 結構。JSON 路徑中的「根成員物件」一律稱為 `$`，即使它是物件或陣列。您可以用點標記法或括號標記法來撰寫 JSON 路徑。

         如需 JSON 路徑的詳細資訊，請參閱 GitHub 網站上的 [JsonPath](https://github.com/json-path/JsonPath)。
       + **Records in source files can span multiple lines (來源檔案中的記錄可以跨越多行)**：如果單項記錄可以跨越 CSV 檔案中的多行，請選擇此選項。
     + **CSV** (逗號分隔值)
       + **Delimiter (分隔符號)**：輸入字元來表示用什麼分隔列中的每個欄項目，例如 `;` 或 `,`。
       + **Escape character (逸出字元)**：輸入用作逸出字元的字元。此字元表示緊接在逸出字元後面的字元應該依照字面解讀，不應該被解譯為分隔符號。
       + **Quote character (引號字元)**：輸入用來將個別字串群組成單一值的字元。例如，如果在您的 CSV 檔案中有像 `"This is a single value"` 的值，您可以選擇 **Double quote (") (雙引號 ("))**。
       + **Records in source files can span multiple lines (來源檔案中的記錄可以跨越多行)**：如果單項記錄可以跨越 CSV 檔案中的多行，請選擇此選項。
       + **First line of source file contains column headers (來源檔案的第一行包含欄標題)**：如果 CSV 檔案中的第一列包含欄標頭而非資料，請選擇此選項。
     + **Parquet** (Apache Parquet 直欄式儲存)

       沒有額外的設定可以為儲存在 Parquet 格式的資料進行設定。
     + **Apache Hudi**

       對於以 Apache Hudi 格式儲存的資料，無需設定其他設定。
     + **Delta Lake**

       對於以 Delta Lake 格式儲存的資料，無需設定其他設定。
     + **Excel**

       對於以 Excel 格式儲存的資料，無需設定其他設定。
   + **Partition predicate (分割區述詞)**：若要分割從資料來源讀取的資料，請輸入以 Spark SQL 為基礎的布林表達式，其中只包含分割欄，例如：`"(year=='2020' and month=='04')"`
   + **Advanced options** (進階選項)：如果您需要 AWS Glue 根據特定檔案偵測資料的結構描述，請展開此區段。
     + **Schema inference** (結構描述推斷)：如果您想使用特定的檔案而不是讓 AWS Glue 選擇檔案，請選擇選項 **Choose a sample file from S3** (從 S3 選擇範例檔案)。結構描述推論不適用於 Excel 來源。
     + **Auto-sampled file (自動取樣檔案)**：輸入 Amazon S3 中要用於推斷結構描述的檔案路徑。

     如果您要編輯資料來源節點並變更選取的範例檔案，請選擇 **Reload schema (重新載入結構描述)** 以使用新的範例檔案來偵測結構描述。

1. 選擇 **Infer schema (推斷結構描述)** 按鈕，以從 Amazon S3 中的來源檔案偵測結構描述。如果變更 Amazon S3 位置或範例檔案，則必須再次選擇 **Infer schema (推斷結構描述)** 以使用新資訊推斷結構描述。

# 使用串流資料來源
<a name="edit-jobs-source-streaming"></a>

您可以建立串流擷取、轉換和載入 (ETL) 任務，讓它連續執行並從 Amazon Kinesis Data Streams、Apache Kafka 和 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 的串流來源使用資料。

**設定串流資料來源的屬性**

1. 前往新任務或已儲存任務的視覺化圖表編輯器。

1. 在 Kafka 或 Kinesis Data Streams 的圖形中選擇資料來源節點。

1. 選擇 **Data source properties (資料來源屬性)** 索引標籤，然後輸入下列資訊：

------
#### [ Kinesis ]
   + **Kinesis source type** (Kinesis 來源類型)：選擇選項 **Stream details** (串流詳細資訊) 以使用直接存取串流來源，或選擇 **Data Catalog table** ( Data Catalog 資料表) 以改用儲存在其中的資訊。

     如果選擇 **Stream details **(串流詳細資訊)，則指定下列其他資訊。
     + **資料串流位置**：選擇串流是否與目前的使用者相關聯，或是與不同的使用者相關聯。
     + **區域**：選擇串流所在的 AWS 區域 。此資訊用於建構存取資料串流的 ARN。
     + **Stream ARN (串流 ARN)**：輸入 Kinesis 資料串流的 Amazon Resource Name (ARN)。如果串流位於目前帳戶內，可以從下拉式清單中選擇串流名稱。您可以使用搜尋欄位來依名稱或 ARN 搜尋資料串流。
     + **Data format** (資料格式)：從清單中選擇資料串流使用的格式。

       AWS Glue 會自動從串流資料偵測結構描述。

     如果選擇 **Data Catalog table** ( Data Catalog 資料表)，指定下列其他資訊。
     + **Database** (資料庫)：(選用) 在 AWS Glue Data Catalog 中選擇資料庫，其中包含與串流資料來源相關聯的資料表。您可以使用搜尋欄位來依名稱搜尋資料庫。
     + **Table** (資料表)：(選用) 從清單中選擇與來源資料相關聯的資料表。此資料表必須已存在於 AWS Glue Data Catalog 中。您可以使用搜尋欄位來依名稱搜尋資料表。
     + **Detect schema** (偵測結構描述)：選擇此選項可讓 AWS Glue 偵測來自串流資料的結構描述，而不是使用 Data Catalog 資料表中的結構描述資訊。如果您選擇 **Stream details** (串流詳細資訊) 選項，則自動啟用此選項。
   + **Starting position** (開始位置)：依預設，ETL 任務會使用 **Earliest** (最早) 選項，這表示它會從串流中最早期的可用記錄開始讀取資料。您可以改為選擇 **Latest** (最新)，這表示 ETL 任務應該從串流中的最新記錄之後開始讀取。
   + **Window size (時段大小)**：依預設 ETL 任務以 100 秒的時段處理和寫出資料。這樣可以有效處理資料，並且可在資料到達時間比預期晚時執行彙總。您可以修改此間隔大小，以提高適時性或彙總正確性。

     AWS Glue 串流任務使用檢查點而非任務書籤來追蹤已讀取的資料。
   + **Connection options** (連線選項)：展開此區段以新增索引鍵-值配對，以指定其他連線選項。如需您可以在此指定哪些選項的相關資訊，請參閱《*AWS Glue 開發人員指南*》中的 ["connectionType": "kinesis"](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect.html#aws-glue-programming-etl-connect-kinesis)。

------
#### [ Kafka ]
   + **Apache Kafka source** (Apache Kafka 來源)：選擇選項 **Stream details** (串流詳細資訊) 以使用直接存取串流來源，或選擇 **Data Catalog table** ( Data Catalog 資料表) 來改用儲存在其中的資訊。

     如果選擇 **Data Catalog table** ( Data Catalog 資料表)，指定下列其他資訊。
     + **Database** (資料庫)：(選用) 在 AWS Glue Data Catalog 中選擇資料庫，其中包含與串流資料來源相關聯的資料表。您可以使用搜尋欄位來依名稱搜尋資料庫。
     + **Table** (資料表)：(選用) 從清單中選擇與來源資料相關聯的資料表。此資料表必須已存在於 AWS Glue Data Catalog 中。您可以使用搜尋欄位來依名稱搜尋資料表。
     + **Detect schema** (偵測結構描述)：選擇此選項可讓 AWS Glue 偵測來自串流資料的結構描述，而不是使用 Data Catalog 資料表中的結構描述資訊。如果您選擇 **Stream details** (串流詳細資訊) 選項，則自動啟用此選項。

     如果選擇 **Stream details **(串流詳細資訊)，則指定下列其他資訊。
     + **連線名稱** (Connection name)：選擇包含 Kafka 資料串流的存取和身分驗證資訊的 AWS Glue 連線。您必須將此連線與 Kafka 串流資料來源搭配使用。如果連線不存在，您可以使用 AWS Glue 主控台為您的 Kafka 資料串流建立連線。
     + **Topic name** (主題名稱)：輸入要讀取的主題名稱。
     + **Data format** (資料格式)：選擇從 Kafka 事件資料流讀取資料時使用的格式。
   + **Starting position** (開始位置)：預設情況下，ETL 任務會使用 **Earliest** (最早) 選項，這表示它會從串流中最早期的可用記錄開始讀取資料。您可以改為選擇 **Latest** (最新)，這表示 ETL 任務應該從串流中的最新記錄之後開始讀取。
   + **Window size (時段大小)**：依預設 ETL 任務以 100 秒的時段處理和寫出資料。這樣可以有效處理資料，並且可在資料到達時間比預期晚時執行彙總。您可以修改此間隔大小，以提高適時性或彙總正確性。

     AWS Glue 串流任務使用檢查點而不是任務書籤來追蹤已讀取的資料。
   + **Connection options** (連線選項)：展開此區段以新增索引鍵-值配對，以指定其他連線選項。如需您可以在此指定哪些選項的相關資訊，請參閱《*AWS Glue 開發人員指南*》中的 ["connectionType": "kinesis"](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect.html#aws-glue-programming-etl-connect-kafka)。

------

**注意**  
資料預覽目前不支援串流資料來源。

# 參考
<a name="edit-jobs-source-references"></a>

 **最佳實務** 
+  [ 建置 ETL 服務管道，使用 從 Amazon S3 遞增載入資料至 Amazon RedshiftAWS Glue](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/build-an-etl-service-pipeline-to-load-data-incrementally-from-amazon-s3-to-amazon-redshift-using-aws-glue.html) 

 **ETL 程式設計** 
+  [AWS Glue 中 ETL 的連線類型和選項](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-connections.html) 
+  [JDBC connectionType 值](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect.html#aws-glue-programming-etl-connect-jdbc) 
+  [ 用於將資料移入和移出的進階選項 Amazon Redshift](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-redshift.html) 

# 設定資料目標節點
<a name="data-target-nodes"></a>

資料目標是任務寫入轉換後資料的位置。

## 資料目標選項概觀
<a name="edit-jobs-target-overview"></a>

您的資料目標 (也稱為*資料接收*) 可以是：
+ **S3** — 任務會以您選擇的 Amazon S3 位置和您指定的格式將資料寫入檔案中。

  如果您為資料目標設定分割區欄，則任務會根據分割區索引鍵將資料集寫入 Amazon S3 的目錄中。
+ **AWS Glue Data Catalog** - 任務會使用與 Data Catalog 中資料表相關聯的資訊，將輸出資料寫入目標位置。

  您可以手動建立資料表，或使用爬蟲程式建立資料表。您也可以使用 AWS CloudFormation 範本，在 Data Catalog 中建立資料表。
+ 連接器 - 連接器是一段程式碼，可促進資料存放區和 AWS Glue 之間的通訊。任務會使用連接器和關聯的連線，將輸出資料寫入目標位置。您可以訂閱 中提供的連接器 AWS Marketplace，也可以建立自己的自訂連接器。如需詳細資訊，請參閱[新增連接器至 AWS Glue Studio](creating-custom-connectors.md#creating-connectors)

您可以選擇在任務寫入 Amazon S3 資料目標時更新 Data Catalog 。在結構描述或分割區變更時，無須爬蟲程式更新 Data Catalog ，此選項可讓您輕鬆保持資料表在最新狀態。此選項可簡化讓資料可供分析的程序，方法是選擇性地將新資料表新增至 Data Catalog 、更新資料表分割區，以及直接從任務更新資料表結構描述。

## 編輯資料目標節點
<a name="edit-jobs-target"></a>

資料目標是任務寫入轉換後資料的位置。

**在任務圖表中新增或設定資料目標節點**

1. (選用) 如果您需要新增目標節點，請選擇視覺化編輯器頂端工具列中的 **Target** (目標)，然後選擇 **S3** 或 **Glue Data Catalog** (Glue 資料目錄)。
   + 如果選擇 **S3**，則任務會將資料集寫入您指定的 Amazon S3 位置中的一個或多個檔案。
   + 如果選擇 **AWS Glue Data Catalog**，則任務會寫入至由從 Data Catalog 選取的資料表所描述的位置。

1. 選擇任務圖表中的資料目標節點。當您選擇節點時，節點詳細資訊面板會出現在頁面右側。

1. 選擇 **Node properties (節點屬性)** 索引標籤，然後輸入下列資訊：
   + **Name (名稱)**：輸入要與任務圖表中節點產生關聯的名稱。
   + **Node type (節點類型)**：應該已經選取值，但您可以視需要變更它。
   + **Node parents (節點父項)**：父節點是任務圖表中的節點，提供您要寫入目標位置的輸出資料。對於預先填入的任務圖表，目標節點應該已經選取父節點。如果沒有顯示父節點，請從清單中選擇父節點。

     目標節點有單一的父節點。

1. 設定 **Data target properties (資料目標屬性)** 資訊。如需詳細資訊，請參閱下列章節：
   + [將 Amazon S3 用於資料目標](#edit-job-target-S3)
   + [使用 Data Catalog 資料表做為資料目標](#edit-job-target-catalog)
   + [將連接器用於資料目標](#edit-job-target-connector)

1. (選用) 設定資料目標節點屬性之後，您可以在節點詳細資訊面板中選擇 **Output schema (輸出結構描述)** 索引標籤來檢視資料的輸出結構描述。當您第一次針對任務中的任何節點選擇此索引標籤時，系統會提示您提供 IAM 角色以存取資料。如果您尚未在 **Job details (任務詳細資訊)** 索引標籤上指定 IAM 角色，系統會提示您在此輸入 IAM 角色。

### 將 Amazon S3 用於資料目標
<a name="edit-job-target-S3"></a>

對於除 Amazon S3 和連接器以外的所有資料來源，資料表必須存在於 AWS Glue Data Catalog，以取得您選擇的來源類型。AWS Glue Studio 不會建立 Data Catalog 資料表。

**設定寫入 Amazon S3 的資料目標節點**

1. 前往新任務或已儲存任務的視覺化編輯器。

1. 在任務圖表中選擇資料來源節點。

1. 選擇 **Data source properties (資料來源屬性)** 索引標籤，然後輸入下列資訊：
   + **Format (格式)**：從清單中選擇格式。資料結果的可用格式類型為：
     + **JSON**：JavaScript 物件標記法。
     + **CSV**：逗號分隔值。
     + **Avro**：Apache Avro JSON 二進位。
     + **Parquet**：已針對 `DynamicFrames` 作為資料格式而最佳化的自訂 Phquet 寫入器類型。它不需要預先計算的資料結構描述，而是動態地運算並修改結構描述。
     + **ORC**：Apache 最佳化資料列單欄式 (ORC) 格式。
     + **Apache Hudi**：開放原始碼資料湖儲存架構，可簡化增量資料處理與資料管道開發。
     + **Apache Iceberg**：高效能的資料表格式，其運作方式就像 SQL 資料表一樣。
     + **Delta Lake**：開放原始碼資料湖儲存架構，可協助您執行 ACID 交易、擴充中繼資料處理，以及統一串流與批次資料處理。
     + **XML**：可擴展標記語言 (XML)。
     + **Tableau Hyper**：Tableau 的記憶體內資料引擎技術。

     若要進一步了解這些格式選項，請參閱 *AWS Glue 開發人員指南*中的[在 AWS Glue 中的 ​ETL 輸入與輸出格式選項](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format.html)。
   + **壓縮類型**：您可以選擇使用 `CSV`、`JSON` 或 `Parquet` 檔案類型壓縮資料。預設為沒有壓縮，或 **None (無)**。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/data-target-nodes.html)
   + **S3 Target Location (S3 目標位置)**：資料輸出的 Amazon S3 儲存貯體和位置。您可以選擇 **Browse S3 (瀏覽 S3)** 按鈕以查看您有權存取的 Amazon S3 儲存貯體，並選擇其中一個作為目標目的地。
   + ** Data Catalog 更新選項**
     + **Do not update the Data Catalog (不更新 Data Catalog )**：(預設值) 如果您不希望任務更新 Data Catalog (即使結構描述變更或新增分割區)，請選擇此選項。
     + **Create a table in the Data Catalog and on subsequent runs, update the schema and add new partitions (在 Data Catalog 中建立資料表，並在後續執行時，更新結構描述並新增分割區)**：如果選擇此選項，任務會在第一次執行任務時，在 Data Catalog 中建立資料表。在後續任務執行中，如果結構描述變更或新增分割區，任務會更新 Data Catalog 資料表。

       您還必須從 Data Catalog 中選取資料庫，然後輸入資料表名稱。
     + **Create a table in the Data Catalog and on subsequent runs, keep existing schema and add new partitions (在 Data Catalog 和後續執行中建立資料表，保留現有的結構描述並新增分割區)**：如果選擇此選項，任務會在第一次執行任務時，在 Data Catalog 中建立資料表。在後續的任務執行中，任務只會更新 Data Catalog 資料表以新增新的分割區。

       您還必須從 Data Catalog 中選取資料庫，然後輸入資料表名稱。
   + **檔案分區**：選擇要儲存輸出的分區類型。
     + **自動產生檔案 (建議)**：這是所產生檔案數目的預設值。
     + **多個檔案輸出**：指定您想要的檔案輸出數目。為了獲得最佳效能，請使用預設自動產生的檔案數目值。
   + **Partition keys (分割區索引鍵)**：選擇要在輸出中用作分割索引鍵的欄。若要新增更多分割區索引鍵，請選擇 **Add a partition key (新增分割區索引鍵)**。

   Tableau Hyper 不支援檔案分區作為目標格式。

### 使用 Data Catalog 資料表做為資料目標
<a name="edit-job-target-catalog"></a>

對於除 Amazon S3 和連接器以外的所有資料來源，資料表必須存在於 AWS Glue Data Catalog，以取得您選擇的目標類型。AWS Glue Studio 不會建立 Data Catalog 資料表。

**為使用 Data Catalog 資料表的目標設定資料屬性**

1. 前往新任務或已儲存任務的視覺化編輯器。

1. 選擇任務圖表中的資料目標節點。

1. 選擇 **Data target properties (資料目標屬性)** 索引標籤，然後輸入下列資訊：
   + **Database (資料庫)**：從清單中選擇包含要用作目標之資料表的資料庫。此資料庫必須存在於 Data Catalog 中。
   + **Table (資料表)**：從清單中選擇定義輸出資料之結構描述的資料表。此資料表必須已存在於 Data Catalog 中。

      Data Catalog 中的資料表包含欄名稱、資料類型定義、分割區資訊，以及目標資料集的其他中繼資料。您的任務會寫入至此 Data Catalog 中所述的位置。

     如需在 Data Catalog 中建立資料表的詳細資訊，請參閱 *AWS Glue 開發人員指南*中的[在 Data Catalog 中定義資料表](https://docs.aws.amazon.com/glue/latest/dg/tables-described.html)。
   + ** Data Catalog 更新選項**
     + **Do not change table definition (不變更資料表定義)**：(預設值) 如果您不希望任務更新 Data Catalog (即使結構描述變更或新增分割區)，請選擇此選項。
     + **Update schema and add new partitions (更新結構描述並新增分割區)**：如果您選擇此選項，則如果結構描述變更或新增了新的分割區，任務就會更新 Data Catalog 資料表。
     + **Keep existing schema and add new partitions (保留現有的結構描述並新增分割區)**：如果您選擇此選項，任務只會更新 Data Catalog 資料表以新增新的分割區。
     + **Partition keys (分割區索引鍵)**：選擇要在輸出中用作分割索引鍵的欄。若要新增更多分割區索引鍵，請選擇 **Add a partition key (新增分割區索引鍵)**。

### 將連接器用於資料目標
<a name="edit-job-target-connector"></a>

如果您選取 **Node type (節點類型)** 的連接器，請遵循[使用自訂連接器編寫任務](job-authoring-custom-connectors.md)中的說明以完成設定資料目標屬性。

# 編輯或上傳任務指令碼
<a name="edit-nodes-script"></a>

使用 AWS Glue Studio 視覺化編輯器來編輯任務指令碼或上傳自己的指令碼。

只有當任務是使用 AWS Glue Studio 建立時，您才可以使用視覺化編輯器來編輯任務節點。如果任務是使用 AWS Glue 主控台、透過 API 命令或命令列介面 (CLI) 建立的，則您可以使用 AWS Glue Studio 中的指令碼編輯器來編輯任務指令碼、參數和排程。您也可以透過將任務轉換為僅限指令碼模式，編輯在 AWS Glue Studio 中建立之任務的指令碼。

**編輯任務指令碼或上傳您自己的指令碼**

1. 如果建立新任務，請在 **Jobs (任務)** 頁面上，選擇 **Spark script editor (Spark 指令碼編輯器)** 選項來建立 Spark 任務或選擇 **Python Shell script editor (Python Shell 指令碼編輯器)** 來建立 Python Shell 任務。您可以撰寫新指令碼，也可以上傳現有指令碼。如果選擇 **Spark script editor (Spark 指令碼編輯器)**，您可以編寫或上傳 Scala 或 Python 指令碼。如果選擇 **Python Shell script editor (Python Shell 指令碼編輯器)**，您只能編寫或上傳 Python 指令碼。

   選擇建立新任務的選項後，在出現的 **Options (選項)** 區段中，您可以選擇以入門指令碼開始 (**Create a new script with boilerplate code (使用樣板程式碼建立新指令碼)**)，或者您可以上傳本機檔案以作為任務指令碼使用。

   如果您選擇 **Spark script editor (Spark 指令碼編輯器)**，您可以上傳 Python 或 Scala 指令碼檔案。Scala 指令碼的副檔名必須為 `.scala`。Python 指令碼必須被識別為 Python 類型的檔案。如果您選擇 **Python Shell script editor (Python Shell 指令碼編輯器)**，您只能上傳 Python 指令碼檔案。

   完成選擇後，請選擇 **Create (建立)** 以建立任務並開啟視覺化編輯器。

1. 前往新任務或儲存任務的視覺化任務編輯器，然後選擇 **Script (指令碼)** 索引標籤。

1. 如果您沒有使用其中一個指令碼編輯器選項建立新任務，而且您從未編輯現有任務的指令碼，**Script (指令碼)** 索引標籤會顯示標題 **Script (Locked) (指令碼 (已鎖定))**。這表示指令碼編輯器處於唯讀模式。請選擇 **Edit script (編輯指令碼)** 解除鎖定指令碼以進行編輯。

   為了讓指令碼變成可編輯的，AWS Glue Studio 會將您的任務從視覺化任務轉換為僅限指令碼任務。如果您將指令碼解除鎖定以進行編輯，儲存之後就無法再使用視覺化編輯器來執行此任務。

   在確認視窗中，選擇 **Confirm (確認)** 繼續，或 **Cancel (取消)** 以保持任務可供視覺編輯。

   如果選擇 **Confirm (確認)**，**Visual (視覺效果)** 索引標籤不會再出現在編輯器中。您可以使用 AWS Glue Studio 以使用指令碼編輯器來修改指令碼、修改任務詳細資訊或排程，或查看任務執行。
**注意**  
在您儲存任務之前，轉換為僅限指令碼任務並不是永久性的。如果您重新整理主控台網頁，或在儲存任務之前先關閉任務，然後在視覺化編輯器中重新開啟任務，您仍然可以在視覺化編輯器中編輯個別節點。

1. 視需要編輯指令碼。

   當您完成編輯指令碼時，選擇 **Save (儲存)** 儲存任務，並將任務從視覺效果永久轉換為僅限指令碼。

1. (選用) 您可以選擇 **Script** (指令碼) 索引標籤上的 **Download** (下載) 按鈕，從 AWS Glue Studio 主控台下載指令碼。當您選擇此按鈕時，會開啟新的瀏覽器視窗，顯示其在 Amazon S3 中位置的指令碼。任務的 **Job details (任務詳細資訊)** 索引標籤中的 **Script filename (指令碼檔案名稱)** 和 **Script path (指令碼路徑)** 參數會決定指令碼檔案在 Amazon S3 中的名稱和位置。  
![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/job-details-script-location-params-screenshot.png)

   當您儲存任務時，AWS Glue 會將任務指令碼儲存在這些欄位指定的位置。如果在 Amazon S3 中修改此位置的指令碼檔案，則您下次編輯任務時，AWS Glue Studio 會載入修改後的指令碼。

## 在 AWS Glue Studio 中建立和編輯 Scala 指令碼
<a name="edit-job-scala-script"></a>

當您選擇指令碼編輯器來建立任務時，依預設，任務程式設計語言被設定為 `Python 3`。如果您選擇編寫新的指令碼而不是上傳指令碼，則 AWS Glue Studio 會啟動一個新的指令碼，其中包含以 Python 編寫的樣板文字。如果您想改為編寫 Scala 指令碼，您必須先將指令碼編輯器設定為使用 Scala。

**注意**  
如果您選擇 Scala 作為任務的程式設計語言，並使用視覺化編輯器來設計任務，則產生的任務指令碼將用 Scala 編寫，並且不需要進一步的操作。

**在 AWS Glue Studio 中編寫新的 Scala 指令碼**

1. 建立新任務，方法是選擇 **Spark script editor (Spark 指令碼編輯器)** 選項。

1. 在 **Options (選項)** 下方，選擇 **Create a new script with boilerplate code (使用樣板程式碼建立新指令碼)**。

1. 選擇 **Job details (任務詳細資訊)** 索引標籤並設定 **Language (語言)** 為 `Scala` (而不是 `Python 3`)。
**注意**  
當您選擇 **Spark script editor (Spark 指令碼編輯器)** 選項建立任務，任務的 **Type (類型)** 屬性會自動設定為 `Spark`。

1. 選擇 **Script (指令碼)** 索引標籤。

1. 移除 Python 樣板文字。您可以用以下 Scala 樣板文字替換它。

   ```
   import com.amazonaws.services.glue.{DynamicRecord, GlueContext}
   import org.apache.spark.SparkContext
   import com.amazonaws.services.glue.util.JsonOptions
   import com.amazonaws.services.glue.util.GlueArgParser
   import com.amazonaws.services.glue.util.Job
   
   object MyScript {
     def main(args: Array[String]): Unit = {
       val sc: SparkContext = new SparkContext()
       val glueContext: GlueContext = new GlueContext(sc)
   
       }
   }
   ```

1. 在編輯器中編寫您的 Scala 任務指令碼。視需要新增其他 `import` 陳述式。

## 在 AWS Glue Studio 中建立和編輯 Python Shell 任務
<a name="edit-job-python-shell"></a>

當您選擇 Python shell 指令碼編輯器來建立任務時，您可以上傳現有的 Python 指令碼，或者編寫新的指令碼。如果您選擇編寫新的指令碼，樣板程式碼將新增到新的 Python 任務指令碼中。

**建立新的 Python Shell 任務**  
請參閱[在 AWS Glue Studio 中啟動任務](edit-nodes-chapter.md#create-jobs-start)中的指示。

Python Shell 任務支援的任務屬性與 Spark 任務支援的任務屬性不相同。下列清單說明 **Job details** (任務詳細資訊) 索引標籤上 Python Shell 任務的可用任務參數的變更。
+ 任務的 **Type (類型)** 屬性會自動設定為 `Python Shell`，且無法變更。
+ 會有一個任務的 **Python version (Python 版本)** 屬性，而不是 **Language (語言)**。目前，在 AWS Glue Studio 中建立的 Python Shell 任務使用 Python 3.6。
+ **Glue version (Glue 版本)** 屬性無法使用，因為它不適用於 Python Shell 任務。
+ 會改為顯示 **Data processing units (資料處理單元)** 屬性，取代 **Worker type (工作者類型)** 和 **Number of workers (工作者數目)**。此任務屬性決定執行任務時，Python Shell 會使用多少資料處理單元 (DPU)。
+ **Job bookmark (任務書籤)** 屬性無法使用，因為它不支援 Python Shell 任務。
+ 在 **Advanced properties (進階屬性)** 下，下列屬性不適用於 Python Shell 任務。
  + **任務指標**
  + **連續記錄**
  + **Spark UI** 和 **Spark UI logs path (Spark UI 日誌路徑)**
  + **Dependent jars path (相依的 jar 路徑)**，在 **Libraries (程式庫)** 標題下

# 變更任務圖表中節點的父節點
<a name="edit-job-change-parents"></a>

您可以變更節點的父項，以移動任務圖表中的節點或變更節點的資料來源。

**變更父節點**

1. 在任務圖表中選擇您要修改的節點。

1. 在節點詳細資訊面板中，在 **Node properties (節點屬性)** 索引標籤的 **Node parents (節點父項)** 標題下移除節點的目前父項。

1. 從清單中選擇一個新的父節點。

1. 視需要修改節點的其他屬性，以符合新選取的父節點。

如果您不小心修改了節點，您可以使用 **Undo (復原)** 按鈕來反轉動作。

# 從任務圖表中刪除節點
<a name="edit-job-delete-node"></a>

 使用視覺化的 ETL 任務時，您可以從畫布中移除節點，而不必重新新增或重組連接到已移除節點的任何節點。

 在下面的範例中，您可以選擇 **ETL 任務 > 視覺化的 ETL**，然後在**範例任務**中選擇**視覺化的 ETL 任務以加入多個來源**。選擇**建立範例任務**以建立任務，並遵循下面的步驟。

![\[螢幕擷取畫面顯示具有視覺化的 ETL 任務的「範例任務」面板，以加入選取的多個來源範例任務。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/visual-etl-example-jobs-create.png)


**從畫布中移除節點**

1.  從 AWS Glue 主控台，從導覽功能表中選擇**視覺化 ETL**，然後選擇現有任務。任務畫布會顯示範例任務，如下所示。  
![\[螢幕擷取畫面顯示從「範例任務」產生的任務圖表。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/visual-job-example-job-nodes.png)

1.  選擇您要移除的節點。畫布將放大至節點。在畫布右側的工具列中，選擇**垃圾桶**圖示。這會移除節點，且連接到該節點的任何節點都會移動，以取代其在工作流程中的位置。在此範例中，已從畫布中刪除第一個**聯結**節點。

    如果您刪除工作流程中的節點， AWS Glue 會重新排列節點，使其以不會導致無效工作流程的方式組織。您可能仍然需要更正節點的組態。

    在此範例中，已移除**訂閱用戶**節點下的**聯結**節點。因此，**計畫**來源節點已移至頂層，但仍連接至子**聯結**節點。**聯結**節點現在需要額外的組態，因為**聯結**需要兩個具有所選資料表的父來源節點。畫布右側的**轉換**索引標籤會在**聯結條件 **下顯示遺失需求。  
![\[螢幕擷取畫面顯示任務圖表，其中父節點是兩個來源節點：計畫指派和訂閱用戶。其連接至「聯結」節點。「計畫來源」節點和「聯結」節點連接至「變更結構描述」節點。「目錄」節點連接至「變更結構描述」節點。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/visual-job-delete-node-join-plans.png)

1.  刪除第二個**聯結**節點和**選取欄位**節點。刪除節點後，工作流程將如下面的範例所示。  
![\[螢幕擷取畫面顯示任務圖表，其中「聯結」節點和「選取欄位」已移除，而與其連接的節點、「變更結構描述」節點已上移以取代其在任務流程中的位置。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/visual-job-three-data-sources-rearranged.png)

1.  若要修改節點連線，請按一下節點的處理常式，並將連線拖曳至新的節點。這樣可以允許您刪除節點，並重新安排邏輯流程中的節點。在此範例中，進行新的連線，方式是按一下「計畫」節點上的處理常式，並將連線拖曳至「聯結」節點，如紅色箭頭所示。  
![\[螢幕擷取畫面顯示任務圖表，其中處理常式以紅色圓圈括住，而紅色箭頭正在聯結「計畫」節點和「聯結」節點，以示範按一下並拖曳來將節點連接在一起的動作。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/visual-job-plans-node-handle-selected.png)

1.  如果您需要復原任何動作，請在畫布右側的工具列中選擇**垃圾桶**圖示正下方的**復原**圖示。

# 將來源和目標參數新增至 AWS Glue 資料目錄節點
<a name="edit-job-add-job-parameters"></a>

 AWS Glue Studio 可讓您將視覺化任務參數化。生產環境和開發環境中的目錄資料表名稱可能不同，因此您可以為任務執行時要執行的資料庫和資料表定義及選取執行時間參數。

 任務參數化可讓您將來源和目標參數化，並在使用 AWS Glue 資料目錄節點時，將這些參數儲存至任務。將來源和目標指定為參數，等同於任務可以重複使用，尤其可在多個環境中使用相同的任務。如要節省管理來源和目標所需的時間和心力，在不同部署環境中廣泛使用程式碼，會是相當實用的作法。此外，您指定的自訂參數將覆寫 AWS Glue 任務特定執行的任何預設引數。

 **新增來源和目標參數** 

 無論您是使用 AWS Glue 資料目錄節點作為來源或目標，您都可以在 **Job details** (任務詳細資訊) 索引標籤的 **Advanced properties** (進階屬性) 區段定義執行時間參數。

1.  選擇 AWS Glue 資料目錄節點作為來源節點或目標節點。

1.  選擇 **Job details** (任務詳細資訊) 索引標籤。

1.  選擇 **Advanced properties** (進階屬性)。

1.  在「Job parameters」(任務參數) 區段中，輸入索引鍵值，例如資料庫來源的參數可以是 `--db.source`。您可以為索引鍵輸入任何名稱，只要索引鍵名稱後面加上兩個英文破折號即可。  
![\[螢幕擷取畫面顯示的是「Job details」(任務詳細資訊) 索引標籤的任務參數區段。您可以為資料庫和資料表定義要在執行時間使用的參數。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/Data_Catalog_node_job_details_job_parameters.png)

1.  輸入值，例如資料庫參數化的值可以是 `databasename`。

1.  如果您要新增更多參數，請選擇 **Add new parameter** (新增參數)。最多可新增 50 個參數。定義索引鍵值組之後，您就可以在 AWS Glue 資料目錄節點使用參數。

 **選取執行時間參數** 

**注意**  
 無論 AWS Glue 資料目錄節點是來源或目標，為資料庫和資料表選取執行時間參數的程序並無二致。

1.  選擇 AWS Glue 資料目錄節點作為來源節點或目標節點。

1.  在 **Data source properties - Data Catalog** (資料來源屬性 - 資料目錄) 索引標籤的 **Database** (資料庫) 底下，選擇 **Use runtime parameters** (使用執行時間參數)。  
![\[螢幕擷取畫面顯示的是執行時間參數的下拉式選單。您可以為資料庫和資料表選取要在執行時間使用的任何已定義參數。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/Data_Catalog_node_select_runtime_parameters.png)

1.  從下拉式選單中選擇參數。例如，如果您選取您為來源資料庫定義的參數，當您選擇 **Apply** (套用) 後，資料庫會自動填入資料庫下拉式選單。

1.  在「Table」(資料表) 區段中，選擇您已定義為來源資料表的參數。一旦您選擇 **Apply** (套用)，資料表就會自動填入，作為您要使用的資料表。

1.  當您儲存並執行任務，AWS Glue Studio 就會在任務執行期間參照您選取的參數。

# 在 AWS Glue 中使用 Git 版本控制系統
<a name="edit-job-add-source-control-integration"></a>

**注意**  
 筆記本目前不支援 AWS Glue Studio 中的版本控制。然而，可支援 AWS Glue 任務指令碼和視覺化 ETL 任務的版本控制。

 如果您有遠端儲存庫，並想要使用儲存庫管理您的AWS Glue任務，您可以使用 AWS Glue Studio或 AWS CLI 來同步 中儲存庫和任務的變更AWS Glue。以這種方式同步變更，等於是將任務從 AWS Glue Studio 推送到您的儲存庫，或從儲存庫提取到 AWS Glue Studio。

 在 AWS Glue Studio 中完成 Git 整合後，您可以：
+  與 Git 版本控制系統整合，例如 AWS CodeCommit GitHub、GitLab 和 Bitbucket 
+  無論您是使用視覺化任務或指令碼任務，都能在 AWS Glue Studio 中編輯 AWS Glue 任務，並將任務同步到儲存庫 
+  將任務中的來源和目標參數化 
+  從儲存庫提取任務，並在 AWS Glue Studio 中編輯 
+  利用 AWS Glue Studio 的多分支工作流程，從分支提取任務及/或將任務推送到分支，藉以測試任務 
+  從儲存庫下載檔案並將任務上傳至 AWS Glue Studio，以便建立跨帳戶任務 
+  使用您選擇的自動化工具 （例如 Jenkins AWS CodeDeploy等） 

此影片示範如何將 AWS Glue 與 Git 整合，並建置持續且協作的程式碼管道。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/XRlZq2kvE4U/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/XRlZq2kvE4U)


## IAM 許可
<a name="git-integration-permissions"></a>

 確保任務具有下列其中一個 IAM 許可。如需有關設定 IAM 許可的詳細資訊，請參閱[設定 AWS Glue Studio 的 IAM 許可](https://docs.aws.amazon.com/glue/latest/ug/setting-up.html?icmpid=docs_glue_studio_helppanel#getting-started-iam-permissions)。
+ `AWSGlueServiceRole`
+ `AWSGlueConsoleFullAccess`

 整合 Git 至少需要執行下列動作：
+  `glue:UpdateJobFromSourceControl` — 以便能使用版本控制系統中的任務更新 AWS Glue 
+  `glue:UpdateSourceControlFromJob` — 以便能使用儲存於 AWS Glue 的任務更新版本控制系統 
+  `s3:GetObject` — 以便能擷取任務的指令碼，同時將指令碼推送至版本控制系統 
+  `s3:PutObject` — 以便能在從來源控制系統提取任務時更新指令碼 

## 先決條件
<a name="edit-job-push-source-repository-prerequisites"></a>

 為了將任務推送至來源控制儲存庫，您將需要：
+  已由您管理員建立的儲存庫 
+  儲存庫中的分支 
+  個人存取權杖 (如果是 Bitbucket，此為儲存庫存取權杖) 
+  儲存庫擁有者的使用者名稱 
+  在儲存庫中設定許可，以允許 AWS Glue Studio 讀取和寫入儲存庫 
  +  **GitLab** – 將字符範圍設定為 api、read\$1repository 和 write\$1repository 
  +  **Bitbucket** – 將許可設定為：
    + **工作區成員資格** – 讀取、寫入
    + **專案** – 寫入、管理員讀取
    + **儲存庫** – 讀取、寫入、管理員、刪除

**注意**  
 使用 時 AWS CodeCommit，不需要個人存取字符和儲存庫擁有者。請參閱 [Getting started with Git and AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/getting-started.html)。

 **使用來自 AWS Glue Studio 中的來源控制儲存庫的任務** 

 為了從來源控制儲存庫提取不在 AWS Glue Studio 中的任務，並在 AWS Glue Studio 使用該任務，不同任務類型會有不同的先決條件。

 **對於視覺化任務：**
+  您需要一個資料夾和任務定義 (需與任務名稱相符) 的 JSON 檔案 

   如需範例，請參閱下方的任務定義。儲存庫中的分支應包含路徑 `my-visual-job/my-visual-job.json`，其中資料夾和 JSON 檔案都需與任務名稱相符 

  ```
  {
    "name" : "my-visual-job",
    "description" : "",
    "role" : "arn:aws:iam::aws_account_id:role/Rolename",
    "command" : {
      "name" : "glueetl",
      "scriptLocation" : "s3://foldername/scripts/my-visual-job.py",
      "pythonVersion" : "3"
    },
    "codeGenConfigurationNodes" : "{\"node-nodeID\":{\"S3CsvSource\":{\"AdditionalOptions\":{\"EnableSamplePath\":false,\"SamplePath\":\"s3://notebook-test-input/netflix_titles.csv\"},\"Escaper\":\"\",\"Exclusions\":[],\"Name\":\"Amazon S3\",\"OptimizePerformance\":false,\"OutputSchemas\":[{\"Columns\":[{\"Name\":\"show_id\",\"Type\":\"string\"},{\"Name\":\"type\",\"Type\":\"string\"},{\"Name\":\"title\",\"Type\":\"choice\"},{\"Name\":\"director\",\"Type\":\"string\"},{\"Name\":\"cast\",\"Type\":\"string\"},{\"Name\":\"country\",\"Type\":\"string\"},{\"Name\":\"date_added\",\"Type\":\"string\"},{\"Name\":\"release_year\",\"Type\":\"bigint\"},{\"Name\":\"rating\",\"Type\":\"string\"},{\"Name\":\"duration\",\"Type\":\"string\"},{\"Name\":\"listed_in\",\"Type\":\"string\"},{\"Name\":\"description\",\"Type\":\"string\"}]}],\"Paths\":[\"s3://dalamgir-notebook-test-input/netflix_titles.csv\"],\"QuoteChar\":\"quote\",\"Recurse\":true,\"Separator\":\"comma\",\"WithHeader\":true}}}"
  }
  ```

 **對於指令碼任務：**
+  您需要一個資料夾、內含任務定義的 JSON 檔案和指令碼 
+  資料夾和 JSON 檔案應與任務名稱相符。指令碼名稱必須與任務定義中的 `scriptLocation` 及檔案附檔名相符 

   例如在下方的任務定義中，儲存庫中的分支應包含路徑 `my-script-job/my-script-job.json` 和 `my-script-job/my-script-job.py`。指令碼名稱應與 `scriptLocation` 中的名稱相符，包括指令碼的附檔名 

  ```
  {
    "name" : "my-script-job",
    "description" : "",
    "role" : "arn:aws:iam::aws_account_id:role/Rolename",
    "command" : {
      "name" : "glueetl",
      "scriptLocation" : "s3://foldername/scripts/my-script-job.py",
      "pythonVersion" : "3"
    }
  }
  ```

## 限制
<a name="edit-job-repository-limitations"></a>
+  AWS Glue 目前不支援從 [GitLab-Groups](https://docs.gitlab.com/ee/user/group) 推送/提取。

## 將版本控制儲存庫與 AWS Glue 連線
<a name="edit-job-connecting-repositories"></a>

 您可以輸入您的版本控制儲存庫詳細資訊，並在 AWS Glue Studio 任務編輯器的 **Version Control** (版本控制) 索引標籤中管理。若要與您的 Git 儲存庫整合，則必須在每次登入 AWS Glue Studio 時連線至您的儲存庫。

 連接 Git 版本控制系統：

1.  在 AWS Glue Studio 中，開始新任務並選擇 **Version Control** (版本控制) 索引標籤。  
![\[如螢幕擷取畫面所顯示，任務的「Version Control」(版本控制) 索引標籤已選取。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/editing-nodes-version-control-tab.png)

1.  在**版本控制系統**中按一下下拉式選單，從可用選項中選擇 Git 服務。
   +  AWS CodeCommit 
   +  GitHub 
   + GitLab
   + Bitbucket

1.  根據您選擇的 Git 版本控制系統，您會需要完成不同的欄位。

   

    **對於 AWS CodeCommit**：

    選取任務的儲存庫和分支，完成儲存庫組態：
   +  **儲存庫** - 如果您已在其中設定儲存庫 AWS CodeCommit，請從下拉式功能表中選取儲存庫。您的儲存庫會自動填入清單中 
   +  **分支** – 從下拉式選單中選取分支 
   +  **資料夾** – *選用* – 輸入要儲存任務的資料夾名稱。如果留空，系統會為您自動建立資料夾。資料夾名稱會預設為任務名稱 

   

    **如果是 GitHub**：

    完成以下欄位，完成 GitHub 組態：
   +  **Personal access token** (個人存取字符) — 這是指 GitHub 儲存庫提供的字符。如需個人存取字符的詳細資訊，請參閱 [GitHub 文件](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) 
   +  **Repository owner** (儲存庫擁有者) — 這是指 GitHub 儲存庫的擁有者。

    選取 GitHub 的儲存庫和分支，完成儲存庫組態。
   +  **Repository** (儲存庫) — 如果您已在 GitHub 設定儲存庫，請從下拉式選單中選取該儲存庫。您的儲存庫會自動填入清單中 
   +  **分支** – 從下拉式選單中選取分支 
   +  **資料夾** – *選用* – 輸入要儲存任務的資料夾名稱。如果留空，系統會為您自動建立資料夾。資料夾名稱會預設為任務名稱 

   

    **對於 GitLab**：
**注意**  
 AWS Glue 目前不支援從 [GitLab-Groups](https://docs.gitlab.com/ee/user/group) 推送/提取。
   +  **個人存取權杖** – 這是 GitLab 儲存庫提供的權杖。如需有關個人存取權杖的詳細資訊，請參閱 [GitLab Personal access tokens](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html) 
   +  **儲存庫擁有者** – 這是 GitLab 儲存庫的擁有者。

    選取 GitLab 的儲存庫和分支，完成儲存庫組態。
   +  **儲存庫** – 如果您已在 GitLab 設定儲存庫，請從下拉式選單中選取該儲存庫。您的儲存庫會自動填入清單中 
   +  **分支** – 從下拉式選單中選取分支 
   +  **資料夾** – *選用* – 輸入要儲存任務的資料夾名稱。如果留空，系統會為您自動建立資料夾。資料夾名稱會預設為任務名稱 

    **對於 Bitbucket**：
   +  **應用程式密碼** – Bitbucket 使用應用程式密碼，而不是儲存庫存取字符。如需應用程式密碼的詳細資訊，請參閱[應用程式密碼](https://support.atlassian.com/bitbucket-cloud/docs/app-passwords/)。
   +  **儲存庫擁有者** – 這是 Bitbucket 儲存庫的擁有者。在 Bitbucket 中，擁有者是儲存庫的建立者。

    選取 Bitbucket 的工作空間、儲存庫、分支和資料夾，完成儲存庫組態。
   +  **工作空間** – 如果您在 Bitbucket 中設定工作空間，請從下拉式選單中選取該工作空間。系統會自動填入您的工作空間 
   +  **儲存庫** – 如果您在 Bitbucket 中設定儲存庫，請從下拉式選單中選取該儲存庫。系統會自動填入您的儲存庫 
   +  **分支** – 從下拉式選單中選取分支。系統會自動填入您的分支 
   +  **資料夾** – *選用* – 輸入要儲存任務的資料夾名稱。如果留空，系統會使用任務名稱為您自動建立資料夾。

1.  在 AWS Glue Studio 任務的頂端選擇 **Save** (儲存) 

## 將 AWS Glue 任務推送到來源儲存庫
<a name="edit-job-push-source-repository"></a>

 輸入版本控制系統的詳細資訊後，您就可以在 AWS Glue Studio 編輯任務，並將任務推送到您的來源儲存庫。如果您對 Git 概念 (例如推送和提取) 不甚熟悉，請參閱[開始使用 Git 和 AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/getting-started.html) 教學。

 如要將任務推送到儲存庫，您需要輸入版本控制系統的詳細資訊並儲存任務。

1.  在 AWS Glue Studio 任務中，選擇 **Actions** (動作)。其他選單選項會隨即開啟。  
![\[如螢幕擷取畫面所顯示，任務的「Actions」(動作) 選單已開啟。畫面上會顯示「Push to repository」(推送到儲存庫) 選項。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/editing-nodes-actions-push-to-repository.png)

1.  選擇 **Push to repository** (推送到儲存庫)。

    此動作會儲存任務。將任務推送到儲存庫時，AWS Glue Studio 會推送最近一次儲存的變更。如果儲存庫中的任務已由您或其他使用者修改，而且與 AWS Glue Studio 中的任務不同步，儲存庫中的任務就會由您從 AWS Glue Studio 推送且儲存於 AWS Glue Studio 的任務覆寫。

1.  選擇 **Confirm** (確認) 以完成動作。系統會隨即在儲存庫中建立新的遞交。如果您使用的是 AWS CodeCommit，確認訊息會顯示最新遞交的連結 AWS CodeCommit。

## 從來源儲存庫提取 AWS Glue 任務
<a name="edit-job-pull-source-repository"></a>

 只要您在 **Version control** (版本控制) 索引標籤中輸入 Git 儲存庫的詳細資訊，您也可以從儲存庫提取任務，並在 AWS Glue Studio 中編輯。

1.  在 AWS Glue Studio 任務中，選擇 **Actions** (動作)。其他選單選項會隨即開啟。  
![\[如螢幕擷取畫面所顯示，任務的「Actions」(動作) 選單已開啟。畫面上會顯示「Push to repository」(推送到儲存庫) 選項。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/editing-nodes-actions-push-to-repository.png)

1.  選擇 **Pull from repository** (從儲存庫提取)。

1.  選擇 **Confirm** (確認)。如要這麼做，您必須先從儲存庫取得最新的遞交，並在 AWS Glue Studio 中更新任務。

1.  在 AWS Glue Studio 中編輯任務。完成變更後，您可以從 **Actions** (動作) 選單中選擇 **Push to repository** (推送到儲存庫)，將任務同步至儲存庫。

# 使用 AWS Glue Studio 筆記本編寫程式碼
<a name="notebooks-chapter"></a>

 使用 AWS Glue Studio 中的互動式筆記本介面或 AWS Glue 中的互動式工作階段，資料工程師可以比之前更快、更輕鬆地撰寫 AWS Glue 任務。

## 限制
<a name="notebooks-chapter-limitations"></a>
+  AWS Glue Studio 筆記本不支援 Scala。

**Topics**
+ [限制](#notebooks-chapter-limitations)
+ [使用筆記本概觀](using-notebooks-overview.md)
+ [使用 AWS Glue Studio 中的筆記本建立 ETL 任務](create-notebook-job.md)
+ [筆記本編輯器元件](notebook-components.md)
+ [儲存您的筆記本和任務指令碼](save-notebook.md)
+ [管理筆記本工作階段](manage-notebook-sessions.md)
+ [將 Amazon Q Developer 與 AWS Glue Studio 筆記本搭配使用](glue-studio-notebooks-amazon-q-developer.md)

# 使用筆記本概觀
<a name="using-notebooks-overview"></a>

 AWS Glue Studio 允許您在基於 Jupyter 筆記本的筆記本介面中以互動方式編寫任務。透過 AWS Glue Studio 中的筆記本，您可以編輯任務指令碼和檢視輸出，而無需執行完整任務；可以編輯資料整合程式碼和檢視輸出，而無需執行完整任務；還可以新增 Markdown 並將筆記本儲存為 .ipynb 檔案和任務指令碼。您可以直接啟動筆記型，而無需在本機安裝軟體或管理伺服器。對程式碼感到滿意之後，只要按一下按鈕，AWS Glue Studio 就可將您的筆記本轉換為 Glue 任務。

 使用筆記本的若干優點包括：
+  無需佈建或管理叢集 
+  沒有閒置叢集要支付費用 
+  無需預先設定 
+  無需安裝 Jupyter 筆記本 
+  與 AWS Glue ETL 相同的執行時間/平台 

 透過 AWS Glue Studio 啟動筆記本，所有的設定步驟都會自動完成，以便您在幾秒鐘之後探索資料並開始開發任務指令碼。AWS Glue Studio 設定帶有 AWS Glue Jupyter 核心的 Jupyter 筆記本。您不需要設定 VPC、網路連線或開發端點，即可使用此筆記本。

 若要使用筆記本介面建立任務：
+  設定必要的 IAM 許可。
+  啟動筆記本工作階段以建立任務 
+  在筆記本的儲存格中編寫程式碼 
+  執行並測試程式碼以檢視輸出 
+  儲存任務 

 儲存您的筆記本之後，此筆記本就是完整的 AWS Glue 任務。您可以管理任務的所有方面，例如排程任務執行、設定任務參數，以及直接在筆記本旁檢視任務執行歷史記錄。

# 使用 AWS Glue Studio 中的筆記本建立 ETL 任務
<a name="create-notebook-job"></a>

**開始在 AWS Glue Studio 主控台中使用筆記本**

1.  將 AWS Identity and Access Management 政策連接至AWS Glue Studio使用者，並為 ETL 任務和筆記本建立 IAM 角色。

1.  按 [授予 IAM 角色的許可](notebook-getting-started.md#studio-notebook-permissions) 中所述，為筆記本設定其他 IAM 安全性。

1.  開啟位於 [https://console.aws.amazon.com/gluestudio/](https://console.aws.amazon.com/gluestudio/) 的 AWS Glue Studio 主控台。
**注意**  
檢查您的瀏覽器是否未封鎖第三方 Cookie。任何因預設或使用者啟用設定而封鎖第三方 Cookie 的瀏覽器，將使筆記本無法啟動。如需管理 Cookie 的詳細資訊，請參閱：
   + [Chrome](https://support.alertlogic.com/hc/en-us/articles/360018127132-Turn-Off-Block-Third-Party-Cookies-in-Chrome-for-Windows)
   + [Firefox](https://support.mozilla.org/en-US/kb/third-party-cookies-firefox-tracking-protection)
   + [Safari](https://support.apple.com/guide/safari/manage-cookies-sfri11471/mac)

1. 選擇左側導覽選單中的 **Jobs** (任務) 連結。

1.  選擇 **Jupyter 筆記本**，然後選擇 **Create** (建立) 開始新的筆記本工作階段。

1.  在 **Create job in Jupyter notebook** (在 Jupyter 筆記本中建立任務) 頁面上，提供任務名稱並選擇要使用的 IAM 角色。選擇**建立任務**。

    短時間後，會出現筆記本編輯器。

1.  新增程式碼後，必須執行儲存格以啟動工作階段。可透過多種方式執行儲存格：
   + 按下執行按鈕。
   +  使用鍵盤快速鍵：
     +  在 MacOS 上，使用 **Command** \$1 **Enter** 來執行儲存格。
     +  在 Windows 上，使用 **Shift** \$1 **Enter** 來執行儲存格。

    如需使用 Jupyter 筆記本介面撰寫程式碼的相關資訊，請參閱 *[Jupyter 筆記本使用者文件](https://jupyter-notebook.readthedocs.io/en/stable/notebook.html)*。

1.  若要測試指令碼，請執行整個指令碼或個別儲存格。任何命令輸出將顯示在儲存格下方的區域中。

1.  在您完成開發筆記本之後，您可以儲存任務，然後執行任務。您可以在 **Script** (指令碼) 索引標籤中找到指令碼。您新增至筆記本的任何魔術命令都會遭到去除，且不會儲存為已產生之 AWS Glue 任務指令碼的一部分。AWS Glue Studio 會將 `job.commit()` 自動新增至已從筆記本內容產生之指令碼的末尾。

   如需有關執行任務的詳細資訊，請參閱 [開始任務執行](managing-jobs-chapter.md#start-jobs)。

   

# 筆記本編輯器元件
<a name="notebook-components"></a>

 筆記本編輯器介面包含下列主要區段。
+  筆記本介面 (主面板) 與工具列 
+  任務編輯索引標籤 

## 筆記本編輯器
<a name="notebook-editor"></a>

 AWS Glue Studio 筆記本編輯器是基於 Jupyter 筆記本應用程式。AWS Glue Studio 筆記本介面與 Juypter Notebook 所提供的介面類似，請參閱[筆記本使用者介面](https://jupyter-notebook.readthedocs.io/en/stable/notebook.html?highlight=toolbar#notebook-user-interface)。互動式工作階段使用的筆記本是 Jupyter 筆記本。

 雖然 AWS Glue Studio 筆記本與 Juptyer Notebook 類似，但它在幾個關鍵方面有所不同：
+  目前 AWS Glue Studio 筆記本無法安裝擴充 
+  無法使用多個索引標籤；任務與筆記本之間存在 1:1 的關係 
+  AWS Glue Studio 筆記本沒有 Jupyter 筆記本中存在的相同頂部檔案選單 
+  AWS Glue Studio 筆記本目前僅能使用 AWS Glue 核心執行。請注意，您無法自行更新核心。

## AWS Glue Studio 任務編輯索引標籤
<a name="notebook-job-tabs"></a>

 用來與 ETL 任務互動的索引標籤位於筆記本頁面的頂端。它們類似於顯示在 AWS Glue Studio 的視覺化任務編輯器中的索引標籤，並且執行相同的動作。
+  **Notebook** (筆記本) – 使用此索引標籤檢視使用筆記本介面的任務指令碼。
+  **Job details** (任務詳細資訊) – 設定任務執行的環境和屬性。
+  **Runs** (執行) – 檢視此任務先前執行的相關資訊。
+  **Schedules** (排程) – 設定在特定時間執行任務的排程。

# 儲存您的筆記本和任務指令碼
<a name="save-notebook"></a>

 您可以隨時儲存您的筆記本和正在建立的任務指令碼。只要選擇右上角的 **Save** (儲存) 按鈕，就像使用視覺化編輯器或指令碼編輯器一樣。

 選擇 **Save** (儲存) 後，筆記本檔案將儲存在預設位置：
+  依預設，任務指令碼會儲存至 **Job Details** (任務詳細資訊) 索引標籤 **Advanced properties** (進階屬性) 下的任務詳細資訊屬性 **Script path** (指令碼路徑) 中指示的 Amazon S3 位置。任務指令碼會儲存在名為 `Scripts` 的子資料夾內。
+  依預設，筆記本檔案 (`.ipynb`) 會儲存至 **Job Details** (任務詳細資訊) 索引標籤 **Advanced properties** (進階屬性) 下的任務詳細資訊 **Script path** (指令碼路徑) 中指示的 Amazon S3 位置。筆記本檔案會儲存在名為 `Notebooks` 的子資料夾內。

**注意**  
 當您儲存任務時，任務指令碼僅包含來自筆記本的程式碼儲存格。任務指令碼中不包括 Markdown 儲存格和魔術命令。但是，`.ipynb` 檔案將包含任何 Markdown 和魔術命令。

 儲存任務之後，您就可以使用在筆記本中建立的指令碼來執行任務。

# 管理筆記本工作階段
<a name="manage-notebook-sessions"></a>

 AWS Glue Studio 中的筆記本以 AWS Glue 的互動式工作階段功能為基礎。使用互動式工作階段需要支付費用。為了協助管理成本，您可以監控為帳戶建立的工作階段，並設定所有工作階段的預設值。

## 變更所有筆記本工作階段的預設逾時
<a name="change-default-timeout"></a>

 依預設，如果筆記本已啟動並且沒有執行任何儲存格，佈建的 AWS Glue Studio 筆記本會在 12 小時後逾時。不存在相關成本，且無法設定逾時。

 一旦您執行儲存格，這便會啟動互動式工作階段。此工作階段的預設逾時時間為 48 小時。此逾時可以透過在執行儲存格之前傳遞 `%idle_timeout` 魔術命令來設定。

**若要修改 AWS Glue Studio 中筆記本的預設工作階段逾時**

1.  在筆記本中，於儲存格中輸入 `%idle_timeout` 魔術命令，並以分鐘為單位指定逾時值。

1.  例如：`%idle_timeout 15` 會將預設逾時變更為 15 分鐘。如果 15 分鐘內未使用工作階段，則工作階段會自動停止。

## 安裝其他 Python 模組
<a name="specify-default-modules"></a>

 如果您想使用 pip 將其他模組安裝到工作階段中，則可以使用 `%additional_python_modules` 將其新增至您的工作階段中：

```
%additional_python_modules awswrangler, s3://amzn-s3-demo-bucket/mymodule.whl
```

 additional\$1python\$1modules 的所有引數都傳遞給 `pip3 install -m <>` 

 如需可用 Python 模組的清單，請參閱 [Using Python libraries with AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-libraries.html)。

## 變更 AWS Glue 組態
<a name="specify-default-modules"></a>

 您可以使用魔術命令來控制 AWS Glue 任務組態值。如果您要變更任務組態值，則必須在筆記本中使用適當的魔術命令。請參閱 [Magics supported by AWS Glue interactive sessions for Jupyter](https://docs.aws.amazon.com/glue/latest/dg/interactive-sessions-magics.html)。

**注意**  
 無法再覆寫執行中工作階段的屬性。若要變更工作階段的組態，您可以停止工作階段、設定新的組態，然後啟動新的工作階段。

 AWS Glue 支援各種工作者類型。您可以使用 `%worker_type` 設定工作者類型。例如：`%worker_type G.2X `。可用的工作者類型包括 G.1X、G.2X、G.4X、G.8X、G.12X、G.16X、R.1X、R.2X、R.4X 和 R.8X。預設值是 G.1X。

 您還可以使用 `%number_of_workers` 指定工作者數量。例如，若要指定 40 個工作者：`%number_of_workers 40`。

 如需詳細資訊，請參閱[定義任務屬性](https://docs.aws.amazon.com/glue/latest/dg/add-job.html)。

## 停止筆記本工作階段
<a name="stop-notebook-session"></a>

 若要停止筆記本工作階段，請使用魔術命令 `%stop_session`。

 如果您在 AWS 主控台中離開筆記本，您會收到警告訊息，您可以選擇停止工作階段。

# 將 Amazon Q Developer 與 AWS Glue Studio 筆記本搭配使用
<a name="glue-studio-notebooks-amazon-q-developer"></a>

 AWS Glue Studio 允許您在基於 Jupyter 筆記本的筆記本介面中以互動方式編寫任務。使用 Amazon Q Developer 可改善 AWS Glue Studio 筆記本內的撰寫體驗。

 Amazon Q Developer 延伸模組可產生程式碼建議，建議與程式碼問題相關的改進，從而支援撰寫程式碼。Amazon Q Developer 同時支援 Python 和 Scala，這兩種語言可用來針對 AWS Glue Studio 筆記本中的 Spark 任務編寫 ETL 指令碼。

## 什麼是 Amazon Q Developer？
<a name="w2aac33c15c36b9"></a>

 Amazon Q Developer 是一項採用機器學習技術的服務，可協助提升開發人員的生產力。Amazon Q Developer 可根據開發人員使用自然語言的註解及其在 IDE 中的程式碼產生程式碼建議，進而協助提升開發人員的生產力。此服務與 JupyterLab、 Amazon SageMaker AI Studio、 Amazon SageMaker AI 筆記本執行個體和其他整合開發環境 (IDEs整合。

 如需詳細資訊，請參閱[將 Amazon Q Developer 與 AWS Glue Studio 搭配使用](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/glue-setup.html)。

# 主控台中的 AWS Glue 任務執行狀態
<a name="view-job-runs"></a>

您可在 AWS Glue 擷取、轉換和載入 (ETL) 任務執行中或停止之後，檢視其狀態。您可以使用 AWS Glue 主控台檢視狀態。

## 存取任務監控儀表板
<a name="monitoring-accessing-dashboard"></a>

若要存取任務監控儀表板，請選擇 **ETL 任務**下 AWS Glue 導覽窗格中的**任務執行監控**連結。

## 任務監控儀表板的概觀
<a name="monitoring-dashboard-overview"></a>

任務監控儀表板提供任務執行的整體摘要，其中狀態為**執行中**、**已取消**、**成功**或**失敗**。其他圖標可提供整體任務執行成功率、任務的預估 DPU 使用量、依任務類型、工作者類型及日期劃分的任務狀態計數細目。

圖標中的圖形是互動式。您可以選擇圖形中的任何區塊來執行篩選，該篩選僅顯示頁面底部**任務執行**資料表中的那些任務。

您可以變更此頁面上所顯示資訊的日期範圍，方法是使用**日期範圍**選取器。當您變更日期範圍時，資訊圖標會調整以顯示目前日期之前指定天數的值。如果您從日期範圍選取器選擇**自訂**，則也可以使用特定日期範圍。

## 任務執行檢視
<a name="monitoring-job-breakdown"></a>

**注意**  
 您可以存取工作流程和任務執行的 90 天任務執行歷史記錄。

**任務執行**資源清單會顯示指定日期範圍和篩選的任務。

您可以根據其他準則篩選任務，例如狀態、工作者類型、任務類型和任務名稱。在資料表頂端的篩選方塊中，您可以輸入要用作篩選的文字。當您輸入文字時，資料表結果會以包含相符文字的列進行更新。

您可以從任務監控儀表板上的圖形中選擇元素，來檢視任務的子集。例如，如果您在**任務執行摘要**圖標中選擇執行中的任務數目，接著**任務執行**清單僅會顯示目前狀態為 `Running` 的任務。如果您選擇列在**工作者類型明細**長條圖中的其中一項，則只有具有相符工作者類型和狀態的任務執行會顯示在**任務執行**清單中。

**任務執行**資源清單會顯示任務執行的詳細資訊。您可以選擇資料欄標題來排序資料表中的資料列。此資料表包含以下資訊：


| 屬性 | Description | 
| --- | --- | 
| 任務名稱 |  任務的名稱。 | 
| Type |  任務環境的類型： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/view-job-runs.html)  | 
| 開始時間 |  此次任務執行開始的日期和時間。  | 
| 結束時間 |  此次任務執行完成的日期和時間。  | 
| 執行狀態 |  任務執行目前的狀態。值可以為： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/view-job-runs.html)  | 
| 執行時間 | 任務執行消耗資源所需的時間量。 | 
| Capacity |  配置給此任務執行的 AWS Glue 資料處理單位 (DPU) 數目。如需容量規劃的詳細資訊，請參閱 *AWS Glue 開發人員指南*中的 [DPU 容量規劃監控](https://docs.aws.amazon.com/glue/latest/dg/monitor-debug-capacity.html)。  | 
| 工作者類型 |  在任務執行時配置的預先定義工作者類型。值可以為 `G.1X`、`G.2X`、`G.4X` 或 `G.8X`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/view-job-runs.html)  | 
| DPU 時數 |  任務執行的預估 DPU 數目。DPU 是處理能力的相對測量。DPU 用來判斷執行任務的費用。如需詳細資訊，請參閱 [AWS Glue 定價](https://aws.amazon.com/glue/pricing/)頁面。  | 

您可以選取清單中的任何任務執行，並檢視其他資訊。選擇任務執行，然後進行下列任一項目：
+ 選擇**動作**選單以及**檢視任務**選項，以在視覺化編輯器中檢視任務。
+ 選擇**動作**選單以及**停止執行**選項，停止任務的目前執行。
+ 選擇**檢視 CloudWatch Logs** 按鈕以檢視該任務的任務執行日誌。
+ 選擇**檢視詳細資料**以檢視任務執行詳細資料頁面。

## 檢視任務執行日誌
<a name="monitoring-job-run-logs"></a>

您可以用多種方式來檢視任務日誌：
+ 在**監控**頁面的**任務執行**資料表中，選擇任務執行，然後選擇**檢視 CloudWatch Logs**。
+ 在視覺化任務編輯器中，在**執行**索引標籤中，選擇要檢視日誌的超連結：
  + **日誌** – 啟用任務執行的連續記錄時，所寫入 Apache Spark 任務日誌的連結。當您選擇此連結時，它會帶您前往 Amazon CloudWatch 日誌群組中的`/aws-glue/jobs/logs-v2`日誌。預設情況下，日誌會排除無用的 Apache Hadoop YARN 活動訊號和 Apache Spark 驅動程式或執行器日誌訊息。如需持續記錄的詳細資訊，請參閱 *AWS Glue 開發人員指南*中的[持續記錄 AWS Glue 任務](https://docs.aws.amazon.com/glue/latest/dg/monitor-continuous-logging.html)。
  + **錯誤日誌** – 連結至此次任務執行時寫入 `stderr` 的日誌。當您選擇此連結時，它會帶您前往 `/aws-glue/jobs/error` 日誌群組中的 Amazon CloudWatch 日誌。您可以使用這些日誌來檢視任務執行期間所發生任何錯誤的詳細資訊。
  + **輸出日誌** – 連結至此次任務執行時所寫入 `stdout` 的日誌。當您選擇此連結時，它會帶您前往 `/aws-glue/jobs/output` 日誌群組中的 Amazon CloudWatch 日誌。您可以使用這些日誌來查看在 AWS Glue Data Catalog 中建立的資料表的所有詳細資訊，以及所發生的任何錯誤。

## 檢視任務執行的詳細資訊
<a name="monitoring-job-run-details"></a>

您可以在**監控**頁面的**任務執行**清單選擇任務，然後選擇**檢視執行詳細資訊**以查看該任務執行的詳細資訊。

任務執行詳細資訊頁面上顯示的資訊包括：


| 屬性 | Description | 
| --- | --- | 
| 任務名稱 |  任務的名稱。 | 
| 執行狀態 |  任務執行目前的狀態。值可以為： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/view-job-runs.html)  | 
| Glue 版本 | 任務執行所使用的 AWS Glue 版本。 | 
| 最近嘗試 | 此任務執行的自動重試嘗試次數。 | 
| 開始時間 |  此次任務執行開始的日期和時間。  | 
| 結束時間 |  此次任務執行完成的日期和時間。  | 
| 開始時間 |  準備執行任務所花的時間。  | 
| 執行時間 |  執行任務指令碼所花的時間。  | 
| 觸發條件名稱 |  與任務相關聯的觸發名稱。  | 
| 上次修改時間 |  上次修改任務的日期。  | 
| 安全組態 |  任務的安全組態，包括 Amazon S3 加密、CloudWatch 加密和任務書籤加密設定。  | 
| Timeout (逾時) | 任務執行逾時閾值。 | 
| 已配置容量 |  配置給此任務執行的 AWS Glue 資料處理單位 (DPU) 數目。如需容量規劃的詳細資訊，請參閱 *AWS Glue 開發人員指南*中的 [DPU 容量規劃監控](https://docs.aws.amazon.com/glue/latest/dg/monitor-debug-capacity.html)。  | 
| 最大容量 |  任務執行的可用容量上限。  | 
| 工作者數目 | 用於任務執行的工作者數量。 | 
| 工作者類型 |  配置給任務執行的預先定義工作者類型。值可以為 `G.1X` 或 `G.2X`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/view-job-runs.html)  | 
| 日誌 | 連續記錄之任務日誌的連結 (/aws-glue/jobs/logs-v2)。 | 
| 輸出日誌 | 任務輸出日誌檔案的連結 (/aws-glue/jobs/output)。 | 
| 錯誤日誌 | 任務錯誤日誌檔案的連結 (/aws-glue/jobs/error)。 | 

也可以檢視下列其他項目，可在檢視最近工作執行的資訊時使用它們。如需詳細資訊，請參閱[檢視最近任務執行的資訊](managing-jobs-chapter.md#view-job-run-details)。
+ **輸入引數**
+ **連續日誌**
+ **指標**：您可以查看基本指標的視覺效果。如需有關包含之指標的詳細資訊，請參閱 [檢視 Spark 任務執行的 Amazon CloudWatch 指標](#monitoring-job-run-metrics)。
+ **Spark UI** – 您可以在 Spark UI 中將工作的 Spark 日誌視覺化。如需有關使用 Spark Web UI 的詳細資訊，請參閱 [使用 Apache Spark web UI 監控任務](monitor-spark-ui.md)。必須依照 [為 AWS Glue 任務啟用 Apache Spark web UI](monitor-spark-ui-jobs.md) 中的程序來啟用此功能。

## 檢視 Spark 任務執行的 Amazon CloudWatch 指標
<a name="monitoring-job-run-metrics"></a>

在任務執行的詳細資訊頁面上，您可以在**執行詳細資訊**區段下方檢視任務指標。 Amazon CloudWatch 會針對每個任務執行AWS Glue Studio傳送任務指標至 。

AWS Glue Amazon CloudWatch 每 30 秒向 報告指標。 AWS Glue 指標表示先前回報數值中的差異值。適當時，指標儀表板將會彙總 (加總) 30 秒的值，以取得最後完整一分鐘的值。不過， AWS Glue 傳遞至 的 Apache Spark 指標 Amazon CloudWatch 通常是絕對值，代表報告時的目前狀態。

**注意**  
您必須將 帳戶設定為存取 Amazon CloudWatch。

指標提供任務執行的相關資訊，例如：
+ **ETL 資料移動** – 讀取或寫入 Amazon S3 的位元組數。
+ **記憶體設定檔：使用的堆積** – Java 虛擬機器 (JVM) 堆積所使用的記憶體位元組數目。
+ **記憶體設定檔：堆積使用率** – JVM 堆積使用的記憶體分數 (比例：0–1)，以百分比顯示。
+ **CPU 負載** – 使用的 CPU 系統負載分數 (比例：0–1)，以百分比顯示。

## 檢視 Ray 任務執行的 Amazon CloudWatch 指標
<a name="monitoring-job-run-metrics-ray"></a>

在任務執行的詳細資訊頁面上，您可以在**執行詳細資訊**區段下方檢視任務指標。 Amazon CloudWatch 會針對每個任務執行AWS Glue Studio傳送任務指標至 。

AWS Glue Amazon CloudWatch 每 30 秒向 報告指標。 AWS Glue 指標表示先前回報數值中的差異值。適當時，指標儀表板將會彙總 (加總) 30 秒的值，以取得最後完整一分鐘的值。不過， AWS Glue 傳遞至 的 Apache Spark 指標 Amazon CloudWatch 通常是絕對值，代表報告時的目前狀態。

**注意**  
您必須將 帳戶設定為存取 Amazon CloudWatch，如 中所述。

在 Ray 任務中，您可以檢視下列彙總指標圖表。您可以使用這些資料建立叢集和任務的設定檔，並可存取有關每個節點的詳細資訊。支援這些圖表的時間序列資料可在 CloudWatch 中取得以供進一步分析。

**任務設定檔：任務狀態**  
顯示系統中的 Ray 任務數量。每個任務生命週期都有自己的時間序列。

**任務設定檔：任務名稱**  
顯示系統中的 Ray 任務數量。只會顯示擱置中和作用中的任務。每種類型的任務 (依名稱) 都有自己的時間序列。

**叢集設定檔：使用中的 CPU**  
顯示使用的 CPU 核心數量。每個節點都有自己的時間序列。節點由 IP 地址識別，這些 IP 地址是暫時的，僅用於識別。

**叢集設定檔：物件存放區記憶體使用量**  
顯示 Ray 物件快取的記憶體使用量。每個記憶體位置 (實體記憶體、磁碟上的快取，以及 Amazon S3 中的溢出) 都有自己的時間序列。物件存放區管理叢集中所有節點的資料儲存。如需詳細資訊，請參閱 Ray 文件中的[物件](https://docs.ray.io/en/latest/ray-core/objects.html)。

**叢集設定檔：節點計數**  
顯示為叢集佈建的節點數量。

**節點詳細資訊：CPU 使用量**  
以百分比顯示每個節點的 CPU 使用率。每個系列都會顯示節點上所有核心的 CPU 使用率彙總百分比。

**節點詳細資訊：記憶體使用量**  
顯示每個節點的記憶體使用量 (GB)。每個系列都會顯示節點上所有程序之間的彙總記憶體，包括 Ray 任務和 Plasma 存放程序。這不會反映存放到磁碟或溢出到 Amazon S3 的物件。

**節點詳細資訊：磁碟使用量**  
顯示每個節點上的磁碟使用量 (GB)。

**節點詳細資訊：磁碟 I/O 速度**  
顯示每個節點上的磁碟 I/O (KB/s)。

**節點詳細資訊：網路 I/O 輸送量**  
顯示每個節點上的網路 I/O (KB/s)。

**節點詳細資訊：Ray 元件的 CPU 使用量**  
以核心分數的方式顯示 CPU 使用量。每個節點上的每個 Ray 元件都有自己的時間序列。

**節點詳細資訊：Ray 元件的記憶體使用量**  
顯示記憶體使用量 (GiB)。每個節點上的每個 Ray 元件都有自己的時間序列。

# 偵測和處理敏感資料
<a name="detect-PII"></a>

 Detect PII 轉換可識別資料來源中的個人身分識別資訊 (PII)。您可以選擇要識別的 PII 實體、掃描資料的方式，以及如何處理由 Detect PII 轉換識別的 PII 實體。

 Detect PII 轉換提供偵測、遮罩或移除實體的功能，這些實體為您定義或由 AWS預先定義的實體。這樣，您就能夠提高合規性並減少責任。例如，您可能希望確保資料中不存在可被讀取的個人識別資訊，並希望遮蓋使用固定字串 (例如 xxx-xx-xxxx) 的社會安全號碼、電話號碼或地址。

 若要處理 AWS Glue Studio 以外的敏感資料，請參閱 [在 AWS Glue Studio 外部使用敏感資料偵測](aws-glue-api-sensitive-data-example.md) 

**Topics**
+ [選擇掃描資料的方式](#choose-datascan-pii)
+ [選擇要偵測的 PII 實體](#choose-pii-entities)
+ [指定偵測敏感度等級](#sensitive-data-sensitivity)
+ [選擇如何處理已識別的 PII 資料](#choose-action-pii)
+ [新增微調動作覆寫](#sensitive-data-fine-grained-actions-override)

## 選擇掃描資料的方式
<a name="choose-datascan-pii"></a>

 當您掃描資料集尋找敏感資料 (例如，個人身分識別資訊 (PII)) 時，可以選擇偵測每個資料列中的 PII，或偵測包含 PII 資料的資料欄。

![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/detect-fields-PII.png)


 當您選擇 **Detect PII in each cell** (偵測每個儲存格中的 PII) 時，就表示掃描資料來源中的所有資料列。這是一項完整的掃描，可確保識別 PII 實體。

 當您選擇 **Detect fields containing PII** (偵測包含 PII 的欄位) 時，則表示掃描資料列範例以取得 PII 實體。這是一種降低成本和資源的方法，同時可識別找到 PII 實體的欄位。

 當您選擇偵測包含 PII 的欄位時，可以透過取樣部分資料列降低成本並改善效能。選擇此選項可讓您指定其他選項：
+  **Sample portion** (取樣部分)：這可讓您指定要取樣的列百分比。例如，如果您輸入 '50'，則表示您要為 PII 實體指定 50% 的掃描列。
+  **Detection threshold** (偵測閾值)：這可讓您指定包含 PII 實體的列百分比，以便將整個資料行識別為具有 PII 實體。例如，如果您輸入 '10'，則指定掃描資料列中 PII 實體 (美國電話) 的數字必須占 10% 或更大，才能將欄位識別為具有 PII 實體 (美國電話)。如果包含 PII 實體的資料列百分比小於 10%，則該欄位將不會識別為具有 PII 實體 (美國電話)。

## 選擇要偵測的 PII 實體
<a name="choose-pii-entities"></a>

 若您選擇 **Detect PII in each cell** (偵測各儲存格中的 PII)，則您可從以下三個選項中選擇一個：
+ 所有可用的 PII 模式 - 這包括 AWS 實體。
+ 選取類別 – 在您選取類別時，PII 模式將自動包含您選取類別中的模式。
+ 選取特定模式 - 僅會偵測您選取的模式。

 如需受管敏感資料類型的完整清單，請參閱 [Managed data types](https://docs.aws.amazon.com/glue/latest/dg/sensitive-data-managed-data-types.html)。

### 從所有可用的 PII 模式中選擇
<a name="w2aac33c23c21c11"></a>

 如果您選擇**所有可用的 PII 模式**，請選取預先定義的實體 AWS。您可以選取一個、多個或所有實體。

![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/pii-select-entities-to-detect.png)


### 選取類別
<a name="w2aac33c23c21c15"></a>

 若您選擇 **Select categories** (選取類別) 作為要偵測的 PII 模式，則您可從下拉式選單中的選項中選取。請注意，部分實體可隸屬於多個類別。例如：*Person's name* (人員姓名) 是一個同時隸屬於 *Universal* (通用) 和 *HIPAA* 類別的實體。
+  通用 (範例：電子郵件、信用卡) 
+  HIPAA (例如：美國駕駛執照、醫療通用程序編碼系統 (HCPCS) 代碼) 
+  聯網 (範例：IP 地址、MAC 地址) 
+ 阿根廷
+ 澳洲
+ 奧地利
+ 比利時
+ 波士尼亞
+ 保加利亞
+ 加拿大
+ 智利
+ 哥倫比亞
+ 克羅埃西亞
+ 賽普勒斯
+ 捷克
+ 丹麥
+ 愛沙尼亞
+ 芬蘭
+ 法國
+ 德國
+ 希臘
+ 匈牙利
+ 愛爾蘭
+ 韓國
+ 日本
+ 墨西哥
+ 荷蘭
+ 紐西蘭
+ 挪威
+ 葡萄牙
+ 羅馬尼亞
+ 新加坡
+ 斯洛伐克
+ 斯洛維尼亞
+ 西班牙
+ 瑞典
+ 瑞士
+ 土耳其
+ 烏克蘭
+ 美國
+ 英國
+ 委內瑞拉

### 選取特定模式
<a name="w2aac33c23c21c19"></a>

 若您選擇 **Select specific patterns** (選取特定模式) 作為要偵測的 PII 模式，您可從已建立的模式清單中搜尋或瀏覽，或者建立新的偵測實體模式。

 以下步驟說明了如何建立新的自訂模式來偵測敏感資料。您將透過輸入自訂模式的名稱來建立自訂模式、新增規則運算式，或者定義內容文字。

 

 

1.  若要建立新模式，請按一下 **Create new** (建立新模式) 按鈕。  
![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/detectpii-create-new.png)

1.  在 Create detection entity (建立偵測實體) 頁面中，請輸入實體名稱和常規表達式。常規表達式 (Regex) 是 AWS Glue 將用來配對實體的方式。

1.  按一下 **Validate** (驗證)。若驗證成功，您將會看到一則確認訊息，說明該字串為有效的常規表達式。若驗證未成功，您將會看到一則訊息，說明該字串不符合正確的格式和可接受的字元常值、運算子或建構。

1.  除了常規表達式之外，您可以選擇新增內容文字。內容文字可能會提高相符的可能性。若欄位名稱並非實體的描述，這些功能便十分實用。例如，社會安全號碼可被命名為 "SSN" 或 "SS"。新增這些內容文字有助於配對實體。

1.  按一下 **Create** (建立) 以建立偵測實體。任何已建立的實體皆在 AWS Glue Studio 主控台中可見。按一下左側導覽選單中的 **Detection entities** (偵測實體)。

    您可以從 **Detection entities** (偵測實體) 頁面中編輯、刪除或建立偵測實體。您也可以使用搜尋欄位來搜尋模式。

## 指定偵測敏感度等級
<a name="sensitive-data-sensitivity"></a>

 您可以設定使用偵測敏感資料時的敏感度等級。
+  **高**：(預設) 針對需要更高敏感度等級的使用案例偵測更多實體。所有在 2023 年 11 月之後建立的 AWS Glue 任務都會自動選擇加入此設定。
+  **低**：偵測較少的實體並減少誤報。

![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/detect-sensitve-data-sensitvity-new.png)


## 選擇如何處理已識別的 PII 資料
<a name="choose-action-pii"></a>

 如果您選擇在整個資料來源中偵測 PII，則可選取要套用的全域動作：
+  **Enrich data with detection results** (利用偵測結果豐富資料)：如果您在每個儲存格中選擇「偵測 PII」，則可以將偵測到的實體存放到新的資料行中。
+  **Redact detected text** (將偵測到的文字設為密文)：您可以使用在選擇性的取代文字輸入欄位中指定的字串來取代偵測到的 PII 值。如果未指定任何字串，則偵測到的 PII 實體會以 '\$1\$1\$1\$1\$1\$1\$1' 取代。
+  **部分遮蔽偵測到的文字**：您可以使用選擇的字串取代部分偵測到的 PII 值。其中提供兩個可能的選項：保持結尾未遮罩，或透過明確的 regex 模式進行遮罩。此功能尚無法在 AWS Glue 2.0 中使用。
+  **Apply cryptographic hash** (套用加密雜湊)：您可以將偵測到的 PII 值傳遞給 SHA-256 密碼編譯雜湊函數，並以函數的輸出取代該值。

![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/detect-sensitive-data-global-action.png)


### AWS Glue 2.0 和 3.0 以上版本之間的差異
<a name="sensitive-data-detection-glue-versions"></a>

 AWS Glue 2.0 任務將會傳回新的 DataFrame，其中包含補充資料欄每一欄偵測到的 PII 資訊。任何遮蔽或雜湊工作皆會顯示於視覺化索引標籤中的 AWS Glue 指令碼內。

 AWS Glue 3.0 和 4.0 的任務將會傳回新的 DataFrame，其中包含這個相同的補充資料欄。"actionUsed" 的新金鑰隨即顯示，可能為 `DETECT`、`REDACT`、`PARTIAL_REDACT` 或 `SHA256_HASH` 其中一個。如果您已選取遮罩動作，則 DataFrame 會傳回已遮罩敏感資料的資料。

## 新增微調動作覆寫
<a name="sensitive-data-fine-grained-actions-override"></a>

 您可以將其他偵測和動作設定新增至微調動作覆寫資料表。這可讓您：
+  **包含或從偵測中排除特定資料欄**：資料來源上的推論結構描述將會在資料表中填入可用的資料欄。
+  **指定深入微調的特定設定，而非使用全域動作**：例如，您可以為不同的實體類型指定不同的遮蔽文字設定。
+  **指定全域動作以外的不同動作**：如果要在不同的敏感資料類型上套用不同的動作，則可在此處進行。請注意，您無法在相同資料欄中使用兩個不同的就地編輯動作 (遮蔽和雜湊)，但可以隨時使用偵測。

![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/detect-sensitive-data-fga-overrides.png)


# 使用 AWS Glue Studio 管理 ETL 任務
<a name="managing-jobs-chapter"></a>

您可以使用 AWS Glue Studio 中的簡單圖形介面來管理您的 ETL 任務。使用導覽功能表，選擇 **Jobs (任務)** 來檢視 **Jobs (任務)** 頁面。在此頁面上，您可以查看您使用 AWS Glue Studio 或 AWS Glue 主控台建立的所有任務。您可以在此頁面上檢視、管理和執行您的任務。

**Topics**
+ [開始任務執行](#start-jobs)
+ [排程任務執行](#schedule-jobs)
+ [管理任務排程](#manage-schedules)
+ [停止任務執行](#stop-jobs)
+ [檢視您的任務](#view-jobs)
+ [檢視最近任務執行的資訊](#view-job-run-details)
+ [檢視任務指令碼](#view-job-script)
+ [修改任務屬性](#edit-jobs-properties)
+ [儲存任務](#save-job)
+ [複製任務](#clone-jobs)
+ [刪除任務](#delete-jobs)

## 開始任務執行
<a name="start-jobs"></a>

在 AWS Glue Studio 中，您可以隨需執行任務。一個任務可以執行多次，每次執行該任務時，AWS Glue 都會收集有關任務活動和效能的資訊。這些資訊稱為*任務執行*，並由任務執行 ID 識別。

您可以透過下列方式在 AWS Glue Studio 啟動任務執行：
+ 在 **Jobs (任務)** 頁面上，選擇您要開始的任務，然後選擇 **Run job (執行任務)** 按鈕。
+ 如果您在視覺化編輯器中檢視任務，且任務已儲存，您可以選擇 **Run (執行)** 按鈕開始任務執行。

如需任務執行的詳細資訊，請參閱 *AWS Glue 開發人員指南*中的[在 AWS Glue 主控台上使用工作](https://docs.aws.amazon.com/glue/latest/dg/console-jobs.html)。

## 排程任務執行
<a name="schedule-jobs"></a>

在 AWS Glue Studio 中，您可以建立排程，讓您的任務在特定時間執行。您可以指定限制條件，例如任務的執行次數、在一週中的哪一天執行，以及執行的時間。這些限制條件是根據 `cron` 並且與 `cron` 具有相同限制。例如，如果您選擇在每個月的 31 日執行您的任務，請注意有些月份不到 31 天。如需 `cron` 的詳細資訊，請參閱 *AWS Glue 開發人員指南*中的 [Cron 表達式](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html#CronExpressions)。

**根據排程執行任務**

1. 使用以下其中一個方法建立任務排程：
   + 在 **Jobs (任務)** 頁面上，選擇您要建立排程的任務，選擇 **Actions (動作)**，然後選擇 **Schedule job (排程任務)**。
   + 如果您在視覺化編輯器中檢視任務，且任務已儲存，請選擇 **Schedules (排程)** 索引標籤。然後選擇 **Create Schedule (建立排程)**。

1. 在 **Schedule job run (排程任務執行)** 頁面上，輸入下列資訊：
   + **Name (名稱)**：輸入任務排程的名稱。
   + **Frequency (頻率)**：輸入任務排程的頻率。您可以選擇下列選項：
     + **Hourly (每小時)**：任務將每小時執行一次，從特定分鐘開始。您可以指定任務應執行的小時 **Minute (分鐘)** 數。依預設，如果您選擇每小時，任務會在小時開始執行 (分鐘 0)。
     + **Daily (每日)**：任務將每天執行，從一個時間開始。您可以指定任務應執行的小時 **Minute (分鐘)** 數以及任務的 **Start hour (起始小時)**。小時數使用 23 小時制指定，您可以使用數字 13 到 23 表示下午的時間。分鐘和小時的預設值為 0，也就是說，如果您選取 **Daily (每日)**，則任務預設在午夜執行。
     + **Weekly (每週)**：任務將在每週的一天或多天執行。除了上述與「每日」相同的設定之外，您還可以選擇在一週的哪幾天執行任務。您可以選擇一或多個天。
     + **Monthly (每月)**：任務將在每個月的特定日期執行。除了上述與「每日」相同的設定之外，您還可以選擇在一個月的哪一天執行任務。將日指定為 1 到 31 之間的數值。如果您選取了一個月中不存在的日期，例如二月 30 日，那麼該月不會執行任務。
     + **Custom (自訂)**：使用 `cron` 語法為您的任務排程輸入表達式。Cron 表達式允許您建立更複雜的排程，例如每月的最後一天 (而不是每月的特定日期) 或是每三個月的第 7 天和第 21 天。

       請參閱 *AWS Glue 開發人員指南*中的 [Cron 表達式](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html#CronExpressions)
   + **Description (描述)**：您可以選擇性地輸入您的任務排程的說明。如果您計劃針對多個任務使用相同的排程，具有描述可讓您更容易判斷任務排程的作用。

1. 選擇 **Create schedule (建立排程) **以儲存任務排程。

1. 建立排程後，成功訊息會出現在主控台頁面頂端。您可以選擇此橫幅中的 **Job Details (任務詳細資訊)** 以檢視任務詳細資訊。這會開啟視覺化任務編輯器頁面，其中選取了 **Schedules (排程)** 索引標籤。

## 管理任務排程
<a name="manage-schedules"></a>

建立任務的排程後，您可以在視覺化編輯器中開啟任務，然後選擇 **Schedules (排程)** 索引標籤來管理排程。

在視覺化編輯器的 **Schedules (排程)** 索引標籤，您可以執行以下任務：
+ 建立新排程。

  選擇 **Create schedule (建立排程)**，然後輸入排程的資訊，如[排程任務執行](#schedule-jobs)所述。
+ 編輯現有排程。

  選擇您要編輯的排程，然後選擇 **Action (動作)**，接著選擇 **Edit schedule (編輯排程)**。當您選擇編輯現有的排程時，**Frequency (頻率)** 顯示為 **Custom (自訂)**，且排程會顯示為 `cron` 表達式。您可以修改 `cron` 表達式，或使用 **Frequency (頻率)** 按鈕指定新排程。當您完成變更後，請選擇 **Update schedule (更新排程)**。
+ 暫停作用中的排程。

  選擇作用中排程，然後選擇 **Actions (動作)**，接著選擇 **Pause schedule (暫停排程)**。排程會立即停用。選擇重新整理 (重新載入) 按鈕，以查看更新的任務排程狀態。
+ 繼續暫停的排程。

  選擇停用的排程，然後選擇 **Actions (動作)**，接著選擇 **Resume schedule (繼續排程)**。排程會立即啟動。選擇重新整理 (重新載入) 按鈕，以查看更新的任務排程狀態。
+ 刪除排程。

  選擇您要移除的排程，然後選擇 **Actions (動作)**，接著選擇 **Delete schedule (刪除排程)**。排程會立即刪除。選擇重新整理 (重新載入) 按鈕，以查看更新的任務排程清單。排程會顯示 **Deleting (正在刪除)** 狀態，直到它被完全移除。

## 停止任務執行
<a name="stop-jobs"></a>

您可以在任務完成任務執行之前停止任務。如果您知道任務設定不正確，或任務花太長時間無法完成，您可以選擇此選項。

在 **Monitoring (監控)** 頁面的 **Job runs (任務執行)** 清單中，選擇您要停止的任務，選擇 **Actions (動作)**，接著選擇 **Stop run (停止執行)**。

## 檢視您的任務
<a name="view-jobs"></a>

您可以在 **Jobs (任務)** 頁面上檢視您所有的任務。若要存取此頁面，請選擇導覽窗格中的 **Jobs (任務)**。

在 **Jobs (任務)** 頁面上，您可以看到在帳戶中建立的所有任務。**Your jobs (您的任務)** 清單會顯示任務名稱、其類型、該任務上次執行的狀態，以及建立任務和上次修改的日期。您可以選擇任務的名稱，以查看該任務的詳細資訊。

您也可以使用監控儀表板來檢視您的所有任務。若要存取儀表板，請選擇導覽窗格中的 **Monitoring (監控)**。

### 自訂任務顯示
<a name="view-jobs-customize"></a>

您可以在 **Jobs (任務)** 頁面的 **Your jobs (您的任務)** 區段自訂任務的顯示方式。此外，您可以在搜尋文字欄位中輸入文字，以僅顯示名稱包含該文字的任務。

如果您選擇 **Your jobs** (您的任務) 區段中的設定圖示 ![\[\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/manage-console-icon-settings.png)，您可以自訂 AWS Glue Studio 在資料表中顯示資訊的方式。您可以選擇在顯示中將文字行換行、變更頁面上顯示的任務數目，以及指定要顯示的欄。

## 檢視最近任務執行的資訊
<a name="view-job-run-details"></a>

任務可以隨著來源位置新增資料而執行多次。每次任務執行，都會為任務執行指派一個唯一的 ID，並收集有關該任務執行的資訊。您可以使用下列方法，檢視此資訊：
+ 選擇視覺化編輯器的 **Runs (執行)** 索引標籤，以檢視目前顯示任務的任務執行資訊。

  在 **Runs (執行)** 索引標籤 (**Recent job runs (最近任務執行)** 頁面)，每個任務執行都會有一張卡片。**Runs (執行)** 索引標籤顯示的資訊包含：
  + 任務執行 ID
  + 嘗試執行此任務的次數
  + 任務執行的狀態
  + 任務執行的開始及結束時間
  + 任務執行的執行時間
  + 任務日誌檔的連結
  + 任務錯誤日誌檔的連結
  + 失敗任務傳回的錯誤
+ 您可以選取工作執行，以檢視有關該工作的其他資訊，包括以下內容：
  + **輸入引數**
  + **連續日誌**
  + **指標**：您可以查看基本指標的視覺效果。如需有關包含之指標的詳細資訊，請參閱 [檢視 Spark 任務執行的 Amazon CloudWatch 指標](view-job-runs.md#monitoring-job-run-metrics)。
  + **Spark UI** – 您可以在 Spark UI 中將工作的 Spark 日誌視覺化。如需有關使用 Spark Web UI 的詳細資訊，請參閱 [使用 Apache Spark web UI 監控任務](monitor-spark-ui.md)。必須依照 [為 AWS Glue 任務啟用 Apache Spark web UI](monitor-spark-ui-jobs.md) 中的程序來啟用此功能。

您可以選取**檢視詳細資料**，以在任務執行詳細資料頁面中檢視類似的資訊。或者，您也可以透過**監控**頁面，導覽至任務執行詳細資料頁面。在導覽窗格中，選擇 **Monitoring (監控)**。向下捲動到 **Job runs (任務執行)** 清單。選擇任務，然後選擇 **View run details (檢視執行詳細資訊)**。內容在[檢視任務執行的詳細資訊](view-job-runs.md#monitoring-job-run-details)中描述。

如需任務日誌的詳細資訊，請參閱[檢視任務執行日誌](view-job-runs.md#monitoring-job-run-logs)。

## 檢視任務指令碼
<a name="view-job-script"></a>

在您提供任務中所有節點的資訊之後，AWS Glue Studio 會產生由任務用於從來源讀取資料、轉換資料，並在目標位置寫入資料的指令碼。如果您儲存任務，您可以隨時檢視此指令碼。

**檢視為任務產生的指令碼**

1. 在導覽窗格中，選擇 **Jobs (任務)**。

1. 在 **Jobs (任務)** 頁面的 **Your jobs (您的任務)** 清單中，選擇要檢閱的任務名稱。或者，您可以在清單中選擇一個任務，選擇 **Actions (動作)** 功能表，然後選擇 **Edit job (編輯任務)**。

1. 在視覺化編輯器頁面上，選擇頂端的 **Script (指令碼)** 索引標籤以檢視任務指令碼。

   如果想要編輯任務指令碼，請參閱[AWS Glue 程式設計指南](edit-script.md)。

## 修改任務屬性
<a name="edit-jobs-properties"></a>

任務圖表中的節點定義了任務所執行的動作，但您也可以為任務設定幾個屬性。這些屬性會決定執行任務的環境、其使用的資源、閾值設定、安全性設定等。

**自訂任務執行環境**

1. 在導覽窗格中，選擇 **Jobs (任務)**。

1. 在 **Jobs (任務)** 頁面的 **Your jobs (您的任務)** 清單中，選擇要檢閱的任務名稱。

1. 在視覺化編輯器頁面上，選擇任務編輯窗格頂端的 **Job Details (任務詳細資訊)**。

1. 視需要修改任務屬性。

   如需任務屬性的詳細資訊，請參閱 *AWS Glue 開發人員指南*中的[定義任務屬性](https://docs.aws.amazon.com/glue/latest/dg/add-job.html#create-job)。

1. 如果您需要指定下列額外任務屬性，請展開 **Advanced properties (進階屬性)** 區段：
   + **Script filename (指令碼檔案名稱)** – 在 Amazon S3 中儲存任務指令碼的檔案名稱。
   + **Script path (指令碼路徑)** – 儲存任務指令碼的 Amazon S3 位置。
   + **任務指標** – （不適用於 Python shell 任務） 在此任務執行時開啟 Amazon CloudWatch 指標的建立。
   + **Continuous logging (連續記錄)** – (不適用於 Python Shell 任務) 開啟連續記錄至 CloudWatch，以便在任務完成之前可以檢視記錄。
   + **Spark UI** 和 **Spark UI logs path (Spark UI 日誌路徑)** – (不適用於 Python Shell 任務) 開啟使用 Spark UI 來監控此任務，並指定 Spark UI 日誌的位置。
   + **Maximum concurrency (最大並行數量)** – 設定此任務允許並行執行的最大數量。
   + **Temporary path (暫存路徑)** – 提供 Amazon S3 裡的工作目錄位置，可在 AWS Glue 執行任務指令碼時寫入暫時的中繼結果。
   + **Delay notification threshold (minutes) (延遲通知閾值 (分鐘))** – 為任務指定延遲閾值。如果任務執行的時間超過閾值所指定的時間，AWS Glue 會將任務的延遲通知傳送至 CloudWatch。
   + **Security configuration (安全組態)** 和 **Server-side encryption (伺服器端加密)** – 使用這些欄位來選擇任務的加密選項。
   + **Use Glue Data Catalog as the Hive metastore (使用 Glue Data Catalog 做為 Hive 中繼存放區)** – 如果您想要使用 AWS Glue Data Catalog 作為 Apache Hive 中繼存放區的替代選項，請選擇此選項。
   + **Additional network connection (額外的網路連線)** – 對於 VPC 中的資料來源，您可以指定 `Network` 連線類型，以確保您的任務透過 VPC 存取您的資料。
   + **Python library path (Python 程式庫路徑)**、**Dependent jars path (相依 jar 路徑)** (不適用於 Python Shell 任務)，或 **Referenced files path (參考檔案路徑)** – 使用這些欄位來指定任務執行指令碼時所使用的其他檔案位置。
   + **Job Parameters (任務參數)** – 您可新增一組索引鍵/值對，以具名參數的形式傳遞至任務指令碼。在 Python AWS Glue API呼叫 時，最好依名稱明確傳遞參數。如需在任務指令碼中使用參數的詳細資訊，請參閱 *AWS Glue 開發人員指南*中的[在 AWS Glue 中傳遞和存取 Python 參數](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-calling.html#aws-glue-programming-python-calling-parameters)。
   + **Tags (標籤)** – 您可以在任務中新增標籤，協助您整理和識別它們。

1. 修改任務屬性之後，請儲存任務。

### 在 Amazon S3 上儲存 Spark 隨機播放檔案
<a name="configure-shuffle"></a>

某些 ETL 任務需要讀取和合併來自多個分割區的資訊，例如，使用聯結轉換時。這項作業稱為*隨機播放*。在隨機播放期間，資料會寫入磁碟並透過網路傳輸。使用 AWS Glue 3.0 版，您可以將 Amazon S3 設定為這些檔案的儲存位置。AWS Glue 提供隨機播放管理器，可在 Amazon S3 之間寫入和讀取隨機檔案。與本機磁碟 (或針對 Amazon EC2 進行大量最佳化的 Amazon EBS) 相比，從 Amazon S3 寫入和讀取隨機檔案的速度較慢 (5%-20%)。不過，Amazon S3 提供無限儲存容量，因此在執行任務時無須擔心「`No space left on device`」錯誤。

**將您的任務設定為使用 Amazon S3 進行隨機播放檔案**

1. 在 **Jobs (任務)** 頁面的 **Your jobs (您的任務)** 清單中，選擇要修改的任務名稱。

1. 在視覺化編輯器頁面上，選擇任務編輯窗格頂端的 **Job Details (任務詳細資訊)**。

   向下捲動到 **Job Parameters (任務參數)** 區段。

1. 指定下列索引鍵/值組。
   + `--write-shuffle-files-to-s3` — `true`

     這是 AWS Glue 中設定隨機播放管理器的主要參數，使用 Amazon S3 儲存貯體來寫入和讀取隨機資料。此參數的預設值為 `false`。
   + (選用) `--write-shuffle-spills-to-s3` — `true`

     此參數可讓您將溢出檔案卸載到 Amazon S3 儲存貯體，這為 AWS Glue 中的 Spark 任務提供額外的彈性。只有將大量資料溢出到磁碟的大型工作負載才需要它。此參數的預設值為 `false`。
   + (選用) `--conf spark.shuffle.glue.s3ShuffleBucket` — `S3://<shuffle-bucket>`

     此參數指定寫入隨機檔案時要使用的 Amazon S3 儲存貯體。如果您未設定此參數，則位置是為 **Temporary path (暫存路徑)** 指定之位置中的 `shuffle-data` 資料夾 (`--TempDir`)。
**注意**  
確定隨機播放儲存貯體的位置與任務執行 AWS 區域 所在的位置相同。  
此外，隨機播放服務不會在任務執行完畢後清除檔案，因此您應該在隨機儲存貯體位置上設定 Amazon S3 儲存生命週期政策。如需詳細資訊，請參閱 *Amazon S3 使用者指南*中的[管理儲存生命週期](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)。

## 儲存任務
<a name="save-job"></a>

紅色的 **Job has not been saved (尚未儲存任務)** 標註會顯示在 **Save (儲存)** 按鈕左側，直到您儲存任務為止。

![\[「儲存」按鈕左側有「尚未儲存任務」標籤的紅色橢圓形。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/edit-graph-callout-not-saved_GA.png)


**儲存任務**

1. **Visual (視覺效果)** 和 **Job Details (任務詳細資訊)** 索引標籤中提供所有必要的資訊。

1. 選擇 **Save (儲存)** 按鈕。

   儲存任務後，「未儲存」標註會變更為顯示上次儲存任務的時間和日期。

如果您在儲存任務前離開 AWS Glue Studio，則下次您登入 AWS Glue Studio 時會出現通知。通知會指出有未儲存的任務，並詢問您是否要還原它。如果您選擇還原任務，您可以繼續編輯任務。

### 故障診斷儲存任務時發生的錯誤
<a name="save-job-troubleshooting"></a>

如果選擇 **Save (儲存)** 按鈕，但是您的任務遺失了一些必要資訊，則會在遺失資訊的索引標籤上出現紅色標註。標註中的數字表示偵測到的遺失欄位數目。

![\[顯示名為「Untitled job (未命名任務)」之任務的視覺化編輯器窗格索引標籤的螢幕擷取畫面，在 [Visual (視覺效果)] 索引標籤上標註 2，以及 [Job Details (任務詳細資訊)] 索引標籤上標註 1。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/screenshot-save-job-error-in-graph-GA2.png)

+ 如果視覺化編輯器中的節點未正確設定，**Visual (視覺效果)** 索引標籤會顯示紅色標註，並且出現錯誤的節點顯示警告符號 ![\[A red triangle with an exclamation point in the center\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/edit-graph-warning_icon.png)。

  1. 選擇節點。在節點詳細資訊面板中，紅色標註會出現在遺失或不正確資訊所在的索引標籤上。

  1. 在節點詳細資訊面板中選擇顯示紅色標註的索引標籤，然後找到反白顯示的問題欄位。欄位下方的錯誤訊息會提供問題的其他資訊。  
![\[顯示任務編輯器中 [Visual (視覺效果)] 索引標籤的螢幕擷取畫面，其標註為 2。會選取以警告標籤標記的資料來源節點。在節點詳細資訊面板中，[Data source properties (資料來源屬性)] 索引標籤具有標示為 2 的標註，並已選取。兩個欄位，資料庫和表被概述為紅色，並在它們下面有訊息表明這些欄位中需要一個值。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/screenshot-save-job-error-in-graph2.png)
+ 如果任務屬性發生問題，**Job Details (任務詳細資訊)** 索引標籤會顯示紅色標註。選擇該標簽并确定問題欄位，這些欄位會突出顯示。欄位下方的錯誤訊息提供問題的其他資訊。  
![\[顯示任務編輯器中 [Job Details (任務詳細資訊)] 索引標籤的螢幕擷取畫面，並標註為 1。「IAM 角色」欄位以紅色概述，下方有一則訊息，指出需要值。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/screenshot-save-job-error-in-job-details.png)

## 複製任務
<a name="clone-jobs"></a>

您可以使用**複製任務**動作，將現有任務複製到新任務中。

**透過複製現有任務建立新任務**

1. 在 **Jobs (任務)** 頁面的 **Your jobs (您的任務)** 清單中，選擇要複製的任務。

1. 從 **Actions (動作)** 功能表，選擇 **Clone job (複製任務)**。

1. 輸入新任務的名稱。然後您可以儲存或編輯任務。

## 刪除任務
<a name="delete-jobs"></a>

您可以移除不再需要的任務。您可以在單一作業中刪除一或多個任務。

**從 AWS Glue Studio 中移除任務**

1. 在 **Jobs (任務)** 頁面的 **Your jobs (您的任務)** 清單中，選擇要刪除的任務。

1. 在 **Actions (動作)** 選單中，選擇 **Delete job (刪除任務)**。

1. 確認您要刪除任務，方法是輸入**delete**。

您也可以在檢視視覺化編輯器中任務的 **Job Details (任務詳細資訊)** 索引標籤時刪除儲存的任務。