

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

# 在 Lake Formation 中为开放表存储格式设置权限
<a name="otf-tutorial"></a>

AWS Lake Formation 支持管理*开放表格格式* (OTFs) 的访问权限，例如 [Apache Iceberg、Apache](https://iceberg.apache.org/) [Hudi 和 [Linux](https://delta.io/) 基金会 Delt](https://hudi.incubator.apache.org/) a Lake。在本教程中，你将学习如何使用符号链接[清单](https://docs.delta.io/latest/presto-integration.html)表创建 Iceberg、Hudi 和 Delta Lake，如何 AWS Glue Data Catalog 使用 Lake Formation 设置精细权限 AWS Glue，以及如何使用 Amazon Athena 查询数据。

**注意**  
AWS 分析服务不支持所有交易表格式。有关更多信息，请参阅 [使用其他 AWS 服务](working-with-services.md)。本教程介绍如何仅使用 AWS Glue 作业在数据目录中手动创建新数据库和表。

本教程包含用于快速设置的 AWS CloudFormation 模板。您可以查看和自定义该模板来满足自己的需求。

**Topics**
+ [目标受众](#tut-otf-roles)
+ [先决条件](#tut-otf-prereqs)
+ [第 1 步：调配资源](#set-up-otf-resources)
+ [第 2 步：为 Iceberg 表设置权限](#set-up-iceberg-table)
+ [第 3 步：为 Hudi 表设置权限](#set-up-hudi-table)
+ [第 4 步：为 Delta Lake 表设置权限](#set-up-delta-table)
+ [步骤 5：清理 AWS 资源](#otf-tut-clean-up)

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

本教程适用于 IAM 管理员、数据湖管理员和业务分析师。下表列出了本教程中使用 Lake Formation 创建受管控表时所使用的角色。


|  角色 | 说明 | 
| --- | --- | 
| IAM 管理员 | 可以创建 IAM 用户和角色以及 Amazon S3 存储桶的用户。有AdministratorAccess AWS 托管策略。 | 
| 数据湖管理员 | 可以访问数据目录、创建数据库以及向其他用户授予 Lake Formation 权限的用户。拥有的 IAM 权限比 IAM 管理员少，但足以管理数据湖。 | 
| 业务分析师 | 可以对数据湖运行查询的用户。拥有运行查询的权限。 | 

## 先决条件
<a name="tut-otf-prereqs"></a>

在开始本教程之前，您必须拥有一个 AWS 账户 可以以具有正确权限的用户身份登录的。有关更多信息，请参阅[注册获取 AWS 账户](getting-started-setup.md#sign-up-for-aws)和[创建具有管理访问权限的用户](getting-started-setup.md#create-an-admin)。

本教程假定您熟悉 IAM 角色和策略。有关 IAM 的信息，请参阅 [IAM 用户指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)。

 您需要设置以下 AWS 资源才能完成本教程：
+ 数据湖管理员用户
+ Lake Formation 数据湖设置
+ Amazon Athena 引擎版本 3

**创建数据湖管理员**

1. 以管理员用户身份登录 Lake For [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)mation 控制台。在本教程中，您将在美国东部（弗吉尼亚州北部）区域创建资源。

1. 在 Lake Formation 控制台上的导航窗格中，在**权限**下选择**管理角色和任务**。

1. 在**数据湖管理员**下选择**数据湖管理员**。

1.  在弹出窗口**管理数据湖管理员**中，在 **IAM 用户和角色**下，选择 **IAM 管理用户**。

1. 选择**保存**。

**启用数据湖设置**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。在导航窗格中的**数据目录**下，选择**设置**。取消选中以下选项：
   + 仅对新数据库使用 IAM 访问控制。
   + 仅对新数据库中的新表使用 IAM 访问控制。

1. 在**跨账户版本设置**下，选择**版本 3** 作为跨账户版本。

1. 选择**保存**。

**将 Amazon Athena 引擎升级到版本 3**

1. 打开 Athena 控制台，网址为。[https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home)

1. 选择**工作组**，然后选择主工作组。

1. 确保工作组的最低版本为 3。如果不是，请编辑工作组，为**升级查询引擎**选择**手动**，然后选择版本 3。

1. 选择**保存更改**。

## 第 1 步：调配资源
<a name="set-up-otf-resources"></a>

本节介绍如何使用 CloudFormation 模板设置 AWS 资源。

**使用 CloudFormation 模板创建资源**

1. 在美国东部（弗吉尼亚北部）地区以 IAM 管理员身份登录 AWS CloudFormation 控制台，网址为 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 选择[启动堆栈](https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?templateURL=https://lf-public.s3.amazonaws.com/cfn/lfotfsetup.template)。

1. 在**创建堆栈**屏幕上，选择**下一步**。

1. 输入**堆栈名称**。

1. 选择**下一步**。

1. 在下一页上，选择**下一步**。

1. 查看最后一页上的详细信息，然后选择**我确认这 AWS CloudFormation 可能会创建 IAM 资源。**

1. 选择**创建**。

   堆栈创建过程可能需要几分钟时间才能完成。

启动 Cloud Formation 堆栈可创建以下资源：
+ lf-otf-datalake-123456789012 — 用于存储数据的亚马逊 S3 存储桶
**注意**  
Amazon S3 存储桶名称中附加的账户 ID 将由您的账户 ID 替换。
+ lf-otf-tutorial-123456789012 — 用于存储查询结果和任务脚本的 Amazon S3 存储桶 AWS Glue 
+ lficebergdb — 冰山数据库 AWS Glue 
+ lfhudidb — Hudi 数据库 AWS Glue 
+ lfdeltadb — 增量数据库 AWS Glue 
+ native-iceberg-create — 在数据目录中创建 Iceberg 表的作 AWS Glue 业
+ native-hudi-create — 在数据目录中创建 Hudi 表的作 AWS Glue 业
+ native-delta-create — 在数据目录中创建增量表的作 AWS Glue 业
+ LF-OTF-GlueServiceRole — 您传递 AWS Glue 给运行任务的 IAM 角色。此角色附加了访问数据目录、Amazon S3 存储桶等资源所需的策略。
+ LF-OTF-RegisterRole — IAM 角色向 Lake Formation 注册亚马逊 S3 地点。此角色已附加 `LF-Data-Lake-Storage-Policy`。
+ lf-consumer-analystuser — IAM 用户使用 Athena 查询数据
+ lf-consumer-analystuser-credentials — 存储在中的数据分析师用户的密码 AWS Secrets Manager

创建完堆栈后，导航至输出选项卡并记下以下各项的值：
+ AthenaQueryResultLocation — Athena 查询输出的亚马逊 S3 位置
+ BusinessAnalystUserCredentials — 数据分析师用户的密码

  检索密码值：

  1. 通过导航到 Secrets Manager 控制台来选择 `lf-consumer-analystuser-credentials` 值。

  1. 在**密钥值**部分中，选择**检索密钥值**。

  1. 记下密码的值。

## 第 2 步：为 Iceberg 表设置权限
<a name="set-up-iceberg-table"></a>

在本节中，您将学习如何在中创建 Iceberg 表 AWS Glue Data Catalog、在中设置数据权限以及如何使用 Amazon Athena 查询数据。 AWS Lake Formation

**创建 Iceberg 表**

在此步骤中，您将运行一个在数据目录中创建 Iceberg 事务表的 AWS Glue 作业。

1. 以数据湖管理员用户身份在美国东部（弗吉尼亚北部）区域打开AWS Glue控制台。[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)

1. 从左侧导航窗格中选择**作业**。

1. 选择 `native-iceberg-create`。  
![该图像是控制台中 AWS Glue 作业页面的屏幕截图。](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/otf-glu-job-tut.png)

1. 在**操作**下，选择**编辑作业**。

1. 在 “**Job det** ail ** AWS Glue Data Catalog s” 下，展开 “**高级属性**”，然后选中 “用作 Hive 元数据仓**” 旁边的复选框，将表元数据添加到中。 AWS Glue Data Catalog这将指定 AWS Glue Data Catalog 为作业中使用的数据目录资源的元数据库，并允许稍后对目录资源应用 Lake Formation 权限。

1. 选择**保存**。

1. 选择**运行**。您可以查看运行中作业的状态。

   有关 AWS Glue 作业的更多信息，请参阅《*AWS Glue 开发人员指南》*中的[在 AWS Glue 控制台上处理作](https://docs.aws.amazon.com/glue/latest/dg/console-jobs.html)业。

    此作业将在 `lficebergdb` 数据库中创建名为 `product` 的 Iceberg 表。在 Lake Formation 控制台中验证 Product 表。

**在 Lake Formation 中注册数据位置**

接下来，将 Amazon S3 路径注册为数据湖的位置。

1. 以数据湖管理员用户身份打开 La [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)ke Formation 控制台。

1. 在导航窗格中的**注册和提取**下，选择**数据位置**。

1. 在控制台右上角，选择**注册位置**。

1. 在**注册位置**页面上，输入以下内容：
   +  **Amazon S3 路径** – 选择**浏览**，然后选择 `lf-otf-datalake-123456789012`。单击 Amazon S3 根位置旁边的右箭头 (>) 以导航到 `s3/buckets/lf-otf-datalake-123456789012/transactionaldata/native-iceberg` 位置。
   + **IAM 角色** — 选择 `LF-OTF-RegisterRole` 作为 IAM 角色。
   + 选择**注册位置**。  
![此图片是控制台中 Lake Formation 注册位置页面的屏幕截图。](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/otf-register-location-tut.png)

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

**授予对 Iceberg 表的 Lake Formation 权限**

在这一步，我们将向业务分析师用户授予数据湖权限。

1. 在**数据湖权限**下，选择**授权**。

1. 在**授予数据权限**屏幕上，选择 **IAM 用户和角色**。

1. 从下拉列表中选择 `lf-consumer-analystuser`。  
![此图片是控制台中 Lake Formation 权限页面的屏幕截图。](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/otf-lf-perm-role-tut.png)

1. 选择**命名数据目录资源**。

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

1. 对于**表**，选择 `product`。  
![此图片是控制台中 Lake Formation 权限页面的屏幕截图。](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/otf-db-tbl-perm-tut.png)

1. 接下来，您可以通过指定列来授予基于列的访问权限。

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

   1. 在**数据权限**下，选择**基于列的访问权限**，然后选择**包括列**。

   1. 依次选择列 `product_name`、`price` 和 `category`。

   1. 选择**授权**。  
![此图片是控制台中 Lake Formation 权限页面的屏幕截图。](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/otf-column-perm-tut.png)

**使用 Athena 查询 Iceberg 表**

 现在，您可以开始使用 Athena 查询您创建的 Iceberg 表。如果您是首次在 Athena 中运行查询，则需要配置查询结果位置。有关更多信息，请参阅[指定查询结果位置](https://docs.aws.amazon.com/athena/latest/ug/querying.html#query-results-specify-location)。

1. 以数据湖管理员用户身份登录，然后使用 CloudFormation 输出中前面注明的密码以美国东部（弗吉尼亚北部）区域的身份登录。`lf-consumer-analystuser`

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 打开 Athena 控制台。

1. 选择**设置**，然后选择**管理**。

1. 在**查询结果的位置**框中，输入您在 CloudFormation 输出中创建的存储桶的路径。**复制 `AthenaQueryResultLocation` (s3://lf-otf-tutorial-123456789012/athena-results/) 的值并选择 “保存”。**

1. 运行以下查询以预览存储在 Iceberg 表中的 10 条记录：

   ```
   select * from lficebergdb.product limit 10;
   ```

   有关使用 Athena 查询 Iceberg 表的更多信息，请参阅《Amazon Athena 用户指南》中的[查询 Iceberg 表](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-table-data.html)**。

## 第 3 步：为 Hudi 表设置权限
<a name="set-up-hudi-table"></a>

在本节中，您将学习如何在中创建 Hudi 表 AWS Glue Data Catalog、在中设置数据权限以及如何使用 Amazon Athena 查询数据。 AWS Lake Formation

**创建 Hudi 表**

在此步骤中，您将运行一个在数据 AWS Glue 目录中创建 Hudi 事务表的作业。

1. 在美国东部（弗吉尼亚北部）区域登录AWS Glue主机 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)

    。

1. 从左侧导航窗格中选择**作业**。

1. 选择 `native-hudi-create`。

1. 在**操作**下，选择**编辑作业**。

1. 在 “**Job det** ail ** AWS Glue Data Catalog s” 下，展开 “**高级属性**”，然后选中 “用作 Hive 元数据仓**” 旁边的复选框，将表元数据添加到中。 AWS Glue Data Catalog这将指定 AWS Glue Data Catalog 为作业中使用的数据目录资源的元数据库，并允许稍后对目录资源应用 Lake Formation 权限。

1. 选择**保存**。

1. 选择**运行**。您可以查看运行中作业的状态。

   有关 AWS Glue 作业的更多信息，请参阅《*AWS Glue 开发人员指南》*中的[在 AWS Glue 控制台上处理作](https://docs.aws.amazon.com/glue/latest/dg/console-jobs.html)业。

    此作业在 database:lfhudidb 中创建 Hudi(cow) 表。在 Lake Formation 控制台中验证 `product` 表。

**在 Lake Formation 中注册数据位置**

接下来，将 Amazon S3 路径注册为数据湖的根位置。

1. 以数据湖管理员用户身份登录 Lake [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)Formation 控制台。

1. 在导航窗格中的**注册和提取**下，选择**数据位置**。

1. 在控制台右上角，选择**注册位置**。

1. 在**注册位置**页面上，输入以下内容：
   +  **Amazon S3 路径** – 选择**浏览**，然后选择 `lf-otf-datalake-123456789012`。单击 Amazon S3 根位置旁边的右箭头 (>) 以导航到 `s3/buckets/lf-otf-datalake-123456789012/transactionaldata/native-hudi` 位置。
   + **IAM 角色** — 选择 `LF-OTF-RegisterRole` 作为 IAM 角色。
   + 选择**注册位置**。

**授予对 Hudi 表的数据湖权限**

在这一步，我们将向业务分析师用户授予数据湖权限。

1. 在**数据湖权限**下，选择**授权**。

1. 在**授予数据权限**屏幕上，选择 **IAM 用户和角色**。

1. 从下拉列表中选择 `lf-consumer-analystuser`。

1. 选择**命名数据目录资源**。

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

1. 对于**表**，选择 `product`。

1. 接下来，您可以通过指定列来授予基于列的访问权限。

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

   1. 在**数据权限**下，选择**基于列的访问权限**，然后选择**包括列**。

   1. 依次选择列 `product_name`、`price` 和 `category`。

   1. 选择**授权**。

**使用 Athena 查询 Hudi 表**

 现在开始使用 Athena 查询您创建的 Hudi 表。如果您是首次在 Athena 中运行查询，则需要配置查询结果位置。有关更多信息，请参阅[指定查询结果位置](https://docs.aws.amazon.com/athena/latest/ug/querying.html#query-results-specify-location)。

1. 以数据湖管理员用户身份登录，然后使用 CloudFormation 输出中前面注明的密码以美国东部（弗吉尼亚北部）区域的身份登录。`lf-consumer-analystuser`

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 打开 Athena 控制台。

1. 选择**设置**，然后选择**管理**。

1. 在**查询结果的位置**框中，输入您在 CloudFormation 输出中创建的存储桶的路径。**复制 `AthenaQueryResultLocation` (s3://lf-otf-tutorial-123456789012/athena-results/) 的值并保存。**

1. 运行以下查询以预览存储在 Hudi 表中的 10 条记录：

   ```
   select * from lfhudidb.product limit 10;
   ```

   有关查询 Hudi 表的更多信息，请参阅《Amazon Athena 用户指南》中的[查询 Hudi 表](https://docs.aws.amazon.com/athena/latest/ug/querying-hudi.html)一节**。

## 第 4 步：为 Delta Lake 表设置权限
<a name="set-up-delta-table"></a>

在本节中，您将学习如何使用符号链接清单文件创建三角洲湖表 AWS Glue Data Catalog，在中设置数据权限 AWS Lake Formation 以及如何使用 Amazon Athena 查询数据。

**创建 Delta Lake 表**

在此步骤中，您将运行一项在数据目录中创建 Delta Lake 事务表的 AWS Glue 作业。

1. 在美国东部（弗吉尼亚北部）区域登录AWS Glue主机 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)

    。

1. 从左侧导航窗格中选择**作业**。

1. 选择 `native-delta-create`。

1. 在**操作**下，选择**编辑作业**。

1. 在 “**Job det** ail ** AWS Glue Data Catalog s” 下，展开 “**高级属性**”，然后选中 “用作 Hive 元数据仓**” 旁边的复选框，将表元数据添加到中。 AWS Glue Data Catalog这将指定 AWS Glue Data Catalog 为作业中使用的数据目录资源的元数据库，并允许稍后对目录资源应用 Lake Formation 权限。

1. 选择**保存**。

1. 在**操作**下选择**运行**。

    此作业将在 `lfdeltadb` 数据库中创建名为 `product` 的 Delta Lake 表。在 Lake Formation 控制台中验证 `product` 表。

**在 Lake Formation 中注册数据位置**

接下来，将 Amazon S3 路径注册为数据湖的根位置。

1. 在数据湖管理员用户处打开 Lake [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)Formation 控制台。

1. 在导航窗格中的**注册和提取**下，选择**数据位置**。

1. 在控制台右上角，选择**注册位置**。

1. 在**注册位置**页面上，输入以下内容：
   +  **Amazon S3 路径** – 选择**浏览**，然后选择 `lf-otf-datalake-123456789012`。单击 Amazon S3 根位置旁边的右箭头 (>) 以导航到 `s3/buckets/lf-otf-datalake-123456789012/transactionaldata/native-delta` 位置。
   + **IAM 角色** — 选择 `LF-OTF-RegisterRole` 作为 IAM 角色。
   + 选择**注册位置**。

**授予对 Delta Lake 表的数据湖权限**

在这一步，我们将向业务分析师用户授予数据湖权限。

1. 在**数据湖权限**下，选择**授权**。

1. 在**授予数据权限**屏幕上，选择 **IAM 用户和角色**。

1. 从下拉列表中选择 `lf-consumer-analystuser`。

1. 选择**命名数据目录资源**。

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

1. 对于**表**，选择 `product`。

1. 接下来，您可以通过指定列来授予基于列的访问权限。

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

   1. 在**数据权限**下，选择**基于列的访问权限**，然后选择**包括列**。

   1. 依次选择列 `product_name`、`price` 和 `category`。

   1. 选择**授权**。

**使用 Athena 查询 Delta Lake 表**

 现在开始使用 Athena 查询您创建的 Delta Lake 表。如果您是首次在 Athena 中运行查询，则需要配置查询结果位置。有关更多信息，请参阅[指定查询结果位置](https://docs.aws.amazon.com/athena/latest/ug/querying.html#query-results-specify-location)。

1. 以数据湖管理员用户身份注销，然后使用 CloudFormation 输出`BusinessAnalystUser`中前面注明的密码以美国东部（弗吉尼亚北部）区域的身份登录。

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 打开 Athena 控制台。

1. 选择**设置**，然后选择**管理**。

1. 在**查询结果的位置**框中，输入您在 CloudFormation 输出中创建的存储桶的路径。**复制 `AthenaQueryResultLocation` (s3://lf-otf-tutorial-123456789012/athena-results/) 的值并保存。**

1. 运行以下查询来预览存储在 Delta Lake 表中的 10 条记录：

   ```
   select * from lfdeltadb.product limit 10;
   ```

   有关查询 Delta Lake 表的更多信息，请参阅《Amazon Athena 用户指南》中的[查询 Delta Lake 表](https://docs.aws.amazon.com/athena/latest/ug/delta-lake-tables.html)一节**。

## 步骤 5：清理 AWS 资源
<a name="otf-tut-clean-up"></a>

**清理资源**

为防止向你收取不必要的费用 AWS 账户，请删除你在本教程中使用的 AWS 资源。

1. 以 IAM 管理员的身份登录 CloudFormation 控制台，网址为 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. [删除 Cloud Formation 堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)。您创建的表将自动与堆栈一起被删除。