View a markdown version of this page

建立和使用AWS Glue DataBrew配方 - AWS Glue DataBrew開發人員指南

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

建立和使用AWS Glue DataBrew配方

在 DataBrew 中,配方是一組資料轉換步驟。您可以將這些步驟套用至資料範例,或將相同的配方套用至資料集。

開發配方最簡單的方法是建立 DataBrew 專案,您可以在其中以互動方式使用資料範例,如需詳細資訊,請參閱 建立和使用AWS Glue DataBrew專案。在專案建立工作流程中,會建立新的 (空白) 配方並連接到專案。然後,您可以透過新增資料轉換開始建置配方。

注意

您可以在單一 DataBrew 配方中包含最多 100 個資料轉換。

隨著您繼續開發配方,您可以透過發佈配方來儲存工作。DataBrew 會維護配方的已發佈版本清單。您可以在配方任務中使用任何已發佈的版本,以執行配方 (在配方任務中) 來轉換資料集。您也可以下載配方步驟的副本,以便在其他專案或其他資料集轉換中重複使用配方。

您也可以使用AWS Command Line Interface(AWS CLI) 或其中一個AWS SDKs,以程式設計方式開發 DataBrew 配方。在 DataBrew API 中,轉換稱為配方動作

注意

在互動式 DataBrew 專案工作階段中,您套用的每個資料轉換都會導致呼叫 DataBrew API。這些 API 呼叫會自動發生,您不必知道behind-the-scenes詳細資訊。

即使您不是程式設計人員,了解配方的結構以及 DataBrew 如何組織配方動作也很有幫助。

發佈新的配方版本

您可以在互動式 DataBrew 專案工作階段中發佈新版本的配方。

發佈新的配方版本
  1. 在配方窗格中,選擇發佈

  2. 輸入此版本配方的描述,然後選擇發佈

您可以從導覽窗格選擇 PROJECTS,以檢視所有已發佈的配方及其版本。

定義配方結構

當您第一次使用 DataBrew 主控台建立專案時,您可以定義與該專案相關聯的配方。如果您沒有現有的配方,主控台會為您建立一個配方。

當您在 主控台中使用專案時,您可以使用轉換工具列將動作套用至資料集的範例資料。當您繼續建置配方時,主控台會顯示配方步驟和這些步驟的順序。您可以重複和精簡配方,直到您對步驟感到滿意為止。

在 中入門AWS Glue DataBrew,您會建置配方來轉換知名 chess 遊戲的資料集。您可以選擇下載為 JSON下載為 YAML,以下載配方步驟的副本,如下列螢幕擷取畫面所示。

已擴展更多顯示匯入配方、下載為 YAML 和下載為 JSON 選項的選單。

下載的 JSON 檔案包含對應至您新增至配方之轉換的配方動作。

新配方沒有任何步驟。您可以將新配方表示為空白 JSON 清單,如下所示。

[ ]

以下是 的此類檔案範例chess-project-recipe。JSON 清單包含數個描述配方步驟的物件。JSON 清單中的每個物件都以大括號 () 括住{ }。JSON 行以逗號分隔。

[ { "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "black_rating" } }, "ConditionExpressions": [ { "Condition": "LESS_THAN", "Value": "1800", "TargetColumn": "black_rating" } ] }, { "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "white_rating" } }, "ConditionExpressions": [ { "Condition": "LESS_THAN", "Value": "1800", "TargetColumn": "white_rating" } ] }, { "Action": { "Operation": "GROUP_BY", "Parameters": { "groupByAggFunctionOptions": "[{\"sourceColumnName\":\"winner\",\"targetColumnName\":\"winner_count\",\"targetColumnDataType\":\"int\",\"functionName\":\"COUNT\"}]", "sourceColumns": "[\"winner\",\"victory_status\"]", "useNewDataFrame": "true" } } }, { "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "winner" } }, "ConditionExpressions": [ { "Condition": "IS", "Value": "[\"draw\"]", "TargetColumn": "winner" } ] }, { "Action": { "Operation": "REPLACE_TEXT", "Parameters": { "pattern": "mate", "sourceColumn": "victory_status", "value": "checkmate" } } }, { "Action": { "Operation": "REPLACE_TEXT", "Parameters": { "pattern": "resign", "sourceColumn": "victory_status", "value": "other player resigned" } } }, { "Action": { "Operation": "REPLACE_TEXT", "Parameters": { "pattern": "outoftime", "sourceColumn": "victory_status", "value": "ran out of time" } } } ]

如果我們只為新動作新增新的行,則更容易看到每個動作都是個別行,如下所示。

