本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Glue 数据目录视图
您可以在 AWS Glue 数据目录中创建和管理视图,以便与 EMR Serverless 配合使用。这些视图通常被称为 AWS Glue 数据目录视图。这些视图之所以有用,是因为它们支持多个 SQL 查询引擎,因此您可以跨不同的 AWS 服务(例如 EMR Serverless 和 Amazon Redshift)访问相同的视图。 Amazon Athena
通过在数据目录中创建视图,您可以在中使用资源授予和基于标签的访问控制 AWS Lake Formation 来授予对视图的访问权限。使用这种访问控制方法,您无需为创建视图时引用的表配置其他访问权限。这种授予权限的方法称为定义者语义,这些视图称为定义者视图。有关 Lake Formation 中访问控制的更多信息,请参阅《Lake Formation 开发者指南》中的授予和撤消数据目录资源的权限。 AWS
数据目录视图对于以下用例非常实用:
精细访问控制-您可以创建一个视图,根据用户所需的权限限制数据访问权限。例如,您可以使用 Data Catalog 中的视图来防止不在 HR 部门工作的员工查看个人身份信息 (PII)。
完整视图定义-通过对数据目录中的视图应用筛选器,可以确保数据目录中视图中可用的数据记录始终完整。
增强安全性-用于创建视图的查询定义必须完整。此优势意味着数据目录中的视图不易受到恶意行为者的 SQL 命令的影响。
简单共享数据-无需移动数据即可与其他 AWS 账户共享数据。有关更多信息,请参阅 Lake Formation 中的跨账户数据共享。
创建 Data Catalog 视图
创建数据目录视图有不同的方法。其中包括使用 AWS CLI 或 Spark SQL。以下是几个例子。
下面显示了创建数据目录视图的语法。注意MULTI DIALECT
视图类型。这将数据目录视图与其他视图区分开来。SECURITY
谓词指定为。DEFINER
这表示带有DEFINER
语义的数据目录视图。
CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW [IF NOT EXISTS] view_name
[(column_name [COMMENT column_comment], ...) ]
[ COMMENT view_comment ]
[TBLPROPERTIES (property_name = property_value, ... )]
SECURITY DEFINER
AS query;
以下是语CREATE
句示例,其语法如下:
CREATE PROTECTED MULTI DIALECT VIEW catalog_view
SECURITY DEFINER
AS
SELECT order_date, sum(totalprice) AS price
FROM source_table
GROUP BY order_date
您也可以使用 SQL 在试运行模式下创建视图,以测试视图的创建,而无需实际创建资源。使用此选项会导致 “试运行”,该试运行可以验证输入,如果验证成功,则返回将代表视图的 Glue AWS 表对象的 JSON。在这种情况下,不会创建实际视图。
CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW
view_name
SECURITY DEFINER [ SHOW VIEW JSON ] ASview-sql
支持的视图操作
以下命令片段向您展示了使用数据目录视图的各种方法:
创建视图
创建数据目录视图。以下是演示如何根据现有表创建视图的示例:
CREATE PROTECTED MULTI DIALECT VIEW catalog_view SECURITY DEFINER AS SELECT * FROM my_catalog.my_database.source_table
更改视图
可用语法:
ALTER VIEW view_name [FORCE] ADD DIALECT AS query
ALTER VIEW view_name [FORCE] UPDATE DIALECT AS query
ALTER VIEW view_name DROP DIALECT
您可以使用该
FORCE ADD DIALECT
选项根据新的引擎方言强制更新架构和子对象。请注意,如果您不同时使用FORCE
更新其他引擎方言,则这样做可能会导致查询错误。以下显示了一个示例:ALTER VIEW catalog_view FORCE ADD DIALECT AS SELECT order_date, sum(totalprice) AS price FROM source_table GROUP BY orderdate;
以下内容显示了如何更改视图以更新方言:
ALTER VIEW catalog_view UPDATE DIALECT AS SELECT count(*) FROM my_catalog.my_database.source_table;
描述视图
描述视图的可用语法:
SHOW COLUMNS {FROM|IN} view_name [{FROM|IN} database_name]
— 如果用户拥有描述视图所需的 AWS Glue 和 Lake Formation 权限,则他们可以列出这些列。下面显示了几个用于显示列的命令示例:SHOW COLUMNS FROM my_database.source_table; SHOW COLUMNS IN my_database.source_table;
DESCRIBE view_name
— 如果用户具有描述视图所需的 AWS Glue 和 Lake Formation 权限,则他们可以列出视图中的列及其元数据。
下拉视图
可用语法:
DROP VIEW [ IF EXISTS ] view_name
以下示例显示了一条
DROP
语句,该语句用于在删除视图之前测试视图是否存在:DROP VIEW IF EXISTS catalog_view;
显示创建视图
SHOW CREATE VIEW view_name
— 显示创建指定视图的 SQL 语句。以下是演示如何创建数据目录视图的示例:SHOW CREATE TABLE my_database.catalog_view; CREATE PROTECTED MULTI DIALECT VIEW my_catalog.my_database.catalog_view ( net_profit, customer_id, item_id, sold_date) TBLPROPERTIES ( 'transient_lastDdlTime' = '1736267222') SECURITY DEFINER AS SELECT * FROM my_database.store_sales_partitioned_lf WHERE customer_id IN (SELECT customer_id from source_table limit 10)
显示视图
列出目录中的所有视图,例如常规视图、多方言视图 (MDV) 和没有 Spark 方言的 MDV。可用语法如下:
SHOW VIEWS [{ FROM | IN } database_name] [LIKE regex_pattern]
:下面显示了显示视图的示例命令:
SHOW VIEWS IN marketing_analytics LIKE 'catalog_view*';
有关创建和配置数据目录视图的更多信息,请参阅《 AWS Lake Formation 开发人员指南》中的 B AWS uilding Glue 数据目录视图。
查询 Data Catalog 视图
创建数据目录视图后,您可以使用 IAM 角色查询该视图。IAM 角色必须对数据目录视图拥有 Lake Formation SE LECT 权限。您无需授予对视图中引用的基础表的访问权限。用于查询视图的 IAM 角色必须是 EMR 应用程序的运行时角色。你可以使用 Amazon EMR 步骤、EMR Studio 和 AI Studio 中的运行时角色从 EMR Serverless 访问视图。 SageMaker
完成所有设置后,就可以查询视图。例如,在 EMR Studio 中创建 EMR 无服务器应用程序后,您可以运行以下查询来访问视图。
SELECT * from
my_database
.catalog_view
LIMIT 10;
注意事项和限制
创建数据目录视图时,以下内容适用:
您只能使用 Amazon EMR 7.6 及更高版本创建数据目录视图。
数据目录视图定义者必须有权
SELECT
访问视图所访问的基础基表。如果特定的基表对定义者角色施加了任何 Lake Formation 筛选器,则创建数据目录视图将失败。在 Lake Formation 中,基表不得具有
IAMAllowedPrincipals
数据湖权限。如果存在,则会出现错误 “多方言视图” 只能引用没有 IAMAllowed委托人权限的表。该表的 Amazon S3 位置必须注册为 Lake Formation 数据湖位置。如果表未注册,则会出现错误 “多方言视图只能引用 Lake Formation 托管表”。有关如何在 Lake Formation 中注册亚马逊 S3 营业地点的信息,请参阅 AWS Lake Formation 开发者指南中的注册亚马逊 S3 营业地点。
只能创建
PROTECTED
数据目录视图。不支持UNPROTECTED
视图。您不能在数据目录视图定义中引用其他 AWS 账户中的表。您也不能在同一账户中引用位于不同区域的表。
要跨账户或区域共享数据,必须使用 Lake Formation 资源链接跨账户和跨区域共享整个视图。
不支持用户定义的函数 (UDFs)。
您可以使用基于 Iceberg 表的视图。还支持开放式表格格式 Apache Hudi 和 Delta Lake。
不能在数据目录视图中引用其他视图。