在 AWS Glue Data Catalog 中创建视图
通过在 AWS Glue Data Catalog 中创建视图,您可以创建单一的通用视图架构和元数据对象,以便在 Amazon Athena 和 Amazon EMR Spark 等引擎中使用。这样做可以让您在数据湖和数据仓库中使用相同的视图来适应您的使用案例。Data Catalog 中的视图是特殊的,因为它们被归类为定义者视图,其中访问权限由创建视图的用户定义,而不是由查询视图的用户定义。以下是一些在 Data Catalog 中创建视图的使用案例和好处:
-
创建一个视图,根据用户所需的权限来限制数据访问。例如,您可以使用 Data Catalog 中的视图来防止不在 HR 部门工作的员工查看个人身份信息 (PII)。
-
确保用户无法访问不完整的记录。通过对 Data Catalog 中的视图应用某些筛选器,可以确保 Data Catalog 中视图内的数据记录始终完整。
-
Data Catalog 视图还具有安全优势,即确保用于创建视图的查询定义必须完整才能创建视图。这种安全性优势意味着 Data Catalog 中的视图不容易受到恶意玩家的 SQL 命令的影响。
-
Data Catalog 中的视图支持与普通视图相同的优点,例如允许用户访问视图,而不向用户提供底层表。
要在 Data Catalog 中创建视图,必须有 Spectrum 外部表、包含在 Lake Formation 管理的数据共享中的对象或 Apache Iceberg 表。
Data Catalog 视图定义存储于 AWS Glue Data Catalog。可以使用 AWS Lake Formation 通过资源授权、列授权或基于标签的访问控制来授予访问权限。有关在 Lake Formation 中授予和撤销访问权限的更多信息,请参阅授予和撤销对 Data Catalog 资源的权限。
先决条件
在 Data Catalog 中创建视图之前,请确保已完成以下先决条件:
确保您的 IAM 角色具有以下信任策略。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "glue.amazonaws.com", "lakeformation.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
-
您还需要以下传递角色策略。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1", "Action": [ "iam:PassRole" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": [ "glue.amazonaws.com", "lakeformation.amazonaws.com" ] } } } ] }
最后,您还需要以下权限。
Glue:GetDatabase
Glue:GetDatabases
Glue:CreateTable
Glue:GetTable
Glue:UpdateTable
Glue:DeleteTable
Glue:GetTables
Glue:SearchTables
Glue:BatchGetPartition
Glue:GetPartitions
Glue:GetPartition
Glue:GetTableVersion
Glue:GetTableVersions
端到端示例
首先基于 Data Catalog 数据库创建外部架构。
CREATE EXTERNAL SCHEMA IF NOT EXISTS external_schema FROM DATA CATALOG DATABASE 'external_data_catalog_db' IAM_ROLE 'arn:aws:iam::123456789012:role/sample-role';
现在您可以创建 Data Catalog 视图。
CREATE EXTERNAL PROTECTED VIEW external_schema.remote_view AS SELECT * FROM external_schema.remote_table;
然后,您可以开始查询视图。
SELECT * FROM external_schema.remote_view;
有关与 Data Catalog 中的视图相关的 SQL 命令的更多信息,请参阅 CREATE EXTERNAL VIEW、ALTER EXTERNAL VIEW 和 DROP EXTERNAL VIEW。
安全日志记录
当查询引用多方言 Glue 视图时,Redshift 会掩蔽 Redshift 系统日志中记录的元数据。多方言意味着视图支持不同查询引擎的 SQL 方言,例如 Redshift 和 Amazon EMR。对于具有相同查询 ID 的所有查询,下表中的数据均被掩蔽。下表列出应用了安全日志记录的系统视图和列。
系统表 | 敏感列 |
---|---|
SYS_EXTERNAL_QUERY_DETAIL | 列:source_type、total_partitions、qualified_partitions、scanned_files、returned_rows、returned_bytes、file_format、file_location、external_query_text、warning_message。有关更多信息,请参阅 SYS_EXTERNAL_QUERY_DETAIL。 |
SYS_EXTERNAL_QUERY_ERROR | 列:file_location、rowid、column_name、original_value、modified_value、trigger、action、action_value、error_code。有关更多信息,请参阅 SYS_EXTERNAL_QUERY_ERROR。 |
SYS_QUERY_DETAIL | 列:step_name、table_id、table_name、input_bytes、input_rows、output_bytes、output_rows、blocks_read、blocks_write、local_read_IO、remote_read_IO、spilled_block_local_disk、spilled_block_remote_disk。有关更多信息,请参阅 SYS_QUERY_DETAIL。 |
SYS_QUERY_HISTORY | 列:returned_rows、returned_bytes。有关更多信息,请参阅 SYS_QUERY_HISTORY。 |
STL_AGGR | 列:rows、bytes、tbl、type。有关更多信息,请参阅 STL_AGGR。 |
STL_BCAST | 列:rows、bytes、packets。有关更多信息,请参阅 STL_BCAST。 |
STL_DDLTEXT | 列:text。有关更多信息,请参阅 STL_DDLTEXT。 |
STL_DELETE | 列:rows、tbl。有关更多信息,请参阅 STL_DELETE。 |
STL_DIST | 列:rows、bytes、packets。有关更多信息,请参阅 STL_DIST。 |
STL_EXPLAIN | 列:plannode、info。有关更多信息,请参阅 STL_EXPLAIN。 |
STL_HASH | 列:rows、bytes、tbl、est_rows。有关更多信息,请参阅 STL_HASH。 |
STL_HASHJOIN | 列:rows、tbl、num_parts、join_type。有关更多信息,请参阅 STL_HASHJOIN。 |
STL_INSERT | 列:rows、tbl。有关更多信息,请参阅 STL_INSERT。 |
STL_LIMIT | 列:rows。有关更多信息,请参阅 STL_LIMIT。 |
STL_MERGE | 列:rows。有关更多信息,请参阅 STL_MERGE。 |
STL_MERGEJOIN | 列:rows、tbl。有关更多信息,请参阅 STL_MERGEJOIN。 |
STL_NESTLOOP | 列:rows、tbl。有关更多信息,请参阅 STL_NESTLOOP。 |
STL_PARSE | 列:rows。有关更多信息,请参阅 STL_PARSE。 |
STL_PLAN_INFO | 列:rows、bytes。有关更多信息,请参阅 STL_PLAN_INFO。 |
STL_PROJECT | 列:rows、tbl。有关更多信息,请参阅 STL_PROJECT。 |
STL_QUERY | 列:querytxt。有关更多信息,请参阅 STL_QUERY。 |
STL_QUERY_METRICS | 列:max_rows、rows、max_blocks_read、blocks_read、max_blocks_to_disk、blocks_to_disk、max_query_scan_size、query_scan_size。有关更多信息,请参阅 STL_QUERY_METRICS。 |
STL_QUERYTEXT | 列:text。有关更多信息,请参阅 STL_QUERYTEXT。 |
STL_RETURN | 列:rows、bytes。有关更多信息,请参阅 STL_RETURN。 |
STL_SAVE | 列:rows、bytes、tbl。有关更多信息,请参阅 STL_SAVE。 |
STL_SCAN | 列:rows、bytes、fetches、type、tbl、rows_pre_filter、perm_table_name、scanned_mega_value。有关更多信息,请参阅 STL_SCAN。 |
STL_SORT | 列:rows、bytes、tbl。有关更多信息,请参阅 STL_SORT。 |
STL_TR_CONFLICT | 列:table_id。有关更多信息,请参阅 STL_TR_CONFLICT。 |
STL_UNDONE | 列:table_id。有关更多信息,请参阅 STL_UNDONE。 |
STL_UNIQUE | 列:rows、type、bytes。有关更多信息,请参阅 STL_UNIQUE。 |
STL_UTILITYTEXT | 列:text。有关更多信息,请参阅 STL_UTILITYTEXT。 |
STL_WINDOW | 列:rows。有关更多信息,请参阅 STL_WINDOW。 |
STV_BLOCKLIST | 列:col、tbl、num_values、minvalue、maxvalue。有关更多信息,请参阅 STV_BLOCKLIST。 |
STV_EXEC_STATE | 列:rows、bytes、label。有关更多信息,请参阅 STV_EXEC_STATE。 |
STV_LOCKS | 列:table_id。有关更多信息,请参阅 STV_LOCKS。 |
STV_QUERY_METRICS | 列:rows、max_rows、blocks_read、max_blocks_read、max_blocks_to_disk、blocks_to_disk、max_query_scan_size、query_scan_size。有关更多信息,请参阅 STV_QUERY_METRICS。 |
STV_STARTUP_RECOVERY_STATE | 列:table_id、table_name。有关更多信息,请参阅 STV_STARTUP_RECOVERY_STATE。 |
STV_TBL_PERM | 列:id、rows、sorted_rows、temp、block_count、query_scan_size。有关更多信息,请参阅 STV_TBL_PERM。 |
STV_TBL_TRANS | 列:id、rows、size。有关更多信息,请参阅 STV_TBL_TRANS。 |
SVCS_EXPLAIN | 列:plannode、info。有关更多信息,请参阅 SVCS_EXPLAIN。 |
SVCS_PLAN_INFO | 列:rows、bytes。有关更多信息,请参阅 SVCS_PLAN_INFO。 |
SVCS_QUERY_SUMMARY | 列:step、rows、bytes、rate_row、rate_byte、label、rows_pre_filter。有关更多信息,请参阅 SVCS_QUERY_SUMMARY。 |
SVCS_S3LIST | 列:bucket、prefix、max_file_size、avg_file_size。有关更多信息,请参阅 SVCS_QUERY_SUMMARY。 |
SVCS_S3LOG | 列:message。有关更多信息,请参阅 SVCS_QUERY_SUMMARY。 |
SVCS_S3PARTITION_SUMMARY | 列:total_partitions、qualified_partitions、min_assigned_partitions、max_assigned_partitions、avg_assigned_partitions。有关更多信息,请参阅 SVCS_S3PARTITION_SUMMARY。 |
SVCS_S3QUERY_SUMMARY | 列:external_table_name、file_format、s3_scanned_rows、s3_scanned_bytes、s3query_returned_rows、s3query_returned_bytes。有关更多信息,请参阅 SVCS_S3QUERY_SUMMARY。 |
SVL_QUERY_METRICS | 列:step_label、scan_row_count、join_row_count、nested_loop_join_row_count、return_row_count、spectrum_scan_row_count、spectrum_scan_size_mb。有关更多信息,请参阅 SVL_QUERY_METRICS。 |
SVL_QUERY_METRICS_SUMMARY | 列:step_label、scan_row_count、join_row_count、nested_loop_join_row_count、return_row_count、spectrum_scan_row_count、spectrum_scan_size_mb。有关更多信息,请参阅 SVL_QUERY_METRICS_SUMMARY。 |
SVL_QUERY_REPORT | 列:rows、bytes、label、rows_pre_filter。有关更多信息,请参阅 SVL_QUERY_REPORT。 |
SVL_QUERY_SUMMARY | 列:rows、bytes、rows_pre_filter。有关更多信息,请参阅 SVL_QUERY_SUMMARY。 |
SVL_S3LIST | 列:bucket、prefix、max_file_size、avg_file_size。有关更多信息,请参阅 SVL_S3LIST。 |
SVL_S3LOG | 列:message。有关更多信息,请参阅 SVL_S3LOG。 |
SVL_S3PARTITION | 列:rows、bytes、label、rows_pre_filter。有关更多信息,请参阅 SVL_S3PARTITION。 |
SVL_S3PARTITION_SUMMARY | 列:total_partitions、qualified_partitions、min_assigned_partitions、max_assigned_partitions、avg_assigned_partitions。有关更多信息,请参阅 SVL_S3PARTITION_SUMMARY。 |
SVL_S3QUERY | 列:external_table_name、file_format、s3_scanned_rows、s3_scanned_bytes、s3query_returned_rows、s3query_returned_bytes。有关更多信息,请参阅 SVL_S3QUERY。 |
SVL_S3QUERY_SUMMARY | 列:external_table_name、file_format、s3_scanned_rows、s3_scanned_bytes、s3query_returned_rows、s3query_returned_bytes。有关更多信息,请参阅 SVL_S3QUERY_SUMMARY。 |
SVL_S3RETRIES | 列:file_size、location、message。有关更多信息,请参阅 SVL_S3RETRIES。 |
SVL_SPECTRUM_SCAN_ERROR | 列:location、rowid、colname、original_value、modified_value。有关更多信息,请参阅 SVL_SPECTRUM_SCAN_ERROR。 |
SVL_STATEMENTTEXT | 列:type、text。有关更多信息,请参阅 SVL_STATEMENTTEXT。 |
SVL_STORED_PROC_CALL | 列:querytxt。有关更多信息,请参阅 SVL_STORED_PROC_CALL。 |
SVL_STORED_PROC_MESSAGES | 列:querytext。有关更多信息,请参阅 SVL_STORED_PROC_MESSAGES。 |
SVL_UDF_LOG | 列:funcname。有关更多信息,请参阅 SVL_UDF_LOG。 |
SVV_DISKUSAGE | 列:name、col、tbl、blocknum、num_values、minvalue、maxvalue。有关更多信息,请参阅 SVV_DISKUSAGE。 |
SVV_QUERY_STATE | 列:rows、bytes、label。有关更多信息,请参阅 SVV_QUERY_STATE。 |
SVV_TABLE_INFO | 列:table_id、table。有关更多信息,请参阅 SVV_TABLE_INFO。 |
SVV_TRANSACTIONS | 列:relation。有关更多信息,请参阅 SVV_TRANSACTIONS。 |
注意事项和限制
以下是适用于在 Data Catalog 中创建的视图的注意事项和限制。
无法创建基于其他视图的 Data Catalog 视图。
在 Data Catalog 视图中只能有 10 个基表。
视图的定义者必须对基表拥有完全
SELECT GRANTABLE
权限。视图只能包含 Lake Formation 对象和内置对象。不允许在视图中使用以下对象。
系统表
用户定义的函数 (UDF)
不在 Lake Formation 管理的数据共享中的 Redshift 表、视图、实体化视图和后期绑定视图。
视图不能包含嵌套的 Redshift Spectrum 表。
视图基础对象的 AWS Glue 表示形式必须与视图位于相同 AWS 账户和区域中。