使用受管表
为了帮助确保事务安全可靠,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-1和year=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操作。