使用受管表 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用受管表

为了帮助确保事务安全可靠,Athena 支持使用 Amazon Lake Formation 受管表的读取操作。安全功能有助于确保您的用户只能访问他们有权访问的基于 Amazon S3 的数据湖中的数据。ACID 功能有助于确保查询在面对基础数据的复杂更改时可靠。

使用 Lake Formation 数据筛选,通过在列、行和单元格级别授予权限来保护 Amazon S3 数据湖中的表。当 Athena 用户查询您的数据时,将强制执行这些权限。这种精细的控制级别意味着,您可以授予用户对敏感信息的访问权限,而无需使用会阻碍他们分析的粗粒度屏蔽功能。

Amazon Lake Formation 中的受管表提供以下功能:

  • ACID 事务 – 使用 ACID(原子、一致、隔离和持久)事务读取和写入 Amazon S3 数据湖中的多个表。您可以提交或取消事务,或者如果 Lake Formation 发现错误也会取消事务。在 Athena 中,受管表的查询是只读的。

  • 时间旅行和版本旅行查询 – 每个受管表都维护其包含的 Amazon S3 对象的版本控制清单。清单的早期版本可用于时间旅行和版本旅行查询。您可以在 Athena 中执行时间旅行查询,以在 Amazon S3 中查询截至指定日期和时间的历史数据。您可以在 Athena 中执行版本旅行查询,以在 Amazon S3 中查询截至指定版本快照 ID 的历史数据。

  • 强制执行行级权限 – 您可以授予对表的 SELECT 权限并提供谓词,例如 region=us-west-1year=2019。仅返回谓词为 true 的表行。Lake Formation 中还为非受管表提供行级权限。有关更多信息,请参阅《Amazon Lake Formation 开发人员指南》中的 Lake Formation 中的数据筛选和单元格级安全性

  • 强制执行单元格级权限 – 单元格级安全性是行级安全性的一种特殊情况,它增加了在同一策略中指定列和行的功能。

  • 强制执行列级权限 – 您可以使用 Amazon Lake Formation 列级权限来限制对表中特定列的访问。Lake Formation 中还为非受管表提供列级权限。有关更多信息,请参阅《Amazon Lake Formation 开发人员指南》中的 Lake Formation 中的数据筛选和单元格级安全性

  • 目录事务 – Athena 支持使用事务语义对受管表进行创建、删除和架构更新。当架构更改向前兼容时,您可以使用此架构发展支持跨架构或分区更改进行查询。要查询不向前兼容的早期架构,请使用时间旅行查询。

  • 自动数据压缩 – 为了提高性能,Lake Formation 自动将受管表中的小型 Amazon S3 对象压缩为更大的对象。

  • 谓词下推 – SQL 查询的谓词部分可以“推送”到更接近数据所在的位置。这种优化可以通过更早地(而不是更晚)筛选掉数据来大大缩短查询处理时间。

有关受管表的更多信息,请参阅《Amazon Lake Formation 开发人员指南》中的管理受管表

注意事项和限制

Athena 中对 Lake Formation 受管表的支持具有以下限制:

  • 仅读取和创建受管表操作 – 仅支持读取和创建受管表操作。Athena 不支持对 Lake Formation 受管表进行删除、插入和更新操作。

  • 自动压缩 – 无法通过 Athena 管理 Lake Formation 自动压缩功能。

  • 需要 GetQueryStatistics 权限 – Athena 用户必须在 IAM 中添加 lakeformation:GetQueryStatistics 权限。

  • 查询空数据集上的某些嵌套列时出错 – 目前,在空数据集上查询表单 Array<Struct<Array<data_type>>> 的列会出现错误 GENERIC_INTERNAL_ERROR: Exception while processing column(GENERIC_INTERNAL_ERROR:处理列时出现异常)

  • 视图 – 您不能将视图与受管表结合使用。

开始使用

要开始在 Athena 中使用 Lake Formation 受管表,请执行以下步骤:

  • 创建受管表 – 要从 Athena 控制台创建受管表,请在您的 CREATE TABLE 语句中指定表属性 'table_type'='LAKEFORMATION_GOVERNED'。您还可以使用 Amazon Lake Formation 控制台、Amazon Glue API 或 Amazon Command Line Interface (Amazon CLI) 创建一个或多个受管表。

    有关更多信息,请参阅《Amazon Lake Formation 开发人员指南》中的创建受管表。要在查询 Amazon S3 对象之前注册它们,请在事务中调用 Lake Formation UpdateTableObjects 操作。