View a markdown version of this page

Glue データカタログビューの使用 - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Glue データカタログビューの使用

EMR Serverless で使用する AWS Glue データカタログでビューを作成および管理できます。これらは一般的に AWS Glue データカタログビューと呼ばれます。これらのビューは複数の SQL クエリエンジンをサポートしているため、EMR Serverless、 Amazon Athena Amazon Redshift などのさまざまな AWS サービスで同じビューにアクセスできます。

Data Catalog でビューを作成することで、 でリソース許可とタグベースのアクセスコントロールを使用して、そのビューへのアクセス AWS Lake Formation を許可します。このアクセスコントロール方法を使用することにより、ビューの作成時に参照したテーブルへの追加のアクセスを設定する必要はありません。アクセス許可を付与するこの方法は、definer セマンティクスと呼ばれ、これらのビューは definer ビューと呼ばれます。Lake Formation でのアクセスコントロールの詳細については、 AWS 「Lake Formation デベロッパーガイド」の「データカタログリソースに対するアクセス許可の付与と取り消し」を参照してください。

データカタログビューは、次のユースケースに役立ちます。

  • 細やかなアクセス制御 – ユーザーが必要とするアクセス許可に基づいてデータアクセスを制限するビューを作成できます。例えば、データカタログのビューを使用して、人事 (HR) 部門に属さない従業員が個人を特定できる情報 (PII) を表示できないようにすることができます。

  • 完全なビュー定義 – データカタログのビューにフィルターを適用することで、データカタログビューで利用可能なデータレコードを常に完全な状態にすることができます。

  • セキュリティの強化 – ビューの作成に使用されるクエリ定義は完全である必要があります。このメリットにより、データカタログのビューは悪意のあるアクターからの SQL コマンドの影響を受けにくくなります。

  • データを簡単に共有 – データを移動することなく、他の AWS アカウントとデータを共有します。詳細については、「Cross-account data sharing in Lake Formation」を参照してください。

データカタログビューの作成

Data Catalog ビューを作成するには、さまざまな方法があります。これには、 AWS CLI または Spark SQL の使用が含まれます。以下にいくつかの例を示します。

Using SQL

以下は、データカタログビューを作成するための構文を示しています。MULTI DIALECT ビュータイプを書き留めます。これにより、Data Catalog ビューと他のビューが区別されます。SECURITY 述語は DEFINER として指定されます。これは、DEFINER セマンティクスを含む Data Catalog ビューを示します。

CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW [IF NOT EXISTS] view_name [(column_name [COMMENT column_comment], ...) ] [ COMMENT view_comment ] [TBLPROPERTIES (property_name = property_value, ... )] SECURITY DEFINER AS query;

以下は、構文に従った CREATE ステートメントの例です:

CREATE PROTECTED MULTI DIALECT VIEW catalog_view SECURITY DEFINER AS SELECT order_date, sum(totalprice) AS price FROM source_table GROUP BY order_date

実際にリソースを作成することなく、SQL を使用してドライランモードでビューを作成し、ビューの作成をテストすることもできます。このオプションを使用すると、入力を検証する「ドライラン」になり、検証が成功すると、ビューを表す AWS Glue テーブルオブジェクトの JSON が返されます。この場合、実際のビューは作成されません。

CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW view_name SECURITY DEFINER [ SHOW VIEW JSON ] AS view-sql
Using the AWS CLI
注記

CLI コマンドを使用する場合、ビューの作成に使用される SQL は解析されません。これにより、ビューは作成されますが、クエリは成功しません。ビューを作成する前に、必ず SQL 構文をテストしてください。

以下の CLI コマンドを使用して、ビューをを作成します:

