您可以在 AWS Glue Data Catalog 中创建和管理视图,通常称为 AWS Glue Data Catalog 视图。这些视图非常有用,因为它们支持多个 SQL 查询引擎,也支持跨不同 AWS 服务(例如 Amazon Athena、Amazon Redshift 和 AWS Glue)访问同一视图。您可以使用基于 Apache Iceberg、Apache Hudi 和 Delta Lake 的视图。
通过在 Data Catalog 中创建视图,您可以在 AWS Lake Formation 中使用资源授予和基于标记的访问控制,来授予对视图的访问权限。使用这种访问控制方法,您无需为创建视图时引用的表配置其他访问权限。这种授予权限的方法称为定义者语义,这些视图称为定义者视图。有关 AWS Lake Formation 中访问控制的更多信息,请参阅《AWS Lake Formation Developer Guide》中的 Granting and revoking permissions on Data Catalog resources。
数据目录视图对于以下用例非常实用:
-
精细访问控制:您可以创建一个视图,根据用户所需的权限来限制数据访问。例如,您可以使用 Data Catalog 中的视图来防止不在 HR 部门工作的员工查看个人身份信息(PII)。
-
完整视图定义:通过对 Data Catalog 中的视图应用某些筛选条件,可确保视图内可用的数据记录始终完整。
-
增强的安全性:用于创建视图的查询定义必须完整,使 Data Catalog 视图不易受到恶意行为者的 SQL 命令的影响。
-
简单数据共享:使用 AWS Lake Formation 中的跨账户数据共享功能,无需移动数据即可与其他 AWS 账户共享数据。
创建 Data Catalog 视图
您可以利用 AWS CLI 和使用 Spark SQL 的 AWS Glue ETL 脚本创建 Data Catalog 视图。创建 Data Catalog 视图的语法包括将视图类型指定为 MULTI DIALECT
,将 SECURITY
谓词指定为 DEFINER
,表示定义者视图。
创建 Data Catalog 视图的 SQL 语句示例:
CREATE PROTECTED MULTI DIALECT VIEW database_name.catalog_view SECURITY DEFINER
AS SELECT order_date, sum(totalprice) AS price
FROM source_table
GROUP BY order_date;
创建 Data Catalog 视图后,您可以使用对该视图拥有 AWS Lake Formation“SELECT”权限的 IAM 角色,从 Amazon Athena、Amazon Redshift 或 AWS Glue ETL 作业等服务查询该视图。您无需授予对视图中引用的基础表的访问权限。
有关创建和配置 Data Catalog 视图的更多信息,请参阅《AWS Lake Formation Developer Guide》中的 Building AWS Glue Data Catalog views。
支持的视图操作
以下命令片段展示了使用 Data Catalog 视图的各种方法:
CREATE VIEW
创建数据目录视图。以下示例演示如何根据现有表格创建视图:
CREATE PROTECTED MULTI DIALECT VIEW catalog_view
SECURITY DEFINER AS SELECT * FROM my_catalog.my_database.source_table
ALTER VIEW
可用语法:
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 DIALECTAS
SELECT order_date, sum(totalprice) AS priceFROM source_tableGROUP BY orderdate;
下例显示了如何更改视图来更新方言:
ALTER VIEW catalog_view UPDATE DIALECT AS
SELECT count(*) FROM my_catalog.my_database.source_table;
DESCRIBE VIEW
描述视图的可用语法:
SHOW COLUMNS {FROM|IN} view_name [{FROM|IN} database_name]
:如果用户具有描述视图所需的 AWS Glue 和 AWS Lake Formation 权限,则可列出相应列。下面显示了几个用于显示列的示例命令:
SHOW COLUMNS FROM my_database.source_table;
SHOW COLUMNS IN my_database.source_table;
DESCRIBE view_name
:如果用户具有描述视图所需的 AWS Glue 和 AWS Lake Formation 权限,则可列出视图中的相应列及其元数据。
DROP VIEW
可用语法:
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)
SHOW VIEWS
列出目录中的所有视图,例如常规视图、多方言视图(MDV)和没有 Spark 方言的 MDV。可用语法如下:
SHOW VIEWS [{ FROM | IN } database_name] [LIKE regex_pattern]:
下面显示了用于显示视图的示例命令:
SHOW VIEWS IN marketing_analytics LIKE 'catalog_view*';
有关创建和配置 Data Catalog 视图的更多信息,请参阅《AWS Lake Formation Developer Guide》中的 Building AWS Glue Data Catalog views 。
查询 Data Catalog 视图
创建 Data Catalog 视图后,即可查询视图。在 AWS Glue 作业中配置的 IAM 角色,必须拥有对 Data Catalog 视图的 Lake Formation SELECT 权限。您无需授予对视图中引用的基础表的访问权限。
完成所有设置后,就可以查询视图。例如运行以下查询来访问视图。
SELECT * from my_database.catalog_view LIMIT 10;
限制
使用数据目录视图时,请考虑以下限制。
-
只能使用 AWS Glue 5.0 及更高版本来创建 Data Catalog 视图。
-
Data Catalog 视图定义者必须拥有对视图访问的基础基表的
SELECT
访问权限。如果特定基表对定义者角色施加了任何 Lake Formation 筛选条件,则创建 Data Catalog 视图将失败。 -
在 AWS Lake Formation 中,基表不得具有
IAMAllowedPrincipals
数据湖权限。如果有,则会出现错误“多方言视图只能引用没有 IAMAllowedPrincipals 权限的表”。 -
该表的 Amazon S3 位置必须注册为 AWS Lake Formation 数据湖位置。如果表未注册,则会出现错误:
Multi Dialect views may only reference AWS Lake Formation managed tables
。有关如何在 AWS Lake Formation 中注册 Amazon S3 位置的信息,请参阅《AWS Lake Formation Developer Guide》中的 Registering an Amazon S3 location。 -
只能创建
PROTECTED
数据目录视图。不支持UNPROTECTED
视图。 -
在 Data Catalog 视图定义中,既不能引用其他 AWS 账户中的表,也不能引用不同区域中同一账户中的表。
-
要跨账户或区域共享数据,必须使用 AWS Lake Formation 资源链接跨账户和跨区域共享整个视图。
-
不支持用户定义的函数(UDF)。
-
不能在数据目录视图中引用其他视图。