创建和使用Amazon Glue DataBrewrecipes - Amazon Glue DataBrew
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建和使用Amazon Glue DataBrewrecipes

在数据库中,recipe是一组数据转换步骤。您可以将这些步骤应用于数据样本,也可以将相同的配方应用于数据集。

开发配方的最简单方法是创建 Databrew 项目,您可以在其中以交互方式处理数据示例 — 有关详细信息,请参阅创建和使用Amazon Glue DataBrew项目。作为项目创建工作流的一部分,将创建一个新的(空)配方并将其附加到项目。然后,您可以通过添加数据转换开始构建您的配方。

注意

单一 Databrew 配方中最多可以包含 100 个数据转换。

当您继续开发您的配方时,您可以通过发布配方。Databrew 为您的配方维护已发布版本的列表。您可以使用处方作业中的任何已发布版本运行配方(在配方作业中)来转换数据集。您还可以下载配方步骤的副本,以便在其他项目或其他数据集转换中重复使用该配方。

您还可以通过编程方式开发 Databrew 配方,使用Amazon Command Line Interface(Amazon CLI)或之一Amazon开发工具包。在数据库 API 中,转换称为配方操作

注意

在交互式 Databrew 项目会话中,应用的每个数据转换都会导致对 Databrew API 的调用。这些 API 调用会自动发生,而无需了解幕后的详细信息。

即使您不是程序员,了解配方的结构以及 Databrew 如何组织配方操作也很有帮助。

发布新配方版本

您可以在交互式 Databrew 项目会话中发布配方的新版本。

发布新配方版本

  1. 在配方窗格中,选择发布

  2. 为此版本的处方输入描述,然后选择发布

您可以查看所有已发布的食谱及其版本,方法是选择项目从导航窗格中。

定义处方结构

首次使用 Databrew 控制台创建项目时,您可以定义要与该项目关联的处方。如果您没有现有配方,控制台会为您创建配方。

在控制台中处理项目时,可以使用转换工具栏将操作应用于数据集中的示例数据。当您继续构建配方时,控制台会显示配方步骤以及这些步骤的顺序。您可以迭代和优化配方,直到您对步骤感到满意。

In开始使用 Amazon Glue DataBrew,您可以构建一个配方来转换著名的国际象棋游戏数据集。您可以下载配方步骤的副本,方法是选择以 JSON 形式下载或者下载为 YAML如以下屏幕截图所示。

下载的 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(blackwhite)。然后将这些组中的每个组进一步细分,根据victory_status(materesignoutoftime, 和draw)。最后,计算每个子组的出现次数。然后,生成的摘要将替换原始数据样本。

  • REMOVE_VALUES— 删除结束的游戏的结果draw

  • REPLACE_TEXT— 要修改victory_status。此操作有三个实例,每个出现一个materesign, 和oufoftime

在交互式 Databrew 项目会话中,每个RecipeAction对应于您应用于数据样本的数据转换。

数据库提供了超过 200 个配方操作。有关更多信息,请参阅处方步骤和功能参考

使用条件

您可以使用条件来缩小配方操作的范围。条件用于筛选数据的转换,例如,根据特定列值删除不需要的行。

让我们详细了解一下配方行动chess-project-recipe

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

此转换将读取black_ratingcolumn. 这些区域有: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— 列中没有值。