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

将 Amazon S3 表类数据存储服务与 Amazon 分析服务集成

本主题介绍将 Amazon S3 表存储桶与 Amazon 分析服务集成的先决条件和过程。有关集成工作原理的概述,请参阅 S3 表类数据存储服务集成概述

注意

此集成使用 Amazon Glue 和 Amazon Lake Formation 服务,可能会产生 Amazon Glue 请求和存储成本。有关更多信息,请参阅 Amazon Glue 定价

在 S3 表上运行查询需支付额外费用。有关更多信息,请参阅您使用的查询引擎的定价信息。

集成的先决条件

要将表存储桶与 Amazon 分析服务集成,需要满足以下先决条件:

重要

创建表时,请确保在表名称和表定义中全部使用小写字母。例如,请确保列名称全部为小写。如果表名称或表定义包含大写字母,则 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 分析服务集成

每个 Amazon 区域必须完成一次此集成。

重要

Amazon 分析服务集成现在可在 registerResource Lake Formation API 操作中使用 WithPrivilegedAccess 选项来注册 S3 表存储桶。现在,集成还会通过在 CreateCatalog Amazon Glue API 操作中使用 AllowFullTableExternalDataAccess 选项来在 Amazon Glue Data Catalog 中创建 s3tablescatalog 目录。

如果您使用预览版设置集成,则可以继续使用当前的集成。但是,更新的集成流程提供了性能改进,因此我们建议进行迁移。要迁移到更新的集成,请参阅迁移到更新的集成流程

  1. 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

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

  3. 选择创建表存储桶

    此时将打开创建表存储桶页面。

  4. 输入表存储桶名称,并确保选中启用集成复选框。

  5. 选择创建表存储桶。Amazon S3 将尝试自动在该区域中集成您的表存储桶。

首次在任何区域中集成表存储桶时,Amazon S3 都会代表您创建一个新的 IAM 服务角色。此角色可让 Lake Formation 访问您账户中的所有表存储桶,并以联合身份验证方式访问 Amazon Glue Data Catalog 中的表。

使用 Amazon CLI 集成表存储桶

以下步骤展示了如何使用 Amazon CLI 来集成表存储桶。要使用这些步骤,请将 user input placeholders 替换为您自己的信息。

  1. 创建表存储桶。

    aws s3tables create-table-bucket \ --region us-east-1 \ --name amzn-s3-demo-table-bucket
  2. 创建可让 Lake Formation 访问表资源的 IAM 服务角色。

    1. 创建一个名为 Role-Trust-Policy.json 的文件,其中包含以下信任策略:

      JSON

      使用以下命令创建 IAM 服务角色:

      aws iam create-role \ --role-name S3TablesRoleForLakeFormation \ --assume-role-policy-document file://Role-Trust-Policy.json
    2. 创建一个名为 LF-GluePolicy.json 的文件,其中包含以下策略:

      JSON
      { "Version": "2012-10-17", "Statement": [ { "Sid": "LakeFormationPermissionsForS3ListTableBucket", "Effect": "Allow", "Action": [ "s3tables:ListTableBuckets" ], "Resource": [ "*" ] }, { "Sid": "LakeFormationDataAccessPermissionsForS3TableBucket", "Effect": "Allow", "Action": [ "s3tables:CreateTableBucket", "s3tables:GetTableBucket", "s3tables:CreateNamespace", "s3tables:GetNamespace", "s3tables:ListNamespaces", "s3tables:DeleteNamespace", "s3tables:DeleteTableBucket", "s3tables:CreateTable", "s3tables:DeleteTable", "s3tables:GetTable", "s3tables:ListTables", "s3tables:RenameTable", "s3tables:UpdateTableMetadataLocation", "s3tables:GetTableMetadataLocation", "s3tables:GetTableData", "s3tables:PutTableData" ], "Resource": [ "arn:aws:s3tables:us-east-1:111122223333:bucket/*" ] } ] }

      使用以下命令将策略附加到角色:

      aws iam put-role-policy \ --role-name S3TablesRoleForLakeFormation \ --policy-name LakeFormationDataAccessPermissionsForS3TableBucket \ --policy-document file://LF-GluePolicy.json
  3. 创建一个名为 input.json 的文件,其中包含以下内容:

    { "ResourceArn": "arn:aws:s3tables:us-east-1:111122223333:bucket/*", "WithFederation": true, "RoleArn": "arn:aws:iam::111122223333:role/S3TablesRoleForLakeFormation" }

    使用以下命令在 Lake Formation 中注册表存储桶:

    aws lakeformation register-resource \ --region us-east-1 \ --with-privileged-access \ --cli-input-json file://input.json
  4. 创建一个名为 catalog.json 的文件,其中包含以下目录:

    { "Name": "s3tablescatalog", "CatalogInput": { "FederatedCatalog": { "Identifier": "arn:aws:s3tables:us-east-1:111122223333:bucket/*", "ConnectionName": "aws:s3tables" }, "CreateDatabaseDefaultPermissions":[], "CreateTableDefaultPermissions":[], "AllowFullTableExternalDataAccess": "True" } }

    使用以下命令创建 s3tablescatalog 目录。创建此目录后,将使用与表存储桶、命名空间和表对应的对象填充 Amazon Glue Data Catalog。

    aws glue create-catalog \ --region us-east-1 \ --cli-input-json file://catalog.json
  5. 使用以下命令验证是否在 Amazon Glue 中添加了 s3tablescatalog 目录:

    aws glue get-catalog --catalog-id s3tablescatalog

Amazon 分析服务集成流程已更新。如果您已使用预览版设置了集成,则可以继续使用当前的集成。但是,更新的集成流程提供了性能改进,因此我们建议使用以下步骤进行迁移。有关迁移或集成流程的更多信息,请参阅《Amazon Lake Formation Developer Guide》中的 Creating an Amazon S3 Tables catalog in the Amazon Glue Data Catalog

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

  2. 通过执行以下操作删除 s3tablescatalog 目录:

    • 在左侧导航窗格中,选择目录

    • 目录列表中,选择 s3tablescatalog 目录旁边的选项按钮。在操作 菜单上,选择删除

  3. 通过执行以下操作注销 s3tablescatalog 目录的数据位置:

    • 在左侧导航窗格中,转到管理部分,然后选择数据湖位置

    • 例如,选择 s3tablescatalog 数据湖位置(例如 s3://tables:region:account-id:bucket/*)旁边的选项按钮。

    • 操作菜单上,选择移除

    • 在出现的确认对话框中,选择移除

  4. 现在,您已经删除了 s3tablescatalog 目录和数据湖位置,可以按照以下步骤,使用更新的集成流程将表存储桶与 Amazon 分析服务集成

注意

如果您想在集成的 Amazon 分析服务中使用通过 SSE-KMS 加密的表,则您使用的角色需要拥有使用您的 Amazon KMS 密钥进行加密操作的权限。有关更多信息,请参阅 向 IAM 主体授予在集成的 Amazon 分析服务中使用加密表的权限

集成后,将向 IAM 主体授予访问表的 Lake Formation 权限,如果您想让其它 IAM 主体访问表,则需要向这些主体授予对表的 Lake Formation 权限。有关更多信息,请参阅 使用 Lake Formation 管理对表或数据库的访问权限