在 Amazon Athena 中创建 Data Catalog 视图需要特殊的 CREATE VIEW
语句。查询它们将使用传统的 SQL SELECT
语法。Data Catalog 视图也称为多方言视图或 MDV。
创建 Data Catalog 视图
要在 Athena 中创建 Data Catalog 视图,请使用以下语法。
CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW
view_name
SECURITY DEFINER [ SHOW VIEW JSON ] ASathena-sql-statement
注意
SHOW VIEW JSON
选项仅适用于 Data Catalog 视图,不适用于 Athena 视图。使用 SHOW VIEW JSON
选项执行“空运行”,以验证输入,如果验证成功,则返回将代表视图的 AWS Glue 表对象的 JSON。实际视图未创建。如果未指定 SHOW VIEW JSON
选项,则会进行验证,并在 Data Catalo 中照常创建视图。
以下示例展示 Definer
角色的用户如何创建 orders_by_date
Data Catalog 视图。该示例假设 Definer
角色对 default
数据库中的 orders
表具有完全 SELECT
权限。
CREATE PROTECTED MULTI DIALECT VIEW orders_by_date
SECURITY DEFINER
AS
SELECT orderdate, sum(totalprice) AS price
FROM orders
WHERE order_city = 'SEATTLE'
GROUP BY orderdate
有关语法信息,请参阅CREATE PROTECTED MULTI DIALECT VIEW。
查询 Data Catalog 视图
视图创建后,Lake Formation
管理员可以向 Invoker
主体授予对 Data Catalog 视图的 SELECT
权限。然后,Invoker
主体无需访问视图所引用的基础基表,即可查询视图。以下是 Invoker
查询示例。
SELECT * from orders_by_date where price > 5000
注意事项和限制
以下大多数 Data Catalog 视图限制特定于 Athena。有关同样适用于其他服务的 Data Catalog 视图的其他限制,请参阅 Lake Formation 文档。
-
Data Catalog 视图不能引用其他视图、数据库资源链接或表资源链接。
-
在视图定义中,您最多可以引用 10 个表。
-
在 Lake Formation 中,表不得具有
IAMAllowedPrincipals
数据湖权限。如果有,则会出现错误“多方言视图只能引用没有 IAMAllowedPrincipals 权限的表
”。 -
该表的 Amazon S3 位置必须注册为 Lake Formation 数据湖位置。如果该表未按此方式注册,则会出现错误“
多方言视图只能引用 Lake Formation 托管表
”。有关如何在 Lake Formation 中注册 Amazon S3 位置的信息,请参阅AWS Lake Formation开发者指南中的注册 Amazon S3 位置。 -
AWS GlueGetTables 和 SearchTables API 调用不会更新
IsRegisteredWithLakeFormation
参数。要查看参数的正确值,请使用 AWS Glue GetTable API。有关更多信息,请参阅AWS Lake Formation开发者指南中的 GetTables 和 SearchTables API 不会更新 IsRegisteredWithLakeFormation 参数的值。 -
DEFINER
主体只能是 IAM 角色。 -
DEFINER
角色必须对基础表具有完全的SELECT
(可授予)权限。 -
不支持
UNPROTECTED
Data Catalog 视图。 -
视图定义中不支持用户定义的函数(UDF)。
-
Athena 联合数据来源不能用于 Data Catalog 视图。
-
外部 Hive 元存储不支持 Data Catalog 视图。
-
Athena 在检测到过时视图时会显示错误消息。发生以下一种情况时,会报告过时的视图:
-
视图引用了不存在的表或数据库。
-
在引用的表中进行了架构或元数据更改。
-
删除了引用的表并使用不同的架构或配置重新创建。
-
权限
Data Catalog 视图需要三个角色:Lake Formation Admin
、Definer
和 Invoker
。
-
Lake Formation Admin
– 有权配置所有 Lake Formation 权限。 -
Definer
– 创建 Data Catalog 视图。Definer
角色必须对视图定义引用的所有基础表具有完全的可授予SELECT
权限。 -
Invoker
– 可以查询 Data Catalog 视图或检查其元数据。若要显示查询的调用者,可以使用invoker_principal()
DML 函数。有关更多信息,请参阅 invoker_principal()。
Definer
角色的信任关系必须允许 AWS Glue 和 Lake Formation 服务主体采取 sts:AssumeRole
操作。有关更多信息,请参阅《AWS Lake Formation 开发人员指南》中的创建视图的先决条件。
还需要针对 Athena 访问的 IAM 权限。有关更多信息,请参阅 Amazon Athena 的 AWS 托管策略。