

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

# 在 Lake Formation 中从 JDBC 来源创建数据湖
<a name="getting-started-tutorial-jdbc"></a>

本教程将指导您完成在 AWS Lake Formation 控制台上使用 Lake Formation 从 JDBC 源创建和加载第一个数据湖的步骤。

**Topics**
+ [目标受众](#tut-personas)
+ [JDBC 教程的先决条件](#tut-prereqs)
+ [第 1 步：创建数据分析师用户](#tut-create-lf-user)
+ [第 2 步：在 AWS Glue 中创建连接](#tut-connection)
+ [第 3 步：为数据湖创建 Amazon S3 存储桶](#tut-create-bucket)
+ [第 4 步：注册 Amazon S3 路径](#tut-register)
+ [第 5 步：授予数据位置权限](#tut-data-location)
+ [第 6 步：在数据目录中创建数据库](#tut-create-db)
+ [第 7 步：授予数据权限](#tut-grant-data-permissions)
+ [第 8 步：使用蓝图创建工作流](#tut-create-workflow)
+ [第 9 步：运行工作流](#tut-run-workflow)
+ [第 10 步：授予对表的选择权限](#tut-grant-select)
+ [步骤 11：使用查询数据湖 Amazon Athena](#tut-query-athena)
+ [第 12 步：使用 Amazon Redshift Spectrum 查询数据湖中的数据](#tut-query-redshift)
+ [第 13 步：使用 Amazon Redshift Spectrum 授予或撤销 Lake Formation 权限](#getting-started-tutorial-grant-revoke-redshift)

## 目标受众
<a name="tut-personas"></a>

下表列出了本 [AWS Lake Formation JDBC 教程](#getting-started-tutorial-jdbc)中使用的角色。


|  角色 | 说明 | 
| --- | --- | 
| IAM 管理员 | 可以创建 AWS Identity and Access Management (IAM) 用户和角色以及亚马逊简单存储服务 (Amazon S3) 存储桶的用户。有AdministratorAccess AWS 托管策略。 | 
| 数据湖管理员 | 可以访问数据目录、创建数据库以及向其他用户授予 Lake Formation 权限的用户。拥有的 IAM 权限比 IAM 管理员少，但足以管理数据湖。 | 
| 数据分析人员 | 可以对数据湖运行查询的用户。拥有的权限仅足以运行查询。 | 
| 工作流角色 | 具有运行工作流所需的 IAM 策略的角色。 | 

有关完成教程的先决条件的信息，请参阅[JDBC 教程的先决条件](#tut-prereqs)。

## JDBC 教程的先决条件
<a name="tut-prereqs"></a>

在开始学习 [AWS Lake Formation JDBC 教程](#getting-started-tutorial-jdbc)之前，请确保您已完成以下操作：
+ 完成[Lake Formation 入门](getting-started-setup.md)中所述的任务。
+ 确定要在本教程中使用的可访问 JDBC 的数据存储。
+ 收集创建 JDBC 类型的 AWS Glue 连接所需的信息。此数据目录对象包括数据存储的 URL 和登录凭证，如果数据存储是在 Amazon Virtual Private Cloud (Amazon VPC) 中创建的，则还包括其他特定于 VPC 的配置信息。有关更多信息，请参阅《AWS Glue 开发人员指南》中的[在 AWS Glue 数据目录中定义连接](https://docs.aws.amazon.com/glue/latest/dg/populate-add-connection.html)**。

本教程假设您熟悉 AWS Identity and Access Management (IAM)。有关 IAM 的信息，请参阅 [IAM 用户指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)。

要开始，请执行[第 1 步：创建数据分析师用户](#tut-create-lf-user)操作。

## 第 1 步：创建数据分析师用户
<a name="tut-create-lf-user"></a>

在此步骤中，您将创建一个 AWS Identity and Access Management (IAM) 用户作为数据湖的数据分析师 AWS Lake Formation。

此用户拥有查询数据湖所需的一组最低权限。

1. 使用 [https://console.aws.amazon.com/iam](https://console.aws.amazon.com/iam) 打开 IAM 控制台。以您在中创建的管理员用户[创建具有管理访问权限的用户](getting-started-setup.md#create-an-admin)或使用`AdministratorAccess` AWS 托管策略的用户身份登录。

1. 使用以下设置创建名为 `datalake_user` 的用户：
   + 启用 AWS 管理控制台 访问权限。
   + 设置密码，不需要重置密码。
   + 附加`AmazonAthenaFullAccess` AWS 托管策略。
   + 附加下面的内联策略。将该策略命名为 `DatalakeUserBasic`。

     ```
     {
         "Version": "2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                     "lakeformation:GetDataAccess",
                     "glue:GetTable",
                     "glue:GetTables",
                     "glue:SearchTables",
                     "glue:GetDatabase",
                     "glue:GetDatabases",
                     "glue:GetPartitions",
                     "lakeformation:GetResourceLFTags",
                     "lakeformation:ListLFTags",
                     "lakeformation:GetLFTag",
                     "lakeformation:SearchTablesByLFTags",
                     "lakeformation:SearchDatabasesByLFTags"                
                ],
                 "Resource": "*"
             }
         ]
     }
     ```

## 第 2 步：在 AWS Glue 中创建连接
<a name="tut-connection"></a>

**注意**  
如果您已经与 JDBC 数据来源建立了 AWS Glue 连接，请跳过这一步。

AWS Lake Formation *通过连接访问 JDBC 数据源。AWS Glue*连接是数据目录对象，其中包含连接到数据来源所需的所有信息。您可以使用 AWS Glue 控制台创建连接。

**创建连接**

1. 在 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 中打开 AWS Glue 控制台，并以您在[创建具有管理访问权限的用户](getting-started-setup.md#create-an-admin)中创建的管理员用户身份登录。

1. 在导航窗格的 **Data catalog (数据目录)** 下，选择 **Connections (连接)**。

1. 在**连接器**页面上，选择**创建连接器**。

1. 在**选择数据来源**页面上，选择 **JDBC** 作为连接类型。然后选择**下一步**。

1. 继续运行连接向导并保存连接。

   有关创建连接的信息，请参阅《AWS Glue 开发人员指南》中的 [AWS Glue JDBC 连接属性](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html#connection-properties-jdbc)**。

## 第 3 步：为数据湖创建 Amazon S3 存储桶
<a name="tut-create-bucket"></a>

在这一步，您要创建 Amazon Simple Storage Service (Amazon S3) 存储桶作为数据湖的根位置。

1. 打开 Amazon S3 控制台，[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)并以您在中创建的管理员用户身份登录[创建具有管理访问权限的用户](getting-started-setup.md#create-an-admin)。

1. 选择 C **reate bucket**，然后通过向导创建名为的存储桶`{{<yourName>}}-datalake-tutorial`，其中{{<yourName>}}是您的名字缩写和姓氏。例如：`jdoe-datalake-tutorial`。

   有关创建 Amazon S3 存储桶的详细说明，请参阅《Amazon Simple Storage Service 用户指南》中的[如何创建 S3 存储桶？](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)**。

## 第 4 步：注册 Amazon S3 路径
<a name="tut-register"></a>

在这一步，您要创建 Amazon Simple Storage Service (Amazon S3) 路径作为数据湖的根位置。

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。以数据湖管理员身份登录。

1. 在导航窗格的**管理**下，选择**数据湖位置**。

1. 选择**注册位置**，然后选择**浏览**。

1. 选择您之前创建的 `{{<yourName>}}-datalake-tutorial` 存储桶，接受默认 IAM 角色 `AWSServiceRoleForLakeFormationDataAccess`，然后选择**注册位置**。

   有关注册位置的更多信息，请参阅[向数据湖添加 Amazon S3 位置](register-data-lake.md)。

## 第 5 步：授予数据位置权限
<a name="tut-data-location"></a>

主体必须拥有对数据湖位置的*数据位置权限*，才能创建指向该位置的数据目录表或数据库。您必须向 IAM 角色授予对工作流的数据位置权限，这样工作流才能向数据摄取目标写入数据。

1. 在 Lake Formation 控制台的导航窗格中，在**权限**下选择**数据位置**。

1. 选择**授权**，然后在**授予权限**对话框中执行以下操作：

   1. 对于 **IAM 用户和角色**，请选择 `LakeFormationWorkflowRole`。

   1. 对于**存储位置**，选择您的 `{{<yourName>}}-datalake-tutorial` 存储桶。

1. 选择**授权**。

有关数据位置权限的更多信息，请参阅[Underlying data access control](access-control-underlying-data.md#data-location-permissions)。

## 第 6 步：在数据目录中创建数据库
<a name="tut-create-db"></a>

Lake Formation 数据目录中的元数据表存储在数据库中。

1. 在 Lake Formation 控制台的导航窗格中，在**数据目录**下选择**数据库**。

1. 选择**创建数据库**，然后在**数据库详细信息**下输入名称 `lakeformation_tutorial`。

1. 将其他字段留空，然后选择**创建数据库**。

## 第 7 步：授予数据权限
<a name="tut-grant-data-permissions"></a>

您必须授予在数据目录中创建元数据表的权限。由于工作流与角色 `LakeFormationWorkflowRole` 一起运行，因此您必须向该角色授予这些权限。

1. 在 Lake Formation 控制台的导航窗格中，在**权限**下选择**数据湖权限**。

1. 选择**授权**，然后在**授予数据权限**对话框中执行以下操作：

   1. 在**主体**下，对于 **IAM 用户和角色**，选择 `LakeFormationWorkflowRole`。

   1. 在 **LF 标签或目录资源**下，选择**命名数据目录资源**。

   1. 对于**数据库**，请选择您之前创建的数据库 `lakeformation_tutorial`。

   1. 在**数据库权限**下，选择**创建表**、**更改**和**放弃**，如果已选中 **Super**，请将其清除。

1. 选择**授权**。

有关授予 Lake Formation 权限的更多信息，请参阅[Lake Formation 权限概述](lf-permissions-overview.md)。

## 第 8 步：使用蓝图创建工作流
<a name="tut-create-workflow"></a>

该 AWS Lake Formation 工作流程会生成AWS Glue任务、爬网程序和触发器，用于发现数据并将其摄取到您的数据湖中。您可以基于其中一个预定义的 Lake Formation 蓝图创建工作流。

1. 在 Lake Formation 控制台的导航窗格中，选择**蓝图**，然后选择**使用蓝图**。

1. 在**使用蓝图**页面的**蓝图类型**下，选择**数据库快照**。

1. 在**导入源**下的**数据库连接**中，选择您刚刚创建的连接 `datalake-tutorial`，或者为您的数据来源选择一个现有连接。

1. 对于**源数据路径**，以 `{{<database>}}/{{<schema>}}/{{<table>}}` 形式输入从中摄取数据的路径。

   您可以用百分比 (%) 字符替换架构或表。对于支持架构的数据库，请输入{{<schema>}}/{{<database>}}/% 以匹配其中的所有表。{{<schema>}} {{<database>}}Oracle 数据库和 MySQL 不支持路径中的架构；而是输入 {{<database>}} /%。对于 Oracle 数据库，{{<database>}}是系统标识符 (SID)。

   例如，如果 Oracle 数据库的 SID 为 `orcl`，则输入 `orcl/%` 以匹配在 JDCB 连接中指定的用户有权访问的所有表。
**重要**  
此字段区分大小写。

1. 在**导入目标**下，指定以下参数：    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/getting-started-tutorial-jdbc.html)

1. 对于导入频率，选择**按需运行**。

1. 在**导入选项**下，指定以下参数：    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/getting-started-tutorial-jdbc.html)

1. 选择**创建**，然后等待控制台报告已成功创建工作流。
**提示**  
您是否收到了以下错误消息？  
`User: arn:aws:iam::{{<account-id>}}:user/{{<datalake_administrator_user>}} is not authorized to perform: iam:PassRole on resource:arn:aws:iam::{{<account-id>}}:role/LakeFormationWorkflowRole...`  
如果是，请检查您是否将数据湖管理员用户的内联策略替换{{<account-id>}}为有效的 AWS 账号。

## 第 9 步：运行工作流
<a name="tut-run-workflow"></a>

由于您指定了工作流程 run-on-demand，因此必须在中手动启动工作流程 AWS Lake Formation。

1. 在 Lake Formation 控制台的**蓝图**页面上，选择工作流 `lakeformationjdbctest`。

1. 选择**操作**，然后选择**启动**。

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

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

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

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

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

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

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

   1. 选择最近的运行，然后选择**查看运行详细信息**。

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

## 第 10 步：授予对表的选择权限
<a name="tut-grant-select"></a>

您必须授予中新数据目录表的`SELECT`权限， AWS Lake Formation 这样数据分析师才能查询这些表所指向的数据。

**注意**  
工作流会自动向运行它的用户授予对它创建的表的 `SELECT` 权限。由于数据湖管理员运行了该工作流，因此您必须向数据分析师授予 `SELECT`。

1. 在 Lake Formation 控制台的导航窗格中，在**权限**下选择**数据湖权限**。

1. 选择**授权**，然后在**授予数据权限**对话框中执行以下操作：

   1. 在**主体**下，对于 **IAM 用户和角色**，选择 `datalake_user`。

   1. 在 **LF 标签或目录资源**下，选择**命名数据目录资源**。

   1. 对于**数据库**，选择 `lakeformation_tutorial`。

      **表**列表即会填充。

   1. 对于**表**，从数据来源中选择一个或多个表。

   1. 在**表和列权限** 下，选择**选择**。

1. 选择**授权**。

**以数据分析师的身份执行下一步。**

## 步骤 11：使用查询数据湖 Amazon Athena
<a name="tut-query-athena"></a>

使用 Amazon Athena 控制台查询数据湖中的数据。

1. 打开 Athena 控制台，并[https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home)以数据分析师用户身份登录。`datalake_user`

1. 如有必要，请选择**开始使用**以继续使用 Athena 查询编辑器。

1. 对于 **Data source (数据源)**，选择 **AwsDataCatalog**。

1. 对于 **Database (数据库)**，请选择 `lakeformation_tutorial`。

   **表**列表即会填充。

1. 在其中一个表旁边的弹出菜单中，选择**预览表**。

   查询即会运行并显示 10 行数据。

## 第 12 步：使用 Amazon Redshift Spectrum 查询数据湖中的数据
<a name="tut-query-redshift"></a>

您可以设置 Amazon Redshift Spectrum 以查询您导入到 Amazon Simple Storage Service (Amazon S3) 数据湖中的数据。首先，创建一个 AWS Identity and Access Management (IAM) 角色，该角色用于启动 Amazon Redshift 集群和查询 Amazon S3 数据。然后，向该角色授予对您要查询的表的 `Select` 权限。然后，授予该用户使用 Amazon Redshift 查询编辑器的权限。最后，创建一个 Amazon Redshift 集群并运行查询。

您要以管理员身份创建集群，并以数据分析师的身份查询集群。

有关 Amazon Redshift Spectrum 的更多信息，请参阅《Amazon Redshift 数据库开发人员指南》中的[使用 Amazon Redshift Spectrum 查询外部数据](https://docs.aws.amazon.com/redshift/latest/dg/c-using-spectrum.html)**。

**设置运行 Amazon Redshift 查询的权限**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。以您在中创建的管理员用户[创建具有管理访问权限的用户](getting-started-setup.md#create-an-admin)（用户名`Administrator`）或使用`AdministratorAccess` AWS 托管策略的用户身份登录。

1. 在导航窗格中，选择**策略**。

   如果这是您首次选择 **Policies**，则会显示 **Welcome to Managed Policies** 页面。选择**开始使用**。

1. 选择**创建策略**。

1. 选择 **JSON** 选项卡。

1. 粘贴以下 JSON 策略文档。

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "lakeformation:GetDataAccess",
                   "glue:GetTable",
                   "glue:GetTables",
                   "glue:SearchTables",
                   "glue:GetDatabase",
                   "glue:GetDatabases",
                   "glue:GetPartitions",
                   "lakeformation:GetResourceLFTags",
                   "lakeformation:ListLFTags",
                   "lakeformation:GetLFTag",
                   "lakeformation:SearchTablesByLFTags",
                   "lakeformation:SearchDatabasesByLFTags"                
              ],
               "Resource": "*"
           }
       ]
   }
   ```

1. 完成后，选择**审核**对策略进行审核。策略验证程序将报告任何语法错误。

1. 在**查看策略**页面上，输入 **RedshiftLakeFormationPolicy** 作为您要创建的策略的**名称**。输入**描述**（可选）。查看策略**摘要**以查看您的策略授予的权限。然后，选择**创建策略**以保存您的工作。

1. 在 IAM 控制台的导航窗格中，选择**角色**，然后选择**创建角色**。

1. 对于**选择可信实体**，选择 **AWS 服务**。

1. 选择 Amazon Redshift 服务来代入此角色。

1. 为您的服务选择 **Redshift Customizable (Redshift 可自定义)**。然后选择 **Next: Permissions (下一步：权限)**。

1. 搜索刚创建的策略 `RedshiftLakeFormationPolicy`，然后在列表中选中该策略名称旁边的复选框。

1. 选择**下一步：标签**。

1. 选择**下一步：审核**。

1. 对于**角色名称**，输入名称 **RedshiftLakeFormationRole**。

1. （可选）对于 **Role description (角色描述)**，输入新角色的描述。

1. 检查该角色，然后选择**创建角色**。

**授予对 Lake Formation 数据库中要查询的表的 `Select` 权限**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。以数据湖管理员身份登录。

1. 在导航窗格的**权限**下，选择**数据湖权限**，然后选择**授权**。

1. 提供以下信息：
   + 对于 **IAM 用户和角色**，选择您创建的 IAM 角色 `RedshiftLakeFormationRole`。运行 Amazon Redshift 查询编辑器时，它使用此 IAM 角色来获取数据权限。
   + 对于 **Database (数据库)**，请选择 `lakeformation_tutorial`。

     表列表即会填充。
   + 对于**表**，选择数据来源中要查询的表。
   + 选择**选择**表权限。

1. 选择**授权**。

**设置 Amazon Redshift Spectrum 并运行查询**

1. 通过以下网址打开 Amazon Redshift 控制台：[https://console.aws.amazon.com/redshift](https://console.aws.amazon.com/redshift)。以用户 `Administrator` 的身份登录。

1. 选择**创建集群**。

1. 在**创建集群**页面上，输入 `redshift-lakeformation-demo` 作为**集群标识符**。

1. 对于**节点类型**，选择 **dc2.large**。

1. 向下滚动，在**数据库配置**下输入或接受以下参数：
   + **管理用户名称**：`awsuser`
   + **管理用户密码**：`({{Choose a password}})`

1. 展开**集群权限**，对于**可用的 IAM 角色**，选择**RedshiftLakeFormationRole**。然后选择 **Add IAM role (添加 IAM 角色)**。

1. 如果您必须使用的端口与默认值 5439 不同，请关闭**其他配置**旁边的**使用默认值**选项。展开**数据库配置**部分，然后输入新的**数据库端口号**。

1. 选择**创建集群**。

   **集群**页面即会加载。

1. 等待到集群状态变为**可用**。定期选择刷新图标。

1. 向数据分析师授予对集群运行查询的权限。为此，请完成以下步骤。

   1. 在打开 IAM 控制台 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)，然后以`Administrator`用户身份登录。

   1. 在导航窗格中，选择**用户**，然后选择将以下托管策略附加到用户 `datalake_user`。
      + `AmazonRedshiftQueryEditor`
      + `AmazonRedshiftReadOnlyAccess` 

1. 退出 Amazon Redshift 控制台，然后以用户 `datalake_user` 身份重新登录。

1. 在左侧垂直工具栏中，选择**编辑器**图标以打开查询编辑器并连接到集群。如果**连接到数据库**对话框出现，请选择集群名称 `redshift-lakeformation-demo`，然后输入数据库名称 **dev**、用户名 **awsuser** 和您创建的密码。然后，选择 **Connect to database (连接到数据库)**。
**注意**  
如果系统没有提示您输入连接参数，并且已经在查询编辑器中选择了另一个集群，请选择**更改连接**打开**连接到数据库**对话框。

1. 在**新查询 1** 文本框中，输入并运行以下语句以将 Lake Formation 中的数据库 `lakeformation_tutorial` 映射到 Amazon Redshift 架构名称 `redshift_jdbc`：
**重要**  
{{<account-id>}}替换为有效的 AWS 账号{{<region>}}和有效的 AWS 地区名称（例如，`us-east-1`）。

   ```
   create external schema if not exists redshift_jdbc from DATA CATALOG database 'lakeformation_tutorial' iam_role 'arn:aws:iam::{{<account-id>}}:role/RedshiftLakeFormationRole' region '{{<region>}}';
   ```

1. 在**选择架构**下的架构列表中，选择 **redshift\_jdbc**。

   表列表即会填充。查询编辑器仅显示您被授予了对其的 Lake Formation 数据湖权限的表。

1. 在表名称旁边的弹出菜单中，选择**预览数据**。

   Amazon Redshift 将返回前 10 行。

   现在，您可对您对其拥有权限的表和列运行查询。

## 第 13 步：使用 Amazon Redshift Spectrum 授予或撤销 Lake Formation 权限
<a name="getting-started-tutorial-grant-revoke-redshift"></a>

Amazon Redshift 支持使用修改后的 SQL 语句授予和撤销对数据库和表的 Lake Formation 权限。这些语句与现有的 Amazon Redshift 语句相似。有关更多信息，请参阅《Amazon Redshift 数据库开发人员指南》中的[授权](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html)和[撤销](https://docs.aws.amazon.com/redshift/latest/dg/r_REVOKE.html)**。