选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

使用 Glue 数据目录视图 - Amazon EMR

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

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

使用 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。以下是几个例子。

Using 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 ] AS view-sql
Using the AWS CLI
注意

使用 CLI 命令时,不会解析用于创建视图的 SQL。这可能会导致视图已创建但查询不成功的情况。在创建视图之前,请务必测试您的 SQL 语法。

您可以使用以下 CLI 命令来创建视图:

aws glue create-table --cli-input-json '{ "DatabaseName": "database", "TableInput": { "Name": "view", "StorageDescriptor": { "Columns": [ { "Name": "col1", "Type": "data-type" }, ... { "Name": "colN", "Type": "data-type" } ], "SerdeInfo": {} }, "ViewDefinition": { "SubObjects": [ "arn:aws:glue:aws-region:aws-account-id:table/database/referenced-table1", ... "arn:aws:glue:aws-region:aws-account-id:table/database/referenced-tableN", ], "IsProtected": true, "Representations": [ { "Dialect": "SPARK", "DialectVersion": "1.0", "ViewOriginalText": "Spark-SQL", "ViewExpandedText": "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 ] AS view-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。

  • 不能在数据目录视图中引用其他视图。

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。