AWS Glue Data Catalog のビュー - Amazon Redshift

AWS Glue Data Catalog のビュー

このトピックでは、AWS Glue Data Catalog でのビューの作成方法について説明します。Data Catalog のビューを使用すると、同じスキーマを使用して異なるデータソースのデータにアクセスできます。

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 コマンドの詳細については、「外部ビューの作成」、「外部ビューの変更」、および「外部ビューの削除」を参照してください。

セキュアなログ記録

Redshift は、クエリがマルチダイアレクトのグルービューを参照するときに、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、rowsmax_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、spectal_scan_row_count、spectal_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、spectal_scan_row_count、spectal_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)

    • Redshift のテーブル、ビュー、マテリアライズドビュー、遅延バインディングビューであって、Lake Formation 管理のデータ共有内にないもの。

  • ビューにはネストされた Redshift Spectrum テーブルを含めることはできません。

  • ビューの基本オブジェクトについての AWS Glue の表現は、ビューと同じ AWS アカウント とリージョンになければなりません。