

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

# 创建表
<a name="creating-tables"></a>

AWS Lake Formation 元数据表包含有关数据湖中数据的信息，包括架构信息、分区信息和数据位置。这些表存储在 AWS Glue 数据目录中。您可以使用它们访问数据湖中的基础数据，并使用 Lake Formation 权限管理这些数据。表存储在数据目录的数据库中。

有以下几种方法可以创建数据目录表：
+ 在 AWS Glue 中运行爬网程序。请参阅《AWS Glue 开发人员指南》中的[定义爬网程序](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html)。**
+ 创建并运行工作流。请参阅[在 Lake Formation 中使用工作流导入数据](workflows.md)。
+ 使用 Lake Formation 控制台、AWS Glue API 或 AWS Command Line Interface （AWS CLI）手动创建表。
+ 使用创建表 Amazon Athena。
+ 创建指向外部账户中的表的资源链接。请参阅[创建资源链接](creating-resource-links.md)。

# 创建 Apache Iceberg 表
<a name="creating-iceberg-tables"></a>

 AWS Lake Formation 支持创建使用 Apache Parquet 数据格式的 Apache Iceberg 表，数据驻留在 AWS Glue Data Catalog Amazon S3 中。该数据目录中的表是表示数据存储中数据的元数据定义。默认情况下，Lake Formation 会创建 Iceberg v2 表。有关 v1 和 v2 表之间的区别，请参阅 Apache Iceberg 文档中的[格式版本更改](https://iceberg.apache.org/spec/#appendix-e-format-version-changes)。

 [Apache Iceberg](https://iceberg.apache.org/) 是适用于超大型分析数据集的开放表格式。Iceberg 允许轻松更改架构，也称为架构发展，这意味着用户可以在不破坏基础数据的情况下添加、重命名或删除数据表中的列。Iceberg 还支持数据版本控制，允许用户跟踪数据随时间的变化。这将启用时间旅行功能，该功能允许用户访问和查询数据的历史版本，并分析更新和删除之间的数据更改。

你可以使用 Lake Formation 控制台或 AWS Glue API 中的`CreateTable`操作在数据目录中创建 Iceberg 表。有关更多信息，请参阅[CreateTable 操作（Python：create\$1table](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-CreateTable)）。

在数据目录中创建 Iceberg 表时，您必须在 Amazon S3 中指定表格式和元数据文件路径，以便能够执行读取和写入操作。

 在注册 Amazon S3 数据位置时，您可以使用精细的访问控制权限使用 Lake Formation 来保护您的 Iceberg 表。 AWS Lake Formation对于亚马逊 S3 中的源数据和未在 Lake Formation 中注册的元数据，访问权限由 Amazon S3 的 IAM 权限策略和 AWS Glue 操作决定。有关更多信息，请参阅 [管理 Lake Formation 权限](managing-permissions.md)。

**注意**  
数据目录不支持创建分区和添加 Iceberg 表属性。

**Topics**
+ [先决条件](#iceberg-prerequisites)
+ [创建 Iceberg 表](#create-iceberg-table)

## 先决条件
<a name="iceberg-prerequisites"></a>

 要在数据目录中创建 Iceberg 表并设置 Lake Formation 数据访问权限，您需要完成以下要求：

1. 

**在没有向 Lake Formation 注册数据的情况下创建 Iceberg 表所需的权限。**

   除了在数据目录中创建表所需的权限外，表创建者还需要以下权限：
   + 针对资源 arn:aws:s3:::\$1bucketName\$1 的 `s3:PutObject`
   + 针对资源 arn:aws:s3:::\$1bucketName\$1 的 `s3:GetObject`
   + 针对资源 arn:aws:s3:::\$1bucketName\$1 的 `s3:DeleteObject`

1. 

**使用向 Lake Formation 注册的数据创建 Iceberg 表所需的权限：**

   要使用 Lake Formation 管理和保护数据湖中的数据，请向 Lake Formation 注册包含表数据的 Amazon S3 位置。这样，Lake Formation 就可以将证书出售给 Athena、Redshift Spectrum 和 Amazon EMR 等 AWS 分析服务机构以访问数据。有关注册 Amazon S3 位置的更多信息，请参阅[向数据湖添加 Amazon S3 位置](register-data-lake.md)。

   读取和写入向 Lake Formation 注册的基础数据的主体需要以下权限：
   + `lakeformation:GetDataAccess`
   + `DATA_LOCATION_ACCESS`

     对某个位置具有数据位置权限的主体也对所有子位置具有位置权限。

     有关数据位置权限的更多信息，请参阅[基础数据访问控制](access-control-underlying-data.md)。

 要启用压缩，该服务需要代入有权更新数据目录中的表的 IAM 角色。有关详细信息，请参阅[表优化先决条件](https://docs.aws.amazon.com/glue/latest/dg/optimization-prerequisites.html)。

## 创建 Iceberg 表
<a name="create-iceberg-table"></a>

你可以使用 Lake Formation 控制台创建 Iceberg v1 和 v2 表，也可以 AWS Command Line Interface 按照本页上的说明创建。您也可以使用 AWS Glue 控制台或 AWS Glue 爬网程序创建 Iceberg 表。有关更多信息，请参阅《 AWS Glue 开发人员指南》中的[数据目录和爬网程序](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html)。

**创建 Iceberg 表**

------
#### [ Console ]

1. 登录并打开 Lake AWS 管理控制台 Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

1. 在数据目录下，选择**表**，然后使用**创建表**按钮指定以下属性：
   + **表名称**：输入表的唯一名称。如果您使用 Athena 访问表，请使用《Amazon Athena 用户指南》中的这些[命名提示](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html)。
   + **数据库**：选择现有数据库或创建新数据库。
   + **描述**：表的描述。您可以编写描述以帮助您了解表的内容。
   + **表格式**：对于**表格式**，请选择 Apache Iceberg。  
![\[选择了 Apache Iceberg 表选项和表优化选项。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/table-optimization.png)
   + **表优化**
     + **压缩** – 此功能会合并和重写数据文件以移除过时数据，并将碎片数据合并到更大、更高效的文件中。
     + **快照保留** – 快照是带有时间戳的 Iceberg 表版本。借助快照保留配置，客户可以强制规定快照保留期限和要保留的快照数量。配置快照保留优化器可以移除不必要的旧快照及其相关底层文件，从而帮助管理存储开销。
     + **孤立文件删除** – 孤立文件是指不再被 Iceberg 表元数据引用的文件。这些文件可能会逐渐堆积，尤其是在表删除或 ETL 任务失败等操作之后。启用孤立文件删除功能可以 AWS Glue 定期识别和删除这些不必要的文件，从而释放存储空间。

     有关更多信息，请参阅[优化 Iceberg 表](https://docs.aws.amazon.com/glue/latest/dg/table-optimizers.html)。
   + **IAM 角色**：为了运行压缩，该服务会代表您代入一个 IAM 角色。您可以使用下拉列表选择一个 IAM 角色。确保该角色具有启用压缩所需的权限。

     要了解有关所需权限的更多信息，请参阅[表优化先决条件](https://docs.aws.amazon.com/glue/latest/dg/optimization-prerequisites.html)。
   + **位置**：指定 Amazon S3 中存储元数据表的文件夹的路径。Iceberg 需要数据目录中的元数据文件和位置才能执行读取和写入。
   + **架构**：选择**添加列**以添加列和列的数据类型。您可以选择创建一个空表，然后稍后更新架构。数据目录支持 Hive 数据类型。有关更多信息，请参阅 [Hive 数据类型](https://cwiki.apache.org/confluence/plugins/servlet/mobile?contentId=27838462#content/view/27838462)。

      Iceberg 允许您在创建表后演变架构和分区。您可以使用 [Athena 查询](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-evolving-table-schema.html)更新表架构，使用 [Spark 查询](https://iceberg.apache.org/docs/latest/spark-ddl/#alter-table-sql-extensions)更新分区。

------
#### [ AWS CLI ]

```
aws glue create-table \
    --database-name iceberg-db \
    --region us-west-2 \
    --open-table-format-input '{
      "IcebergInput": { 
           "MetadataOperation": "CREATE",
           "Version": "2"
         }
      }' \
    --table-input '{"Name":"test-iceberg-input-demo",
            "TableType": "EXTERNAL_TABLE",
            "StorageDescriptor":{ 
               "Columns":[ 
                   {"Name":"col1", "Type":"int"}, 
                   {"Name":"col2", "Type":"int"}, 
                   {"Name":"col3", "Type":"string"}
                ], 
               "Location":"s3://DOC_EXAMPLE_BUCKET_ICEBERG/"
            }
        }'
```

------

# 优化 Iceberg 表
<a name="data-compaction"></a>

Lake Formation 支持多种表优化选项，以增强 AWS 分析引擎和 ETL 作业使用的 Apache Iceberg 表的管理和性能。这些优化器可提高存储空间利用效率、提升查询性能，并实现有效的数据管理。Lake Formation 中提供了三种表优化器：
+ **压缩** – 数据压缩功能可压缩小数据文件，以减少存储空间使用量并提升读取性能。此功能会合并和重写数据文件以移除过时数据，并将碎片数据合并到更大、更高效的文件中。可以根据需要配置为自动运行或手动触发压缩。
+ **快照保留** – 快照是带有时间戳的 Iceberg 表版本。借助快照保留配置，客户可以强制规定快照保留期限和要保留的快照数量。配置快照保留优化器可以移除不必要的旧快照及其相关底层文件，从而帮助管理存储开销。
+ **孤立文件删除** – 孤立文件是指不再被 Iceberg 表元数据引用的文件。这些文件可能会逐渐堆积，尤其是在表删除或 ETL 任务失败等操作之后。启用孤立文件删除功能可以 AWS Glue 定期识别和删除这些不必要的文件，从而释放存储空间。

您可以使用 AWS Glue 控制台或 API 操作为数据目录中的单个 Iceberg 表启用或禁用压缩 AWS CLI、快照保留和孤立文件删除优化器。 AWS Glue 

有关更多信息，请参阅 AWS Glue 开发人员指南中的[优化 Iceberg 表](https://docs.aws.amazon.com/glue/latest/dg/table-optimizers.html)。

# 搜索表
<a name="searching-for-tables"></a>

您可以使用 AWS Lake Formation 控制台按名称、位置、包含的数据库等来搜索数据目录表。搜索结果仅显示您具有 Lake Formation 权限的表。

**搜索表（控制台）**

1. 登录 AWS 管理控制台 并打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

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

1. 将光标置于页面顶部的搜索字段中。该字段具有占位符文本“按属性查找表”。**

   此时将显示**属性**菜单，其中显示了要搜索的各种表属性。  
![\[属性菜单从搜索字段中下拉出来，其中包含以下条目：名称、分类、数据库、位置、目录 ID\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/search-for-tables.png)

1. 请执行以下操作之一：
   + 按包含的数据库进行搜索。

     1. 从**属性**菜单中选择**数据库**，然后从显示的**数据库**菜单中选择一个数据库，或者键入数据库名称并按 **Enter**。

        此时将列出您在数据库中具有权限的表。

     1. （可选）要将列表范围缩小到数据库中的单个表，请再次将光标置于搜索字段中，从**属性**菜单中选择**名称**，然后从显示的**表**菜单中选择表名称，或者键入表名称并按 **Enter**。

        此时将列出单个表，并且数据库名称和表名称都显示为搜索字段下的磁贴。  
![\[搜索字段下方有两个磁贴：一个标记为“数据库”（包含所选数据库名称），另一个标记为“表”（包含所选表名称）。磁贴的右侧是“清除筛选条件”按钮。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/search-for-tables-with-filter.png)

        要调整筛选条件，请关闭任一磁贴或选择**清除筛选条件**。
   + 按其他属性进行搜索。

     1. 从**属性**菜单中选择搜索属性。

        **要按 AWS 账户 ID 进行搜索，请从 “**属性**” 菜单中选择 “**目录 ID**”，输入有效的 AWS 账户 ID（例如 111122223333），然后按 Enter。**

        要按位置进行搜索，请从**属性**菜单中选择**位置**，然后从显示的**位置**菜单中选择一个位置。此时将返回所选位置（例如，Amazon S3）的根位置中的所有表。

**使用搜索表格 AWS CLI**
+ 以下示例说明示如何运行部分搜索。您可以使用 `--search-text` 参数搜索在元数据中包含指定文本的表。在本例中，该搜索会返回所有在名称、描述或其他元数据字段中包含“customer”的表。

  ```
  aws glue search-tables 
        --search-text "customer" 
        --region AWS 区域
        --max-results 10
        --sort-criteria "FieldName=Name,Sort=ASC"
  ```

# 跨 AWS 账户共享数据目录表和数据库
<a name="sharing-catalog-resources"></a>

通过向外部账户授予 Lake Formation 对资源的权限，您可以与外部 AWS 账户共享数据目录资源（数据库和表）。然后，用户可以运行跨多个账户联接和查询表的查询和作业。但有一些限制，当您与其他账户共享数据目录资源时，该账户中的主体可以对该资源进行操作，就像该资源位于其数据目录中一样。

您不会与外部 AWS 账户中的特定委托人共享资源，而是与账户或 AWS 组织共享资源。当您与 AWS 组织共享资源时，就是与该组织中所有级别的所有账户共享资源。然后，每个外部账户中的数据湖管理员必须向其账户中的主体授予共享资源的权限。

有关更多信息，请参阅[Lake Formation 中的跨账户数据共享](cross-account-permissions.md)和[授予对数据目录资源的权限](granting-catalog-permissions.md)。

**另请参见：**  
[访问和查看共享数据目录表和数据库](viewing-shared-resources.md)
[先决条件](cross-account-prereqs.md)