

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

# 在 Lake Formation 中使用工作流导入数据
<a name="workflows"></a>

通过 Amazon Lake Formation，您可以使用工作流导入数据。**工作流定义数据来源和计划以将数据导入到数据湖中。它是一个容器，用于存放 Amazon Glue 爬网程序、作业和触发器，用于编排加载和更新数据湖的流程。

**Topics**
+ [Lake Formation 中的蓝图和工作流](workflows-about.md)
+ [创建工作流](workflows-creating.md)
+ [运行工作流](workflows-running.md)

# Lake Formation 中的蓝图和工作流
<a name="workflows-about"></a>

工作流封装了复杂的多作业提取、转换、加载 (ETL) 活动。工作流生成 Amazon Glue 爬网程序、作业和触发器，以编排数据的加载和更新。Lake Formation 将工作流作为单个实体来执行和跟踪。您可以将工作流配置为按需或按计划运行。

**注意**  
Spark Parquet 写入器不支持在列名中使用特殊字符。这是写入器本身的技术限制，而不是配置问题。

您在 Lake Formation 中创建的工作流在 Amazon Glue 控制台中显示为有向无环图 (DAG) 形式。每个 DAG 节点都是一个作业、爬网程序或触发器。要监控进度并进行故障排除，您可以跟踪工作流中每个节点的状态。

Lake Formation 工作流完成后，运行该工作流的用户将获得对该工作流创建的数据目录表的 Lake Formation `SELECT` 权限。

您也可以在 Amazon Glue 中创建工作流。但是，由于 Lake Formation 允许您从蓝图创建工作流，因此在 Lake Formation 中创建工作流要简单得多，自动化程度也更高。Lake Formation 提供以下类型的蓝图：
+ **数据库快照** – 将所有表中的数据从 JDBC 源加载或重新加载到数据湖中。您可以根据排除模式从该源中排除某些数据。
+ **增量数据库** - 根据先前设置的书签，仅将新数据从 JDBC 源加载到数据湖中。您可以指定 JDBC 源数据库中要包含的各个表。对于每个表，您可以选择书签列和书签排序顺序，以跟踪之前加载的数据。首次对一组表运行增量数据库蓝图时，工作流会加载表中的所有数据，并为下一次增量数据库蓝图运行设置书签。因此，您可以使用增量数据库蓝图（而不是数据库快照蓝图）来加载所有数据，前提是将数据来源中的每个表指定为参数。
+ **日志文件** - 从日志文件来源（包括 Amazon CloudTrail、Elastic Load Balancing 日志和应用程序负载均衡器日志）批量加载数据。

使用下表可帮助确定是使用数据库快照蓝图还是增量数据库蓝图。


| 在以下情况下使用数据库快照... | 在以下情况下使用增量数据库... | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/lake-formation/latest/dg/workflows-about.html)  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/lake-formation/latest/dg/workflows-about.html)  | 

**注意**  
用户无法编辑 Lake Formation 创建的蓝图和工作流。

# 创建工作流
<a name="workflows-creating"></a>

