Amazon Lake Formation 的已知问题 - Amazon Lake Formation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon Lake Formation 的已知问题

查看 Amazon Lake Formation 的以下已知问题。

对表元数据筛选的限制

Amazon Lake Formation 列级权限可用于限制对表中特定列的访问。当用户使用控制台或 API(如 glue:GetTable)检索有关表的元数据时,表对象中的列列表仅包含他们有权访问的字段。请务必要了解这种元数据筛选的相关限制。

尽管 Lake Formation 为集成服务提供了有关列权限的元数据,但实际筛选查询响应中的列是相关集成服务的责任。支持列级筛选的 Lake Formation 客户端(包括 Amazon Athena、Amazon Redshift Spectrum 和 Amazon EMR)根据向 Lake Formation 注册的列权限筛选数据。用户将无法读取他们不应访问的任何数据。目前,Amazon Glue ETL 不支持列筛选。

注意

EMR 集群并非完全由 Amazon 管理。因此,EMR 管理员有责任妥善保护集群,以避免未经授权的数据访问。

某些应用程序或格式可能会将其他元数据(包括列名和类型)作为表属性存储在 Parameters 映射中。这些属性将未经修改返回,并且可由对任何列具有 SELECT 权限的任何用户访问。

例如,Avro Serde 将表架构的 JSON 表示形式存储在名为 avro.schema.literal 的表属性中,该属性可供有权访问该表的所有用户使用。建议避免在表属性中存储敏感信息,并注意用户可以了解 Avro 格式表的完整架构。此限制特定于表的元数据。

如果调用方对表中的所有列没有 SELECT 权限,则 Amazon Lake Formation 在响应 glue:GetTable 或类似请求时会删除任何以 spark.sql.sources.schema 开头的表属性。这样可以防止用户访问有关使用 Apache Spark 创建的表的其他元数据。在 Amazon EMR 上运行时,Apache Spark 应用程序仍然可以读取这些表,但可能不会应用某些优化,并且不支持区分大小写的列名。如果用户有权访问表中的所有列,则 Lake Formation 将返回未修改的表以及所有表属性。

重命名排除列时出现问题

如果使用列级权限排除列,然后重命名该列,则该列将不再被排除在查询之外,例如 SELECT *

删除 CSV 表中的列时出现问题

如果您使用 CSV 格式创建数据目录表,然后从架构中删除列,则查询可能会返回错误数据,并且可能无法遵守列级权限。

解决方法:改为创建新表。

必须在公共路径下添加表分区

Lake Formation 期望表的所有分区都位于表的位置字段中设置的公共路径下。当您使用爬网程序将分区添加到目录时,这会无缝工作。但是,如果手动添加分区,并且这些分区不在父表中设置的位置下,则无法访问数据。

在工作流创建期间创建数据库时出现问题

使用 Lake Formation 控制台从蓝图创建工作流时,您可以创建目标数据库(如果该数据库不存在)。执行此操作时,登录的用户将获得对所创建数据库的 CREATE_TABLE 权限。但是,工作流生成的爬网程序在尝试创建表时会承担工作流的角色。由于该角色不具有对数据库的 CREATE_TABLE 权限,因此此操作会失败。

解决方法:如果您在工作流设置期间通过控制台创建数据库,则在运行工作流之前,必须向与工作流关联的角色授予对刚刚创建的数据库的 CREATE_TABLE 权限。

删除然后重新创建用户时出现问题

以下情况会导致 lakeformation:ListPermissions 返回错误的 Lake Formation 权限:

  1. 创建用户并授予 Lake Formation 权限。

  2. 删除用户。

  3. 重新创建具有相同名称的用户。

ListPermissions 返回两个条目,一个用于旧用户,一个用于新用户。如果您尝试撤销授予旧用户的权限,则系统会撤消新用户的权限。

GetTablesSearchTables API 不会更新 IsRegisteredWithLakeFormation 参数的值

存在一个已知限制,即数据目录 API 操作(如 GetTablesSearchTables)不会更新 IsRegisteredWithLakeFormation parameter的值,并返回默认值 false。建议使用 GetTable API 查看 IsRegisteredWithLakeFormation parameter的正确值。

数据目录 API 操作不会更新 IsRegisteredWithLakeFormation 参数的值

存在一个已知限制,即数据目录 API 操作(如 GetTablesSearchTables)不会更新 IsRegisteredWithLakeFormation 参数的值,并返回默认值 false。建议使用 GetTable API 查看 IsRegisteredWithLakeFormation 参数的正确值。

Lake Formation 操作不支持 Amazon Glue 架构注册表

Lake Formation 操作不支持在 StorageDescriptor 中包含 SchemaReference 的 Amazon Glue 表,以便在架构注册表中使用。