教程:S3 表类数据存储服务入门 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

教程:S3 表类数据存储服务入门

在本教程中,您将创建一个表存储桶,并将您区域中的表存储桶与 Amazon 分析服务集成。接下来,您将使用 Amazon CLI 在表存储桶中创建第一个命名空间和表。然后,您可以使用 Amazon Lake Formation 授予对表的权限,这样您就可以开始使用 Athena 查询表了。

提示

如果您要将表格数据从通用存储桶迁移到表存储桶,Amazon 解决方案库提供了指导性解决方案来为您提供助力。此解决方案通过将 Amazon Step Functions 和 Amazon EMR 与 Apache Spark 结合使用,自动将在 Amazon Glue Data Catalog 中注册并存储在通用存储桶中的 Apache Iceberg 和 Apache Hive 表移到表存储桶。有关更多信息,请参阅 Amazon 解决方案库中的将表格数据从 Amazon S3 迁移到 S3 表的指南

步骤 1:创建表存储桶并将其与 Amazon 分析服务集成

在此步骤中,您使用 Amazon S3 控制台来创建第一个表存储桶。有关创建表存储桶的其它方法,请参阅 Creating a table bucket

注意

默认情况下,Amazon S3 控制台会自动将表存储桶与 Amazon SageMaker 智能湖仓集成,从而支持 Amazon 分析服务自动发现和访问您的 S3 表类数据存储服务数据。如果您使用 Amazon Command Line Interface(Amazon CLI)、Amazon SDK 或 REST API 以编程方式创建第一个表存储桶,则必须手动完成 Amazon 分析服务集成。有关更多信息,请参阅 将 Amazon S3 表类数据存储服务与 Amazon 分析服务结合使用

  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在页面顶部的导航栏中,选择当前所显示 Amazon Web Services 区域的名称。接下来,选择要在其中创建表存储桶的区域。

  3. 在左侧导航窗格中,选择表存储桶

  4. 选择创建表存储桶

  5. 常规配置下,输入表存储桶的名称。

    表存储桶名称必须满足以下要求:

    • 在当前区域中对于您的 Amazon Web Services 账户是唯一的。

    • 长度必须介于 3 到 63 个字符之间。

    • 只能由小写字母、数字和连字符 (-) 组成。

    • 以字母或数字开头和结尾。

    创建表存储桶后,便无法更改其名称。创建表存储桶的 Amazon Web Services 账户拥有该存储桶。有关命名表存储桶的更多信息,请参阅表存储桶命名规则

  6. 与 Amazon 分析服务集成部分中,确保选中启用集成复选框。

    如果在使用控制台创建第一个表存储桶时选择了启用集成,则 Amazon S3 会尝试将表存储桶与 Amazon 分析服务集成。这种集成可让您使用 Amazon 分析服务来访问当前区域中的所有表。有关更多信息,请参阅 将 Amazon S3 表类数据存储服务与 Amazon 分析服务结合使用

  7. 选择 创建存储桶

步骤 2:创建表命名空间和表

对于此步骤,可以在表存储桶中创建一个命名空间,然后在该命名空间下创建一个新表。可以使用控制台或 Amazon CLI 创建表命名空间和表。

重要

创建表时,请确保在表名称和表定义中全部使用小写字母。例如,请确保列名称全部为小写。如果表名称或表定义包含大写字母,则 Amazon Lake Formation 或 Amazon Glue Data Catalog 不支持该表。在这种情况下,Amazon Athena 等 Amazon 分析服务将无法看到您的表,即使表存储桶与 Amazon 分析服务集成,也不例外。

如果表定义包含大写字母,则在 Athena 中运行 SELECT 查询时会收到以下错误消息:“GENERIC_INTERNAL_ERROR: Get table request failed: com.amazonaws.services.glue.model.ValidationException: Unsupported Federation Resource - Invalid table or column names.”

以下过程使用 Amazon S3 控制台通过 Amazon Athena 来创建命名空间和表。

创建表命名空间和表
  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在左侧导航窗格中,选择表存储桶

  3. 表存储桶页面上,选择要在其中创建表的表存储桶。

  4. 在表存储桶详细信息页面上,选择使用 Athena 创建表

  5. 使用 Athena 创建表对话框中,选择创建命名空间,然后在命名空间名称字段中输入名称。命名空间名称必须为 1 到 255 个字符,并且在表存储桶中是唯一的。有效字符为 a–z、0–9 和下划线 (_)。命名空间名称的开头不支持使用下划线。

  6. 选择 Create namespace (创建命名空间)

  7. 选择使用 Athena 创建表

  8. Amazon Athena 控制台将打开,并出现 Athena 查询编辑器。查询编辑器中填充了一个可用于创建表的示例查询。修改此查询,以指定您希望表具有的表名称和列。

  9. 修改完查询后,选择运行来创建表。

如果表创建取得成功,则新表的名称将显示在 Athena 中的表列表中。当您导航回 Amazon S3 控制台时,刷新列表后,新表将出现在表存储桶的详细信息页面上的列表中。

要使用以下 Amazon CLI 示例命令在表存储桶中创建命名空间,然后在该命名空间下使用架构创建新表,请将 user input placeholder 值替换为您自己的值。