在开始之前，请确保已向角色 `LakeFormationWorkflowRole` 授予所需的数据权限和数据位置权限。这样，工作流就可以在数据目录中创建元数据表，并将数据写入 Amazon S3 中的目标位置。有关更多信息，请参阅[（可选）为工作流创建 IAM 角色](initial-lf-config.md#iam-create-blueprint-role)和 [Lake Formation 权限概述](lf-permissions-overview.md)。

**注意**  
Lake Formation 使用 `GetTemplateInstance`、`GetTemplateInstances` 和 `InstantiateTemplate` 操作根据蓝图创建工作流。这些操作不对外公开，仅在内部使用，用于代表您创建资源。您会收到用于创建工作流的 CloudTrail 事件。

**通过蓝图创建工作流**

1. 通过 [https://console.aws.amazon.com/lakeformation/](https://console.amazonaws.cn/lakeformation/) 打开 Amazon Lake Formation 控制台。以数据湖管理员或具有数据工程师权限的用户身份登录。有关更多信息，请参阅[Lake Formation 角色和 IAM 权限参考](permissions-reference.md)。

1. 在导航窗格中，选择**蓝图**，然后选择**使用蓝图**。

1. 在**使用蓝图**页面上，选择一个磁贴以选择蓝图类型。

1. 在**导入来源**下，指定数据来源。

   如果要从 JDBC 源导入，请指定以下内容：
   + ****数据库连接**** - 从列表中选择一个连接。使用 Amazon Glue 控制台创建其他连接。连接中的 JDBC 用户名和密码决定了工作流有权访问的数据库对象。
   + ****来源数据路径**** - 输入 *<database>*/*<schema>*/*<table>* 或 *<database>*/*<table>*，具体取决于数据库产品。Oracle Database 和 MySQL 不支持路径中的架构。您可以用百分比 (%) 字符替换 *<schema>* 或 *<table>*。例如，对于系统标识符 (SID) 为 `orcl` 的 Oracle 数据库，输入 `orcl/%` 以导入连接中指定的用户有权访问的所有表。
**重要**  
此字段区分大小写。如果任何组件存在大小写不匹配的情况，则工作流将失败。

     如果指定 MySQL 数据库，则 Amazon Glue ETL 默认使用 Mysql5 JDBC 驱动程序，因此 MySQL8 不受原生支持。您可以将 ETL 作业脚本编辑为使用 `customJdbcDriverS3Path` 参数，如《Amazon Glue 开发人员指南》中的 [JDBC connectionType 值](https://docs.amazonaws.cn/glue/latest/dg/aws-glue-programming-etl-connect.html#aws-glue-programming-etl-connect-jdbc)中所述，以使用支持 MySQL8 的其他 JDBC 驱动程序。**

   如果要从日志文件导入，请确保您为工作流指定的角色（“工作流角色”）具有访问数据来源所需的 IAM 权限。例如，要导入 Amazon CloudTrail 日志，用户必须具有 `cloudtrail:DescribeTrails` 和 `cloudtrail:LookupEvents` 权限才能在创建工作流时查看 CloudTrail 日志列表，并且工作流角色必须具有对 Amazon S3 中 CloudTrail 位置的权限。

1. 请执行以下操作之一：
   + 对于**数据库快照**蓝图类型，可以选择通过指定一个或多个排除模式来识别要导入的一部分数据。这些排除模式是 Unix 风格的 `glob` 模式。它们将存储为由工作流创建的表的属性。

     有关可用排除模式的详细信息，请参阅《Amazon Glue 开发人员指南》中的[包含和排除模式](https://docs.amazonaws.cn/glue/latest/dg/define-crawler.html#crawler-data-stores-exclude)。**
   + 对于**增量数据库**蓝图类型，请指定以下字段。为每个要导入的表添加一行。  
**表名称**  
要导入的表。必须全部小写。  
**书签键**  
定义书签键的列名的逗号分隔列表。如果为空，则使用主键确定新数据。每列的大小写必须与数据来源中定义的大小写匹配。  
仅当主键按顺序递增或递减（无间隙）时，主键才有资格成为默认书签键。如果要使用主键作为书签键并且它有间隙，则必须将主键列命名为书签键。  
**书签顺序**  
选择**升序**时，值大于书签值的行将被标识为新行。选择**降序**时，值小于书签值的行将被标识为新行。  
**分区方案**  
（可选）分区键列列表，用斜杠 (/) 分隔。示例：` year/month/day`。  
![\[控制台的“增量数据”部分包括以下字段：“表名称”、“书签键”、“书签顺序”、“分区方案”。您可以添加或删除行，其中每行用于不同的表。\]](http://docs.amazonaws.cn/lake-formation/latest/dg/images/incremental-data.png)

     有关更多信息，请参阅《Amazon Glue 开发人员指南》中的[使用作业书签来跟踪已处理的数据](https://docs.amazonaws.cn/glue/latest/dg/monitor-continuations.html)。**

1. 在**导入目标**下，指定目标数据库、目标 Amazon S3 位置和数据格式。

   确保工作流角色对数据库和 Amazon S3 目标位置具有所需的 Lake Formation 权限。
**注意**  
目前，蓝图不支持加密目标位置的数据。

1. 选择导入频率。

   您可以使用**自定义**选项指定 `cron` 表达式。

1. 在**导入选项**下：

   1. 输入工作流名称。

   1. 对于角色，选择您在[（可选）为工作流创建 IAM 角色](initial-lf-config.md#iam-create-blueprint-role)中创建的角色 `LakeFormationWorkflowRole`。

   1. （可选）指定表前缀。该前缀位于工作流创建的数据目录表的名称之前。

1. 选择**创建**，然后等待控制台报告已成功创建工作流。
**提示**  
您是否收到了以下错误消息？  
`User: arn:aws:iam::<account-id>:user/<username> is not authorized to perform: iam:PassRole on resource:arn:aws:iam::<account-id>:role/<rolename>...`  
如果是，请检查您是否已在所有策略中将 *<account-id>* 替换为有效的 Amazon 账号。

**另请参阅：**  
[Lake Formation 中的蓝图和工作流](workflows-about.md)

# 运行工作流
<a name="workflows-running"></a>

您可以使用 Lake Formation 控制台、Amazon Glue 控制台、Amazon Glue 命令行界面 (Amazon CLI) 或 API 运行工作流。

**运行工作流（Lake Formation 控制台）**

1. 通过 [https://console.aws.amazon.com/lakeformation/](https://console.amazonaws.cn/lakeformation/) 打开 Amazon Lake Formation 控制台。以数据湖管理员或具有数据工程师权限的用户身份登录。有关更多信息，请参阅[Lake Formation 角色和 IAM 权限参考](permissions-reference.md)。

1. 在导航窗格中，选择**蓝图**。

1. 在**蓝图**页面上，选择工作流。然后，在**操作**菜单上，选择**开始**。

1. 当工作流运行时，在**上次运行状态**列中查看其进度。时不时地选择刷新按钮。

   状态从**正在运行**依次变为**正在发现**、**正在导入**和**已完成**。

   工作流完成后：
   + 数据目录中将含有新的元数据表。
   + 您的数据已被摄取到数据湖中。

   如果工作流失败，请执行以下操作：

   1. 选择工作流。选择**操作**，然后选择**查看图表**。

      该工作流将在 Amazon Glue 控制台中打开。

   1. 确保已选择工作流，然后选择**历史记录**选项卡。

   1. 在**历史记录**下，选择最近的运行，然后选择**查看运行详细信息**。

   1. 在动态（运行时）图表中选择失败的作业或爬网程序，然后查看错误消息。失败的节点为红色或黄色。

**另请参阅：**  
[Lake Formation 中的蓝图和工作流](workflows-about.md)