在 Athena 中注册 S3 表存储桶目录 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在 Athena 中注册 S3 表存储桶目录

Amazon S3 表存储桶是 Amazon S3 中的一种存储桶类型,专门用于存储 Apache Iceberg 表中的表格数据。表存储桶可自动执行压缩、快照管理和垃圾回收等表管理任务,从而持续优化查询性能并尽可能降低成本。无论您是刚开始使用,还是已经在 Iceberg 环境中拥有数千个表,表存储桶都能简化任意规模的数据湖。有关更多信息,请参阅 Table Buckets

注意事项和限制

  • 不支持 CREATE TABLE、CREATE TABLE AS SELECT、CREATE VIEW 等 DDL 操作。

  • 支持 SELECT、INSERT、UPDATE、DELETE 和 MERGE 等读写操作。

  • Athena 不支持在 S3 表存储桶中执行 CREATE TABLE 操作,因此必须使用其他引擎(例如 EMR 上的 Spark)或使用 S3 表 API 执行初始设置。

  • 不支持重复使用查询结果。

  • 如果在使用 CLI Invalid choice: 's3tables' 时遇到错误,请务必升级到最新的 Amazon CLI 版本。

从 Athena 查询 S3 表存储桶之前需要完成的设置

从 Athena 查询 S3 表存储桶之前,请完成以下前提步骤
  1. 创建一个 S3 表存储桶。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的 Creating a table bucket

  2. 创建一个表命名空间。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的 Create a namespace

  3. 按照 Creating an Amazon S3 table 中的步骤创建一个 S3 表。

  4. 务必要按照《Amazon Simple Storage Service 用户指南》中 Prerequisites for integrationIntegrating table buckets with Amazon analytics services 部分的说明,将表存储桶与 Amazon Glue Data Catalog 和 Amazon Lake Formation 成功集成。

    注意

    如果您在步骤 1 中从 S3 控制台创建 S3 表存储桶时启用了集成,则可跳过此步骤。

  5. 对于要用于从 Athena 提交查询的用户/角色,请通过 Lake Formation 控制台或 CLI 授予 Lake Formation 对 S3 表的权限。

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

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

    3. 授予权限页面的主体下,选择要用于从 Athena 提交查询的主体。

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

    5. 对于目录,请选择您通过集成表存储桶创建的 Glue 数据目录。例如,<accoundID>:s3tablescatalog/amzn-s3-demo-bucket

    6. 对于数据库,选择您创建的 S3 表命名空间。Athena 将 S3 表命名空间作为数据库使用。

    7. 对于,请选择您在 S3 表存储桶中创建的 S3 表。

    8. 对于表权限,选择超级

    9. 选择授权

    CLI
    1. 务必要以数据湖管理员身份运行 Amazon CLI 命令。有关更多信息,请参阅 Create a data lake administrator

    2. 运行以下命令授予 Lake Formation 对 S3 表的权限,以允许该用户/角色从 Athena 提交查询。

      aws lakeformation grant-permissions \ --region <region e.g. us-east-1> \ --cli-input-json \ '{ "Principal": { "DataLakePrincipalIdentifier": "<user or role ARN e.g. arn:aws:iam::<Account ID>:role/ExampleRole>" }, "Resource": { "Table": { "CatalogId": "<Account ID>:s3tablescatalog/amzn-s3-demo-bucket", "DatabaseName": "<S3 table namespace e.g. test_namespace>", "Name": "<S3 table name e.g. test_table>" } }, "Permissions": [ "ALL" ] }'
  6. 使用上述获得授权的用户/角色从 Athena 提交查询。在此示例中,s3tablescatalog 是通过集成创建的父级 Glue 数据目录, s3tablescatalog/amzn-s3-demo-bucket 是为每个 S3 表存储桶创建的子 Glue 数据目录。查询的方法有两种。

    • 直接将子 Glue 目录 (s3tablescatalog/amzn-s3-demo-bucket) 指定为目录。您可以通过控制台或 Amazon CLI 执行此操作。

      Console
      • https://console.aws.amazon.com/athena/ 打开 Athena 控制台。

      • 在查询编辑器中,输入类似于 SELECT * FROM "s3tablescatalog/amzn-s3-demo-bucket"."test_namespace"."test_table" LIMIT 10 的查询。

      CLI

      运行以下命令。

      aws athena start-query-execution \ --query-string 'SELECT * FROM "s3tablescatalog/amzn-s3-demo-bucket"."test_namespace"."test_table" LIMIT 10' \ --work-group "primary"
    • 通过 Athena 控制台从子 Glue 数据目录创建 Athena 数据目录,并在查询中将其指定为目录。有关更多信息,请参阅 通过 Athena 控制台注册 S3 表存储桶目录

通过 Athena 控制台注册 S3 表存储桶目录

要通过 Athena 控制台注册 S3 表存储桶目录,请执行以下步骤。

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

  2. 在导航窗格中,选择数据来源和目录

  3. 数据来源和目录页面上,选择创建数据来源

  4. 选择数据来源中,选择 Amazon S3 - Amazon Glue Data Catalog

  5. Amazon Glue Data Catalog 部分中,对于数据来源账户,选择此账户中的 Amazon Glue Data Catalog

  6. 对于创建表或注册目录,请选择注册新 Amazon Glue 目录

  7. 数据来源详细信息部分中,对于数据来源名称,请输入用于在 SQL 查询中指定数据来源的名称,或者使用生成的默认名称。

  8. 对于目录,选择浏览来搜索同一账户中的 Amazon Glue 目录列表。如果您看不到任何现有的目录,请通过 Amazon Glue 控制台创建一个。

  9. 浏览 Amazon Glue 目录对话框中,选择要使用的目录,然后选中选择

  10. (可选)对于标签,输入要与该数据来源关联的键值对。

  11. 选择下一步

  12. 检查并创建页面上,验证输入的信息是否正确,然后选择创建数据来源