AWS Glue Data Catalog 뷰 - Amazon Redshift

AWS Glue Data Catalog 뷰

이 주제에서는 AWS Glue Data Catalog에서 뷰를 만드는 방법을 설명합니다. 데이터 카탈로그의 뷰를 사용하여 동일한 스키마로 다양한 데이터 소스의 데이터에 액세스할 수 있습니다.

데이터 카탈로그에서 뷰를 생성하면 Amazon Athena 및 Amazon EMR Spark와 같은 엔진 전반에서 사용할 단일 공통 뷰 스키마와 메타데이터 객체를 만들 수 있습니다. 이렇게 하면 데이터 레이크와 데이터 웨어하우스 전반에서 사용 사례에 맞게 동일한 뷰를 사용할 수 있습니다. 데이터 카탈로그의 뷰는 정의자 뷰로 범주화된다는 점에서 특별합니다. 즉, 뷰를 쿼리하는 사용자가 아니라 뷰를 생성한 사용자가 액세스 권한을 정의합니다. 다음은 데이터 카탈로그에서 뷰를 만들 때의 사용 사례와 이점입니다.

  • 사용자에게 필요한 권한에 따라 데이터 액세스를 제한하는 뷰를 만듭니다. 예를 들어 데이터 카탈로그의 뷰를 사용하여 인사 관리(HR) 부서 소속이 아닌 직원은 개인 식별 정보(PII)를 보지 못하게 할 수 있습니다.

  • 사용자가 불완전한 레코드에 액세스할 수 없게 합니다. 데이터 카탈로그의 뷰에 특정 필터를 적용하여 데이터 카탈로그의 뷰에 있는 데이터 레코드가 항상 완전한지 확인할 수 있습니다.

  • 데이터 카탈로그 뷰에는 뷰를 만드는 데 사용된 쿼리 정의가 완료되어야 뷰를 만들 수 있다는 보안상의 이점이 있습니다. 이러한 보안상의 이점은 데이터 카탈로그의 뷰가 악의적인 사용자의 SQL 명령에 영향을 받지 않는다는 것을 의미합니다.

  • 데이터 카탈로그의 뷰는 일반 뷰와 동일한 이점을 지원합니다. 예를 들어 사용자에게 기본 테이블에 대한 사용 권한을 제공하지 않고도 뷰 액세스는 허용할 수 있습니다.

데이터 카탈로그에서 뷰를 만들려면 Spectrum 외부 테이블, Lake Formation에서 관리하는 데이터 공유 또는 Apache Iceberg 테이블이 있어야 합니다.

데이터 카탈로그 뷰의 정의는 AWS Glue Data Catalog에 저장됩니다. AWS Lake Formation을 사용하여 리소스 부여, 열 부여 또는 태그 기반 액세스 제어를 통해 액세스 권한을 부여할 수 있습니다. Lake Formation에서 액세스 권한 부여 및 취소에 대한 자세한 내용은 데이터 카탈로그 리소스에 대한 권한 부여 및 취소를 참조하세요.

사전 조건

데이터 카탈로그에서 뷰를 생성하기 전에 다음 사전 조건을 충족해야 합니다.

  • 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

종합 예제

먼저 데이터 카탈로그 데이터베이스를 기반으로 외부 스키마를 만드세요.

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';

이제 데이터 카탈로그 뷰를 만들 수 있습니다.

CREATE EXTERNAL PROTECTED VIEW external_schema.remote_view AS SELECT * FROM external_schema.remote_table;

그런 다음 뷰 쿼리를 시작할 수 있습니다.

SELECT * FROM external_schema.remote_view;

데이터 카탈로그의 뷰와 관련된 SQL 명령에 대한 자세한 내용은 CREATE EXTERNAL VIEW, ALTER EXTERNAL VIEW, DROP EXTERNAL VIEW를 참조하세요.

보안 로깅

Redshift는 쿼리가 다중 언어 Glue 뷰를 참조할 때 Redshift 시스템 로그에 기록된 메타데이터를 마스킹합니다. 다중 언어란 뷰가 Redshift 및 Amazon EMR과 같은 다양한 쿼리 엔진의 SQL 언어를 지원한다는 의미입니다. 다음 테이블의 데이터는 쿼리 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 단원을 참조하십시오.

고려 사항 및 제한

다음은 데이터 카탈로그에서 생성된 뷰에 적용되는 고려 사항과 제한 사항입니다.

  • 다른 뷰를 기반으로 하는 데이터 카탈로그 뷰는 만들 수 없습니다.

  • 데이터 카탈로그 뷰에는 기본 테이블이 10개만 허용됩니다.

  • 뷰 정의자는 기본 테이블에 대한 모든 SELECT GRANTABLE 권한을 가지고 있어야 합니다.

  • 뷰에는 Lake Formation 객체와 내장 기능만 포함할 수 있습니다. 다음과 같은 객체는 뷰 안에 넣을 수 없습니다.

    • 시스템 테이블

    • 사용자 정의 함수(UDF)

    • Lake Formation 관리형 데이터 공유에 포함되지 않은 Redshift 테이블, 뷰, 구체화된 뷰, 지연 바인딩 뷰

  • 뷰에는 중첩된 Redshift Spectrum 테이블을 포함할 수 없습니다.

  • AWS Glue를 통한 뷰의 기본 객체 표현은 뷰와 동일한 AWS 계정 및 리전에 있어야 합니다.