在 AWS Glue Data Catalog 中创建视图 - Amazon Redshift

在 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 VIEWALTER EXTERNAL VIEWDROP 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 账户和区域中。