[ { "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "black_rating" } }, "ConditionExpressions": [ { "Condition": "LESS_THAN", "Value": "1800", "TargetColumn": "black_rating" } ] }, { "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "white_rating" } }, "ConditionExpressions": [ { "Condition": "LESS_THAN", "Value": "1800", "TargetColumn": "white_rating" } ] }, { "Action": { "Operation": "GROUP_BY", "Parameters": { "groupByAggFunctionOptions": "[{\"sourceColumnName\":\"winner\",\"targetColumnName\":\"winner_count\",\"targetColumnDataType\":\"int\",\"functionName\":\"COUNT\"}]", "sourceColumns": "[\"winner\",\"victory_status\"]", "useNewDataFrame": "true" } } }, { "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "winner" } }, "ConditionExpressions": [ { "Condition": "IS", "Value": "[\"draw\"]", "TargetColumn": "winner" } ] }, { "Action": { "Operation": "REPLACE_TEXT", "Parameters": { "pattern": "mate", "sourceColumn": "victory_status", "value": "checkmate" } } }, { "Action": { "Operation": "REPLACE_TEXT", "Parameters": { "pattern": "resign", "sourceColumn": "victory_status", "value": "other player resigned" } } }, { "Action": { "Operation": "REPLACE_TEXT", "Parameters": { "pattern": "outoftime", "sourceColumn": "victory_status", "value": "ran out of time" } } } ]

動作會依序執行,順序與 檔案中的順序相同:

  • REMOVE_VALUES – 若要篩選出玩家評分低於 1,800 的所有遊戲,A 類西洋棋玩家所需的最低評分。此動作有兩個出現次數:一個用於移除不至少 A 類玩家的黑邊玩家,另一個用於移除不在此關卡的白邊玩家。

  • GROUP_BY – 摘要資料。在此情況下,GROUP_BY 會根據 winner(black 和 ) 的值,將資料列排序為群組white。然後,每個群組都會進一步細分,並根據 victory_status(mateoutoftimeresign和 ) 的值將資料列排序為子群組draw。最後,計算每個子群組的出現次數。產生的摘要接著會取代原始資料範例。

  • REMOVE_VALUES – 刪除以 結尾的遊戲結果draw

  • REPLACE_TEXT – 修改 的值victory_status。此動作有三個出現次數:materesign和 各一個oufoftime

在互動式 DataBrew 專案工作階段中,每個RecipeAction對應至您套用至資料範例的資料轉換。

DataBrew 提供超過 200 個配方動作。如需詳細資訊,請參閱配方步驟和函數參考

使用條件

您可以使用條件來縮小配方動作的範圍。條件用於篩選資料的轉換,例如,根據特定資料欄值移除不需要的資料列。

讓我們進一步了解來自 的配方動作chess-project-recipe

{ "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "black_rating" } }, "ConditionExpressions": [ { "Condition": "LESS_THAN", "Value": "1800", "TargetColumn": "black_rating" } ] }

此轉換會讀取 black_rating 欄中的值。ConditionExpressions 清單會決定篩選條件:black_rating任何值小於 1,800 的資料列都會從資料集中移除。

配方中的後續轉換對 執行相同的動作white_rating。如此一來,資料僅限於每個玩家 (黑色或白色) 的評分為 A 級或更高等級的遊戲。

以下是套用至角色資料欄的另一個條件範例。

{ "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "winner" } }, "ConditionExpressions": [ { "Condition": "IS", "Value": "[\"draw\"]", "TargetColumn": "winner" } ] }

此轉換會讀取資料winner欄中的值,尋找值draw並移除這些資料列。如此一來,資料僅限於有明確優勝者的遊戲。

DataBrew 支援下列條件:

  • IS – 欄中的值與條件中提供的值相同。

  • IS_NOT – 資料欄中的值與條件中提供的值不同。

  • IS_BETWEEN – 欄中的值介於 GREATER_THAN_EQUALLESS_THAN_EQUAL 參數之間。

  • CONTAINS – 欄中的字串值包含條件中提供的值。

  • NOT_CONTAINS – 欄中的值不包含條件中提供的字元字串。

  • STARTS_WITH – 欄中的值以條件中提供的字元字串開頭。

  • NOT_STARTS_WITH – 資料欄中的值不會以條件中提供的字元字串開頭。

  • ENDS_WITH – 資料欄中的值以條件中提供的字元字串結尾。

  • NOT_ENDS_WITH – 資料欄中的值不會以條件中提供的字元字串結尾。

  • LESS_THAN – 欄中的值小於條件中提供的值。

  • LESS_THAN_EQUAL – 資料欄中的值小於或等於條件中提供的值。

  • GREATER_THAN – 欄中的值大於條件中提供的值。

  • GREATER_THAN_EQUAL – 欄中的值大於或等於條件中提供的值。

  • IS_INVALID – 資料欄中的值具有不正確的資料類型。

  • IS_MISSING – 欄中沒有值。