aws glue create-table --cli-input-json '{ "DatabaseName": "database", "TableInput": { "Name": "view", "StorageDescriptor": { "Columns": [ { "Name": "col1", "Type": "data-type" }, ... { "Name": "col_n", "Type": "data-type" } ], "SerdeInfo": {} }, "ViewDefinition": { "SubObjects": [ "arn:aws:glue:aws-region:aws-account-id:table/database/referenced-table1", ... "arn:aws:glue:aws-region:aws-account-id:table/database/referenced-tableN", ], "IsProtected": true, "Representations": [ { "Dialect": "SPARK", "DialectVersion": "1.0", "ViewOriginalText": "Spark-SQL", "ViewExpandedText": "Spark-SQL" } ] } } }'

サポートされているビュー操作

以下のコマンドフラグメントは、データカタログビューを操作するさまざまな方法を示します。

  • CREATE VIEW

    データカタログビューを作成します。以下は、既存のテーブルからビューを作成する例です。

    CREATE PROTECTED MULTI DIALECT VIEW catalog_view SECURITY DEFINER AS SELECT * FROM my_catalog.my_database.source_table
  • ALTER VIEW

    使用可能な構文:

    • ALTER VIEW view_name [FORCE] ADD DIALECT AS query

    • ALTER VIEW view_name [FORCE] UPDATE DIALECT AS query

    • ALTER VIEW view_name DROP DIALECT

    FORCE ADD DIALECT オプションを使用して、新しいエンジンダイアレクトに従ってスキーマとサブオブジェクトを強制的に更新できます。ただし、これを行うと、他のエンジンダイアレクトの更新にも FORCE を使用しないと、クエリエラーが発生する可能性があることに注意してください。以下に例を示します:

    ALTER VIEW catalog_view FORCE ADD DIALECT AS SELECT order_date, sum(totalprice) AS price FROM source_table GROUP BY orderdate;

    以下は、ダイアレクトを更新するためにビューを変更する方法をデモンストレーションします:

    ALTER VIEW catalog_view UPDATE DIALECT AS SELECT count(*) FROM my_catalog.my_database.source_table;
  • DESCRIBE VIEW

    ビューを記述するために使用できる構文:

    • SHOW COLUMNS {FROM|IN} view_name [{FROM|IN} database_name] – ユーザーにビューを記述するために必要な AWS Glue および Lake Formation アクセス許可がある場合は、列を一覧表示できます。列を表示するためのいくつかのコマンドの例を以下に示します:

      SHOW COLUMNS FROM my_database.source_table; SHOW COLUMNS IN my_database.source_table;
    • DESCRIBE view_name – ユーザーにビューを記述するために必要な AWS Glue および Lake Formation アクセス許可がある場合、ビュー内の列とそのメタデータを一覧表示できます。

  • DROP VIEW

    使用可能な構文:

    • DROP VIEW [ IF EXISTS ] view_name

      次のサンプルは、ビューを削除する前にビューが存在するかどうかをテストする DROP ステートメントを示します。

      DROP VIEW IF EXISTS catalog_view;
  • 作成ビューを表示する

    • SHOW CREATE VIEW view_name – 指定したビューを作成する SQL ステートメントを示します。以下は、データカタログビューの作成を示すサンプルです。

      SHOW CREATE TABLE my_database.catalog_view; CREATE PROTECTED MULTI DIALECT VIEW my_catalog.my_database.catalog_view ( net_profit, customer_id, item_id, sold_date) TBLPROPERTIES ( 'transient_lastDdlTime' = '1736267222') SECURITY DEFINER AS SELECT * FROM my_database.store_sales_partitioned_lf WHERE customer_id IN (SELECT customer_id from source_table limit 10)
  • SHOW VIEWS

    通常のビュー、マルチダイアレクトビュー (MDV)、Spark ダイアレクトのない MDV など、カタログ内のすべてのビューを一覧表示します。使用可能な構文は次のとおりです。

    • SHOW VIEWS [{ FROM | IN } database_name] [LIKE regex_pattern]:

      ビューを表示するコマンドの例を以下に示します:

      SHOW VIEWS IN marketing_analytics LIKE 'catalog_view*';