先决条件
  1. 通过运行以下命令,在表存储桶中创建新的命名空间:

    aws s3tables create-namespace \ --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket \ --namespace my_namespace
    1. 通过运行以下命令,确认您的命名空间已成功创建:

      aws s3tables list-namespaces \ --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket
  2. 通过运行以下命令,使用表架构创建新表:

    aws s3tables create-table --cli-input-json file://mytabledefinition.json

    对于 mytabledefinition.json 文件,请使用以下示例表定义:

    { "tableBucketARN": "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket", "namespace": "my_namespace", "name": "my_table", "format": "ICEBERG", "metadata": { "iceberg": { "schema": { "fields": [ {"name": "id", "type": "int","required": true}, {"name": "name", "type": "string"}, {"name": "value", "type": "int"} ] } } } }

(可选)步骤 3:授予对表的 Lake Formation 权限

对于此步骤,请向其它 IAM 主体授予对新表的 Lake Formation 权限。这些权限可让除您之外的其它主体使用 Athena 和其它 Amazon 分析服务来访问表存储桶资源。有关更多信息,请参阅 授予对表或数据库的权限。如果您是唯一将访问表的用户,则可以跳过此步骤。

  1. 打开 Amazon Lake Formation 控制台(网址为 https://console.amazonaws.cn/lakeformation/),并以数据湖管理员身份登录。有关如何创建数据湖管理员的更多信息,请参阅 Create a data lake administrator

  2. 在导航窗格中,选择数据权限,然后选择授予

  3. 授予权限页面的主体下,选择 IAM 用户和角色,然后选择您要支持对表运行查询的 IAM 用户或角色。

  4. LF 标签或目录资源下,选择命名 Data Catalog 资源

  5. 根据您是要授予对账户中所有表的访问权限,还是只想授予对您创建的表存储桶中资源的访问权限,执行以下操作之一:

    • 对于目录,选择您在集成表存储桶时创建的账户级目录。例如 111122223333:s3tablescatalog

    • 对于目录,为表存储桶选择子目录。例如 111122223333:s3tablescatalog/amzn-s3-demo-table-bucket

  6. (可选)如果您为表存储桶选择了子目录,请执行以下一项或两项操作:

    • 对于数据库,选择您创建的表存储桶命名空间。

    • 对于,请选择您在表存储桶中创建的表,或选择所有表

  7. 根据您选择的是目录还是子目录,以及随后选择的是数据库还是表,您可以在目录级别、数据库级别或表级别设置权限。有关 Lake Formation 权限的更多信息,请参阅《Amazon Lake Formation Developer Guide》中的 Managing Lake Formation permissions

    请执行以下操作之一:

    • 对于目录权限,请选择 Super 来向另一个主体授予对目录的所有权限,或者选择更精细的权限,例如描述

    • 对于数据库权限,您不能选择 Super 来向另一个主体授予对数据库的所有权限。而是应选择更精细的权限,例如描述

    • 对于表权限,请选择 Super 来向另一个主体授予对表的所有权限,或者选择更精细的权限,例如选择描述

      注意

      当您将对数据目录资源的 Lake Formation 权限授予外部账户或直接授予其他账户中的 IAM 主体时,Lake Formation 会使用 Amazon Resource Access Manager (Amazon RAM) 服务共享该资源。如果被授权者账户与授予者账户在同一个组织中,则被授权者立即可以使用共享资源。如果被授权者账户不在同一个组织中,则 Amazon RAM 会向被授权者账户发送邀请,以便其接受或拒绝资源授权。然后,要使共享资源可用,被授权者账户中的数据湖管理员必须使用 Amazon RAM 控制台或 Amazon CLI 接受邀请。有关跨账户数据共享的更多信息,请参阅《Amazon Lake Formation Developer Guide》中的 Cross-account data sharing in Lake Formation

  8. 选择授权

步骤 4:在 Athena 中使用 SQL 查询数据

可以在 Athena 中使用 SQL 查询表。Athena 对于 S3 表类数据存储服务支持数据定义语言(DDL)、数据操作语言(DML)和数据查询语言(DQL)查询。

您可以从 Amazon S3 控制台或通过 Amazon Athena 控制台访问 Athena 查询。

以下过程使用 Amazon S3 控制台访问 Athena 查询编辑器,以便您可以使用 Amazon Athena 查询表。

查询表
  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在左侧导航窗格中,选择表存储桶

  3. 表存储桶页面上,选择包含要查询的表的表存储桶。

  4. 在表存储桶详细信息页面上,选择要查询的表名称旁边的选项按钮。

  5. 选择使用 Athena 查询表

  6. Amazon Athena 控制台打开,Athena 查询编辑器随即出现,其中包含为您加载的示例 SELECT 查询。根据您的用例需要修改此查询。

  7. 要运行查询,请选择 Run(运行)。

查询表
  1. https://console.aws.amazon.com/athena/ 打开 Athena 控制台。

  2. 查询表。下面是您可以修改的示例查询。确保将 user input placeholders 替换为您自己的信息。

    SELECT * FROM "s3tablescatalog/amzn-s3-demo-table-bucket"."my_namespace"."my_table" LIMIT 10
  3. 要运行查询,请选择 Run(运行)。