データカタログビューの作成と設定の詳細については、 AWS Lake Formation デベロッパーガイドAWS の「 Glue データカタログビューの構築」を参照してください。

データカタログビューをクエリする

データカタログビューを作成したら、 AWS Lake Formation きめ細かなアクセスコントロールが有効になっている Amazon EMR Serverless Spark ジョブを使用してクエリを実行できます。ジョブランタイムロールには、データカタログビューに対する Lake Formation SELECT アクセス許可が必要です。ビューで参照される基盤となるテーブルへのアクセスを許可する必要はありません。

すべてをセットアップしたら、ビューをクエリできます。例えば、EMR Studio で EMR Serverless アプリケーションを作成した後、以下のクエリを実行してビューにアクセスします。

SELECT * from my_database.catalog_view LIMIT 10;

便利な関数は invoker_principal です。EMRS ジョブランタイムロールの一意の識別子を返します。これは、呼び出しプリンシパルに基づいてビュー出力を制御するために使用できます。これを使用して、呼び出しロールに基づいてクエリ結果を絞り込む条件をビューに追加できます。この関数を使用するには、ジョブランタイムロールに LakeFormation:GetDataLakePrincipal IAM アクションに対するアクセス許可が必要です。

select invoker_principal();

例えば、この関数を WHERE 句に追加して、クエリ結果を絞り込むことができます。

考慮事項と制限事項

Data Catalog ビューを作成することにより、以下が適用されます:

  • Amazon EMR 7.6 以上では、Data Catalog ビューのみを作成できます。

  • Data Catalog ビュー定義者は、ビューによってアクセスされる基盤となるベーステーブルに対する SELECT アクセスを持っている必要があります。特定のベーステーブルに定義者ロールに対する Lake Formation フィルターが適用されている場合、Data Catalog ビューの作成は失敗します。

  • Lake Formation のベーステーブルには IAMAllowedPrincipals データレイクのアクセス許可を付与してはいけません。付与されている場合は、Multi Dialect views may only reference tables without IAMAllowedPrincipals permissions というエラーが表示されます。

  • テーブルの Amazon S3 の場所は、Lake Formation データレイクの場所として登録する必要があります。テーブルがこのように登録されていない場合、Multi Dialect views may only reference Lake Formation managed tables というエラーが表示されます。Lake Formation で Amazon S3 ロケーションを登録する方法については、「 AWS Lake Formation デベロッパーガイド」のAmazon S3ロケーションの登録」を参照してください。

  • PROTECTED データカタログビューのみを作成できます。UNPROTECTED ビューはサポートされていません。

  • データカタログビュー定義の別の AWS アカウントのテーブルを参照することはできません。また、別のリージョンにあるのと同じアカウントのテーブルを参照することはできません。

  • アカウントまたはリージョン間でデータを共有するには、Lake Formation リソースリンクを使用してビュー全体をクロスアカウントおよびクロスリージョンで共有する必要があります。

  • ユーザー定義関数 (UDF) はサポートされていません。

  • Iceberg テーブルに基づくビューを使用できます。オープンテーブル形式の Apache Hudi と Delta Lake もサポートされています。

  • データカタログビューで他のビューを参照できません。

  • AWS Glue データカタログビュースキーマは常に小文字を使用して保存されます。例えば、DDL ステートメントを使用して Castle という名前の列のある Glue データカタログビューを作成する場合、Glue Data Catalog に作成される列は小文字で castle になります。次に、DML クエリで列名を Castle または CASTLE として指定することにより、EMR Spark はその名前を小文字にしてクエリを実行します。ただし、列見出しは、クエリで指定した大文字と小文字を使用して表示されます。

    DML クエリで指定された列名が Glue データカタログの列名と一致しない場合にクエリを失敗させるには、spark.sql.caseSensitive=true を設定します。