

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

# Lake Formation を使用したきめ細やかなアクセス
<a name="lake-formation-fine-grained-access"></a>

Amazon EMR リリース 6.15.0 以降には、 AWS Lake Formation に基づく行、列、またはセルレベルでのきめ細かなアクセスコントロールのサポートが含まれています。このセクションのトピックでは、きめ細かなアクセスコントロールを使用して、EMR Spark ジョブまたはインタラクティブセッションから Lake Formation で保護された Glue データカタログテーブルにアクセスする方法について説明します。

# Amazon EMR での Lake Formation の有効化
<a name="emr-lf-enable"></a>

Amazon EMR 6.15.0 以降では、 Glue データカタログのデータにアクセスする EC2 クラスターで Amazon EMR で Spark AWS ジョブを実行すると、 AWS Lake Formation を使用して Hudi、Iceberg、または Delta Lake ベースのテーブルにテーブル、行、列、およびセルレベルのアクセス許可を適用できます。

このセクションでは、セキュリティ設定を作成し、Amazon EMR と連携するように Lake Formation を設定する方法について説明します。Lake Formation 用に作成したセキュリティ設定を使用してクラスターを起動する方法についても説明します。

## ステップ 1: EMR クラスターのランタイムロールを設定する
<a name="emr-lf-launch-cluster"></a>

EMR クラスターにランタイムロールを使用するには、セキュリティ設定を作成する必要があります。セキュリティ設定により、クラスター全体で一貫したセキュリティ、認可、認証のオプションを適用できます。

1. 次のセキュリティ設定で `lf-runtime-roles-sec-cfg.json` というファイルを作成します。

   ```
   {
       "AuthorizationConfiguration": {
           "IAMConfiguration": {
               "EnableApplicationScopedIAMRole": true,
               "ApplicationScopedIAMRoleConfiguration": {
                   "PropagateSourceIdentity": true
               }
           },
           "LakeFormationConfiguration": {
               "AuthorizedSessionTagValue": "Amazon EMR"
           }
       },
       "EncryptionConfiguration": {
   	    "EnableAtRestEncryption": false,
               "EnableInTransitEncryption": true,
               "InTransitEncryptionConfiguration": {
               "TLSCertificateConfiguration": {<certificate-configuration>}
           }
       }
   }
   ```

   以下の例は、証明書設定に Amazon S3 の証明書を含む zip ファイルを使用する方法を示しています:
   + Amazon S3 の証明書を含む zip ファイルがキープロバイダーとして使用されます。(証明書の要件については、「[Amazon EMR 暗号化を使用して転送中のデータを暗号化するための証明書の提供](emr-encryption-enable.md#emr-encryption-certificates)」を参照してください)

   ```
   "TLSCertificateConfiguration": {
   	"CertificateProviderType": "PEM",       
   	"S3Object": "s3://MyConfigStore/artifacts/MyCerts.zip"
    }
   ```

   以下の例は、証明書設定にカスタムキープロバイダーを使用する方法を示しています:
   + カスタムキープロバイダーが使用されます。(証明書の要件については、「[Amazon EMR 暗号化を使用して転送中のデータを暗号化するための証明書の提供](emr-encryption-enable.md#emr-encryption-certificates)」を参照してください)

   ```
   "TLSCertificateConfiguration": {
   	"CertificateProviderType": "Custom",
   	"S3Object": "s3://MyConfig/artifacts/MyCerts.jar",
   	"CertificateProviderClass": "com.mycompany.MyCertProvider"
       }
   ```

1. 次に、セッションタグが Lake Formation を承認できるようにするために、`LakeFormationConfiguration/AuthorizedSessionTagValue` プロパティを `Amazon EMR` に設定します。

1. 次のコマンドを使用して、Amazon EMR セキュリティ設定を作成します。

   ```
   aws emr create-security-configuration \
   --name 'iamconfig-with-iam-lf' \
   --security-configuration file://lf-runtime-roles-sec-cfg.json
   ```

   または、[Amazon EMR コンソール](https://console.aws.amazon.com//emr)を使用して、カスタム設定でセキュリティ設定を作成することもできます。

## ステップ 2: Amazon EMR クラスターを起動します
<a name="emr-lf-launch-cluster"></a>

これで、前のステップで作成したセキュリティ設定を使用して EMR クラスターを起動する準備ができました。セキュリティ設定の詳細については、「[セキュリティ設定を使用して Amazon EMR クラスターセキュリティをセットアップする](emr-security-configurations.md)」および「[Amazon EMR ステップのランタイムロール](emr-steps-runtime-roles.md)」を参照してください。

## ステップ 3: Amazon EMR ランタイムロールを使用して Lake Formation ベースの列、行、セルレベルのアクセス許可を設定する
<a name="emr-lf-fgac-perms"></a>

Lake Formation で列、行、またはセルレベルできめ細かなアクセスコントロールを適用するには、Lake Formation のデータレイク管理者がセッションタグ設定の値 `AuthorizedSessionTagValue` として `Amazon EMR` を設定する必要があります。Lake Formation は、このセッションタグを使用して発信者を承認し、データレイクへのアクセス権限を付与します。このセッションタグは、Lake Formation コンソールの **[アプリケーション統合設定]** セクションで設定できます。*123456789012* は、自分の AWS アカウント ID に置き換えてください。

## ステップ 4: Amazon EMR ランタイムロールの AWS Glue および Lake Formation 許可を設定する
<a name="emr-lf-trust-policy"></a>

Amazon EMR ランタイムロールを使用した Lake Formation ベースのアクセスコントロールの設定を続行するには、Amazon EMR ランタイムロールの AWS Glue 許可と Lake Formation 許可を設定する必要があります。IAM ランタイムロールが Lake Formation と対話できるようにするには、`lakeformation:GetDataAccess` および `glue:Get*` を使用してアクセス権限を付与します。

Lake Formation のアクセス許可は、Glue Data Catalog AWS リソース、Amazon S3 ロケーション、およびそれらのロケーションの基盤となるデータへのアクセスを制御します。IAM アクセス許可は、Lake Formation および AWS Glue APIs とリソースへのアクセスを制御します。データカタログ内のテーブルにアクセスするための Lake Formation アクセス許可 (SELECT) を持っていても、`glue:Get*` API に対する IAM アクセス許可がない場合、操作は失敗します。Lake Formation のアクセスコントロールの詳細については、「[Lake Formation アクセスコントロールの概要](https://docs.aws.amazon.com/lake-formation/latest/dg/lf-permissions-overview.html)」を参照してください。

1.  次の内容で `emr-runtime-roles-lake-formation-policy.json` ファイルを作成します。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "LakeFormationManagedAccess",
         "Effect": "Allow",
         "Action": [
           "lakeformation:GetDataAccess",
           "glue:Get*",
           "glue:Create*",
           "glue:Update*"
         ],
         "Resource": [
           "*"
         ]
       }
     ]
   }
   ```

------

1. 関連する IAM ポリシーを作成します。

   ```
   aws iam create-policy \
   --policy-name emr-runtime-roles-lake-formation-policy \
   --policy-document file://emr-runtime-roles-lake-formation-policy.json
   ```

1. このポリシーを IAM ランタイムロールに割り当てるには、「[AWS Lake Formation 許可の管理](https://docs.aws.amazon.com/lake-formation/latest/dg/managing-permissions.html)」のステップを実行します。

ランタイムロールと Lake Formation を使用して、テーブルレベルと列レベルのアクセス許可を適用できるようになりました。ソース ID を使用してアクションを制御し、 でオペレーションをモニタリングすることもできます AWS CloudTrail。

ランタイムロールとして使用する予定の各 IAM ロールについて、以下の信頼ポリシーを設定します。`EMR_EC2_DefaultRole` は、ご使用のインスタンスプロファイルロールに置き換えてください。IAM ロールの信頼ポリシーを変更するには、「[ロールの信頼ポリシーの変更](https://docs.aws.amazon.com//IAM/latest/UserGuide/roles-managingrole-editing-console.html)」を参照してください。

```
{
   "Sid":"AllowAssumeRole",
   "Effect":"Allow",
   "Principal":{
     "AWS":"arn:aws:iam::<AWS_ACCOUNT_ID>:role/EMR_EC2_DefaultRole"
   },
   "Action":[
        "sts:AssumeRole",
        "sts:TagSession"
       ]
 }
```

詳細なエンドツーエンドの例については、「[Introducing runtime roles for Amazon EMR steps](https://aws.amazon.com/blogs/big-data/introducing-runtime-roles-for-amazon-emr-steps-use-iam-roles-and-aws-lake-formation-for-access-control-with-amazon-emr/)」を参照してください。<a name="iceberg-with-lake-formation-spark-catalog-integration-lf-ec2"></a>

マルチカタログ階層の Iceberg および AWS Glue データカタログと統合する方法については、[AWS 「 Glue データカタログのマルチカタログ階層にアクセスするように Spark を設定する](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-multi-catalog.html#emr-lakehouse-using-spark-access)」を参照してください。

# オープンテーブル形式のサポート
<a name="emr-lf-fgac1"></a>

Amazon EMR リリース 6.15.0 以降には、Spark SQL AWS Lake Formation でデータを読み書きするときに、Hive テーブル、Apache Iceberg、Apache Hudi、Delta Lake を使用した に基づくきめ細かなアクセスコントロールのサポートが含まれています。Amazon EMR は、Apache Hudi を使用した、テーブル、行、列、セルレベルのアクセスコントロールをサポートしています。Amazon EMR リリース 6.15.0 以上には、 AWS Lake Formation に基づく行、列、またはセルレベルでのきめ細かなアクセスコントロールのサポートが含まれています。EMR 7.12 以降、テーブルデータを変更する DML および DDL オペレーションは、Lake Formation が提供する認証情報を使用して Apache Hive、Apache Iceberg、Delta Lake テーブルでサポートされています。

このセクションのトピックでは、EMR Spark ジョブまたはきめ細かなアクセスコントロールを備えたインタラクティブセッションから、オープンテーブル形式で Lake Formation 登録済みテーブルにアクセスする方法について説明します。

## アクセス許可の要件
<a name="emr-lf-perm"></a>

### に登録されていないテーブル AWS Lake Formation
<a name="emr-lf-tbl-reg"></a>

に登録されていないテーブルの場合 AWS Lake Formation、ジョブランタイムロールは Glue データカタログと Amazon AWS S3 の基盤となるテーブルデータの両方にアクセスします。 Amazon S3 これには、ジョブランタイムロールに Glue オペレーションと Amazon AWS S3 オペレーションの両方に対する適切な IAM アクセス許可が必要です。 Amazon S3 

### に登録されたテーブル AWS Lake Formation
<a name="emr-lf-tbl-not-reg"></a>

に登録されたテーブルの場合 AWS Lake Formation、ジョブランタイムロールは AWS Glue データカタログメタデータにアクセスし、Lake Formation によって提供された一時的な認証情報は Amazon S3 の基盤となるテーブルデータにアクセスします。オペレーションの実行に必要な Lake Formation のアクセス許可は、Spark ジョブが開始する AWS Glue データカタログと Amazon S3 API コールに依存し、次のように要約できます。
+ **DESCRIBE** アクセス許可により、ランタイムロールは Data Catalog 内のテーブルまたはデータベースメタデータを読み取ることができます。
+ **ALTER** アクセス許可により、ランタイムロールは Data Catalog のテーブルまたはデータベースメタデータを変更できます。
+ **DROP** アクセス許可により、ランタイムロールは Data Catalog からテーブルまたはデータベースメタデータを削除できます。
+ **SELECT** アクセス許可により、ランタイムロールは Amazon S3 からテーブルデータを読み取ることができます。
+ **INSERT** アクセス許可により、ランタイムロールは Amazon S3 にテーブルデータを書き込むことができます。
+ **DELETE** アクセス許可により、ランタイムロールは Amazon S3 からテーブルデータを削除できます。
**注記**  
Lake Formation は、Spark ジョブが AWS Glue を呼び出してテーブルメタデータを取得し、Amazon S3 を呼び出してテーブルデータを取得するときに、アクセス許可を遅延的に評価します。アクセス許可が不十分なランタイムロールを使用するジョブは、Spark が欠落しているアクセス許可を必要とする AWS Glue または Amazon S3 呼び出しを行うまで失敗しません。

**注記**  
次のサポートされているテーブルマトリックス:   
**サポート**対象とマークされたオペレーションは、Lake Formation 認証情報のみを使用して、Lake Formation に登録されたテーブルのテーブルデータにアクセスします。Lake Formation のアクセス許可が不十分な場合、オペレーションはランタイムロールの認証情報にフォールバックしません。Lake Formation に登録されていないテーブルの場合、ジョブランタイムロールの認証情報はテーブルデータにアクセスします。
**Amazon S3 ロケーションで IAM アクセス許可でサポートとマークされたオペレーション**は、Amazon S3 の基盤となるテーブルデータにアクセスするために Lake Formation 認証情報を使用しません。これらのオペレーションを実行するには、テーブルが Lake Formation に登録されているかどうかにかかわらず、ジョブランタイムロールにテーブルデータにアクセスするために必要な Amazon S3 IAM アクセス許可が必要です。

------
#### [ Hive ]

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-lf-fgac1.html)

------
#### [ Iceberg ]

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-lf-fgac1.html)

**Iceberg の Spark 設定:** Iceberg 形式を使用する場合は、次の設定を行います。`DB_LOCATION` を Iceberg テーブルが置かれている Amazon S3 パスに置き換え、リージョンとアカウント ID のプレースホルダーを自分の使用する値に置き換えます。

```
spark-sql \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
--conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog 
--conf spark.sql.catalog.spark_catalog.warehouse=s3://DB_LOCATION
--conf spark.sql.catalog.spark_catalog.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog 
--conf spark.sql.catalog.spark_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO
--conf spark.sql.catalog.spark_catalog.glue.account-id=ACCOUNT_ID
--conf spark.sql.catalog.spark_catalog.glue.id=ACCOUNT_ID
--conf spark.sql.catalog.spark_catalog.client.region=AWS_REGION
```

以前の EMR バージョンで Iceberg 形式を使用する場合は、代わりに以下のコマンドを使用します:

```
spark-sql \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension  
--conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkCatalog 
--conf spark.sql.catalog.spark_catalog.warehouse=s3://DB_LOCATION
--conf spark.sql.catalog.spark_catalog.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog 
--conf spark.sql.catalog.spark_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO  
--conf spark.sql.catalog.spark_catalog.glue.account-id=ACCOUNT_ID
--conf spark.sql.catalog.spark_catalog.glue.id=ACCOUNT_ID
--conf spark.sql.catalog.spark_catalog.client.assume-role.region=AWS_REGION
--conf spark.sql.catalog.spark_catalog.lf.managed=true
```

**例:**

Iceberg テーブルの使用例をいくつか示します。

```
-- Create an Iceberg table
CREATE TABLE my_iceberg_table (
    id BIGINT,
    name STRING,
    created_at TIMESTAMP
) USING ICEBERG;

-- Insert data
INSERT INTO my_iceberg_table VALUES (1, 'Alice', current_timestamp());

-- Query the table
SELECT * FROM my_iceberg_table;
```

------
#### [ Hudi ]

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-lf-fgac1.html)

**Hudi の Spark 設定:**

EMR 7.10 以上のバージョンで Spark シェルを起動するには、以下のコマンドを使用します:

```
spark-sql
--jars /usr/lib/hudi/hudi-spark-bundle.jar \
--conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog \
--conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension
```

以前の EMR バージョンで Spark シェルを起動するには、代わりに以下のコマンドを使用します:

```
spark-sql
--jars /usr/lib/hudi/hudi-spark-bundle.jar \
--conf spark.serializer=org.apache.spark.serializer.KryoSerializer \
--conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog \
--conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension  \
--conf spark.sql.catalog.spark_catalog.lf.managed=true
```

**例:**

Hudi テーブルを使用する例をいくつか示します。

```
-- Create a Hudi table
CREATE TABLE my_hudi_table (
    id BIGINT,
    name STRING,
    created_at TIMESTAMP
) USING HUDI
TBLPROPERTIES (
    'type' = 'cow',
    'primaryKey' = 'id'
);

-- Insert data
INSERT INTO my_hudi_table VALUES (1, 'Alice', current_timestamp());

-- Query the latest snapshot
SELECT * FROM my_hudi_table;
```

copy-on-writeテーブルの最新スナップショットをクエリするには:

```
SELECT * FROM my_hudi_cow_table
```

```
spark.read.table("my_hudi_cow_table")
```

`MOR` テーブルの最新の圧縮データをクエリするには、読み取り最適化テーブル (サフィックス `_ro` 付き) に対するクエリを実行します。

```
SELECT * FROM my_hudi_mor_table_ro
```

```
spark.read.table("my_hudi_mor_table_ro")
```

------
#### [ Delta Lake ]

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-lf-fgac1.html)

**Delta Lake の Spark 設定:**

EMR 7.10 以上で Lake Formation で Delta Lake を使用するには、以下のコマンドを実行します:

```
spark-sql \
   --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
  --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog
```

EMR 6.15〜7.9 で Lake Formation で Delta Lake を使用するには、以下のコマンドを実行します:

```
spark-sql \
  --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension \
  --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog \
  --conf spark.sql.catalog.spark_catalog.lf.managed=true
```

Lake Formation でレコードサーバーを使用して Spark カタログを管理する場合は、`spark.sql.catalog.<managed_catalog_name>.lf.managed` を true に設定します。

**例:**

Delta Lake テーブルの使用例を以下に示します。

```
-- Create a Delta Lake table
CREATE TABLE my_delta_table (
    id BIGINT,
    name STRING,
    created_at TIMESTAMP
) USING DELTA;

-- Insert data
INSERT INTO my_delta_table VALUES (1, 'Alice', current_timestamp());

-- Query the table
SELECT * FROM my_delta_table;

-- Update data
UPDATE my_delta_table SET name = 'Alice Smith' WHERE id = 1;

-- Merge data
MERGE INTO my_delta_table AS target
USING (SELECT 2 as id, 'Bob' as name, current_timestamp() as created_at) AS source
ON target.id = source.id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;
```

** AWS Glue データカタログでの Delta Lake テーブルの作成**

Amazon EMR with Lake Formation は、7.12 より前の EMR リリースでの DDL コマンドと Delta テーブルの作成をサポートしていません。 AWS Glue データカタログにテーブルを作成するには、次の手順に従います。

1. 次の例を使用して、Delta テーブルを作成します。S3 の場所が存在することを確認します。

   ```
   spark-sql \
   --conf "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" \
   --conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog"
   
   > CREATE DATABASE if not exists <DATABASE_NAME> LOCATION 's3://<S3_LOCATION>/transactionaldata/native-delta/<DATABASE_NAME>/';
   > CREATE TABLE <TABLE_NAME> (x INT, y STRING, z STRING) USING delta;
   > INSERT INTO <TABLE_NAME> VALUES (1, 'a1', 'b1');
   ```

1. テーブルの詳細については、[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) を参照してください。

1. 左側のナビゲーションで **[データカタログ]** を展開し、**[テーブル]** を選択し、作成したテーブルを選択します。**Schema** では、Spark で作成した Delta テーブルに、 Glue AWS のデータ型のすべての列が保存されていることがわかり`array<string>`ます。

1. Lake Formation で列とセルレベルのフィルターを定義するには、スキーマから `col` 列を削除し、テーブルスキーマにある列を追加します。この例では、列 `x`、`y`、`z` を追加します。

------

この機能を利用してコピーオンライトテーブルに対してスナップショットクエリを実行することで、特定のコミットまたは圧縮の瞬間におけるテーブルの最新のスナップショットをクエリすることができます。現在、Lake Formation 対応の Amazon EMR クラスターは、増分クエリとタイムトラベルクエリを実行するために Hudi のコミット時間列を取得する必要があります。Spark の `timestamp as of` 構文と `Spark.read()` 関数はサポートされていません。正しい構文は `select * from table where _hoodie_commit_time <= point_in_time` です。詳細については、「[Point in time Time-Travel queries on Hudi table](https://cwiki.apache.org/confluence/display/HUDI/RFC+-+07+%3A+Point+in+time+Time-Travel+queries+on+Hudi+table)」を参照してください。

**注記**  
Lake Formation クラスターでの読み取りのパフォーマンスは、最適化がサポートされていないために低くなる可能性があります。これらの機能には、Hudi メタデータに基づくファイルリストやデータスキップなどがあります。アプリケーションのパフォーマンスをテストして、要件を満たしているか確認することをお勧めします。

# Amazon EMR での Glue Data Catalog ビューの操作
<a name="SECTION-jobs-glue-data-catalog-views-ec2"></a>

**注記**  
EC2 AWS 上の EMR で使用する Glue データカタログビューの作成と管理は、[Amazon EMR リリース 7.10.0](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-7100-release.html) 以降で使用できます。

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

Data Catalog でビューを作成することで、 でリソース許可とタグベースのアクセスコントロールを使用して AWS Lake Formation 、そのビューへのアクセスを許可できます。このアクセスコントロール方法を使用すると、ビューの作成時に参照したテーブルへの追加のアクセスを設定する必要はありません。アクセス許可を付与するこの方法は、definer セマンティクスと呼ばれ、これらのビューは definer ビューと呼ばれます。Lake Formation でのアクセスコントロールの詳細については、 AWS Lake Formation デベロッパーガイドの[「データカタログリソースに対するアクセス許可の付与と取り消し](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html)」を参照してください。

データカタログビューは、次のユースケースに役立ちます。
+ **細やかなアクセス制御** – ユーザーが必要とするアクセス許可に基づいてデータアクセスを制限するビューを作成できます。例えば、データカタログのビューを使用して、人事 (HR) 部門に属さない従業員が個人を特定できる情報 (PII) を表示できないようにすることができます。
+ **完全なビュー定義** – データカタログのビューにフィルターを適用することで、データカタログビューで利用可能なデータレコードを常に完全な状態にすることができます。
+ **セキュリティの強化** – ビューの作成に使用されるクエリ定義は完全である必要があります。このメリットにより、データカタログのビューは悪意のあるアクターからの SQL コマンドの影響を受けにくくなります。
+ **データを簡単に共有** – データを移動することなく、他の AWS アカウントとデータを共有します。詳細については、「[Cross-account data sharing in Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-permissions.html)」を参照してください。

## データカタログビューの作成
<a name="SECTION-jobs-glue-data-catalog-views-create-ec2"></a>

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

------
#### [ Using SQL ]

以下は、Data Catalog ビューを作成するための構文を示しています。`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"
        }
      ]
    }
  }
}'
```

------

## サポートされているビュー操作
<a name="SECTION-jobs-glue-data-catalog-views-supported-operations-ec2"></a>

以下のコマンドフラグメントは、データカタログビューを操作するさまざまな方法を示します。
+ **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 データカタログビューの構築](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html)」を参照してください。

## データカタログビューをクエリする
<a name="SECTION-jobs-glue-data-catalog-views-querying-ec2"></a>

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

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

```
SELECT * from my_database.catalog_view LIMIT 10;
```

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

```
select invoker_principal();
```

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

## 考慮事項と制限事項
<a name="SECTION-jobs-glue-data-catalog-views-considerations-ec2"></a>

Data Catalog ビューを作成することにより、以下が適用されます:
+ Amazon EMR 7.10 以上では、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ロケーションの登録](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html)」を参照してください。
+ `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 Data Catalog の列名と一致しない場合にクエリを失敗させるには、`spark.sql.caseSensitive=true` を設定できます。

# Amazon EMR での Lake Formation の使用に関する考慮事項
<a name="emr-lf-limitations-cont"></a>

Lake Formation での Amazon EMR は、[利用可能なすべてのリージョン](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-region.html)で利用できます。

## バージョン 7.9 以前の Amazon EMR での Lake Formation の使用に関する考慮事項
<a name="emr-lf-limitations-early"></a>

EMR 7.9 以前のバージョン AWS Lake Formation で を使用する場合は、次の点を考慮してください。
+ Amazon EMR リリース 6.15 以降のクラスターでは、行、列、セルレベルでの[きめ細かなアクセス制御](emr-lf-enable.md#emr-lf-fgac-perms)が可能です。
+ テーブルにアクセスできるユーザーは、そのテーブルのすべてのプロパティにアクセスできます。Lake Formation ベースのアクセスコントロールをテーブルで使用している場合は、テーブルを確認して、プロパティに機密データや情報が含まれていないことを確認してください。
+ Lake Formation を使用する Amazon EMR クラスターでは、Spark がテーブル統計を収集する場合の Spark の HDFS へのフォールバックをサポートしていません。これは通常、クエリのパフォーマンスを最適化するのに役立ちます。
+ Lake Formation に基づくアクセスコントロールをサポートする、非管理対象の Apache Spark テーブルによる操作には、`INSERT INTO` や `INSERT OVERWRITE` などがあります。
+ Lake Formation に基づくアクセスコントロールをサポートする、Apache Spark と Apache Hive での操作には、`SELECT`、`DESCRIBE`、`SHOW DATABASE`、`SHOW TABLE`、`SHOW COLUMN`、`SHOW PARTITION` などがあります。
+ Amazon EMR は、以下の Lake Formation ベースの操作用アクセスコントロールをサポートしていません。
  + 管理対象テーブルへの書き込み
  + Amazon EMR は `CREATE TABLE` をサポートしていません。Amazon EMR 6.10.0 以降は、`ALTER TABLE`をサポートしています。
  + `INSERT` コマンド以外の DML ステートメント。
+ Lake Formation ベースのアクセスコントロールを使用する場合と使用しない場合では、同じクエリでパフォーマンスに差が生じます。
+ Amazon EMR は Lake Formation for Spark ジョブでのみ使用できます。
+ 信頼された ID の伝播は、 Glue Data Catalog のマルチカタログ階層ではサポートされていません。詳細については、「 [AWS Glue Data Catalog でのマルチカタログ階層の使用](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-multi-catalog.html)」を参照してください。

## バージョン 7.10 以降の Amazon EMR での Lake Formation の使用に関する考慮事項
<a name="emr-lf-limitations"></a>

EMR 7.10 以降のバージョン AWS Lake Formation で で Amazon EMR を使用する場合は、次の点を考慮してください。
+ Amazon EMR は、Apache Hive、Apache Iceberg、Apache Delta および Apache Hudi テーブルに対してのみ Lake Formation を介したきめ細かなアクセスコントロールをサポートします。Apache Hive 形式には、Parquet、ORC、および xSV CSV が含まれます。
+ Lake Formation が有効なアプリケーションの場合、Spark ログはシステムスペースログとユーザースペースログの 2 つのグループで Amazon S3 に書き込まれます。システムスペースログには、完全なテーブルスキーマなどの機密情報が含まれている場合があります。このデータを保護するために、Amazon EMR はシステムスペースログをユーザースペースログとは別の場所に保存します。アカウント管理者は、システムスペースログへのアクセスをユーザーに許可しないことを強くお勧めします。
+ Lake Formation にテーブルの場所を登録する場合、データアクセスは Amazon EMR ジョブランタイムロールではなく、登録に使用されるロールのアクセス許可によってのみ制御されます。登録ロールの設定が間違っている場合、テーブルにアクセスしようとするジョブは失敗します。
+ Lake Formation ジョブの `DynamicResourceAllocation` をオフにすることはできません。
+ Lake Formation は Spark ジョブでのみ使用できます。
+ Lake Formation での Amazon EMR は、ジョブ全体で 1 つの Spark セッションのみをサポートします。
+ Lake Formation での Amazon EMR は、リソースリンクを介して共有されるクロスアカウントテーブルクエリのみをサポートします。
+ 次のサポートはありません。
  + 耐障害性のある分散データセット (RDD)
  + Spark ストリーミング
  + Lake Formation に付与されたアクセス許可による書き込み
  + ネストされた列のアクセスコントロール
+ Amazon EMR は、以下を含むシステムドライバーの完全な分離を損なわせる可能性のある機能をブロックします。
  + UDT、HiveUDF およびカスタムクラスを含むユーザー定義関数
  + カスタムデータソース
  + Spark 拡張機能、コネクタ、メタストア用の追加の jar の提供
  + `ANALYZE TABLE` コマンド
+ アクセスコントロールを適用するために、`EXPLAIN PLAN` および `DESCRIBE TABLE` などの DDL オペレーションは、限定された情報を公開しません。
+ Amazon EMR は、Lake Formation 対応アプリケーションのシステムドライバー Spark ログへのアクセスを制限します。システムドライバーは昇格アクセス許可を使用して実行されるため、システムドライバーが生成するイベントとログには機密情報が含まれる可能性があります。許可されていないユーザーまたはコードがこの機密データにアクセスできないように、Amazon EMR はシステムドライバーログへのアクセスを無効にしました。

  システムプロファイルログは常にマネージドストレージに保持されます。これは無効にできない必須の設定です。これらのログは、カスタマーマネージド KMS キーまたは AWS マネージド KMS キーを使用して安全に保存され、暗号化されます。

  Amazon EMR アプリケーションが Amazon S3 の VPC エンドポイントを持つプライベートサブネットにあり、アクセスを制御するエンドポイントポリシーをアタッチしている場合、ジョブが AWS Managed Amazon S3 にログデータを送信する前に、VPC ポリシーの [Managed Storage](logging.html#jobs-log-storage-managed-storage) に詳述されているアクセス許可を S3 ゲートウェイエンドポイントに含める必要があります。リクエストのトラブルシューティングについては、 AWS サポートにお問い合わせください。
+ テーブルの場所を Lake Formation に登録した場合、データアクセスパスは、 Amazon EMR ジョブのランタイムロールの IAM アクセス許可に関係なく、Lake Formation に保存された認証情報を経由します。テーブルの場所に登録されたロールを誤って設定すると、テーブルの場所に対して S3 IAM アクセス許可を持つロールを使用して送信されたジョブは失敗します。
+ Lake Formation テーブルへの書き込みでは、Lake Formation に付与されたアクセス許可ではなく、IAM アクセス許可が使用されます。ジョブランタイムロールに必要な S3 アクセス許可がある場合は、それを使用して書き込みオペレーションを実行できます。

Apache Iceberg を使用する場合の考慮事項と制限事項を次に示します。
+ Apache Iceberg はセッションカタログでのみ使用でき、任意の名前のカタログでは使用できません。
+ Lake Formation に登録されている Iceberg テーブルは、メタデータテーブル `history`、`metadata_log_entries`、`snapshots`、`files`、`manifests`、および `refs` のみをサポートします。Amazon EMR は `partitions`、`path`、`summaries` などの機密データを持つ可能性のある列を非表示にします。この制限は、Lake Formation に登録されていない Iceberg テーブルには適用されません。
+ Lake Formation に登録していないテーブルは、すべての Iceberg ストアドプロシージャをサポートしています。`register_table` プロシージャと `migrate` プロシージャは、どのテーブルでもサポートされていません。
+ V1 の代わりに Iceberg DataFrameWriterV2 を使用することをお勧めします。

## バージョン 7.12 以降の Lake Formation を使用した Amazon EMR に関する考慮事項
<a name="emr-lf-limit-712"></a>

### General
<a name="emr-lf-limits-g"></a>

Amazon EMR で Lake Formation を使用する場合は、次の制限事項を確認してください。
+ Lake Formation ジョブの `DynamicResourceAllocation` をオフにすることはできません。
+ Lake Formation は Spark ジョブでのみ使用できます。
+ Lake Formation での Amazon EMR は、ジョブ全体で 1 つの Spark セッションのみをサポートします。
+ Lake Formation での Amazon EMR は、リソースリンクを介して共有されるクロスアカウントテーブルクエリのみをサポートします。
+ 次のサポートはありません。
  + 耐障害性のある分散データセット (RDD)
  + Spark ストリーミング
  + ネストされた列のアクセスコントロール
+ Amazon EMR は、以下を含むシステムドライバーの完全な分離を損なわせる可能性のある機能をブロックします。
  + UDT、HiveUDF およびカスタムクラスを含むユーザー定義関数
  + カスタムデータソース
  + Spark 拡張機能、コネクタ、メタストア用の追加の jar の提供
  + `ANALYZE TABLE` コマンド
+ Amazon EMR アプリケーションが Amazon S3 の VPC エンドポイントを持つプライベートサブネットにあり、アクセスを制御するエンドポイントポリシーをアタッチしている場合、ジョブが AWS Managed Amazon S3 にログデータを送信する前に、VPC ポリシーの [Managed Storage](logging.html#jobs-log-storage-managed-storage) に詳述されているアクセス許可を S3 ゲートウェイエンドポイントに含める必要があります。リクエストのトラブルシューティングについては、 AWS サポートにお問い合わせください。
+ Amazon EMR 7.9.0 以降、Spark FGAC は s3a:// スキームで使用すると S3AFileSystem をサポートします。
+ Amazon EMR 7.11 は、CTAS を使用したマネージドテーブルの作成をサポートしています。
+ Amazon EMR 7.12 は、CTAS を使用したマネージドテーブルと外部テーブルの作成をサポートしています。

## アクセス許可
<a name="emr-lf-permissions"></a>
+ アクセスコントロールを適用するために、EXPLAIN PLAN および DESCRIBE TABLE などの DDL オペレーションでは、制限された情報は公開されません。
+ Lake Formation にテーブルの場所を登録すると、データアクセスは EMR Serverless ジョブランタイムロールの IAM アクセス許可の代わりに Lake Formation の保存された認証情報を使用します。ランタイムロールにその場所の S3 IAM アクセス許可がある場合でも、テーブルの場所の登録済みロールが正しく設定されていない場合、ジョブは失敗します。
+ Amazon EMR 7.12 以降では、DataFrameWriter (V2) と Lake Formation 認証情報を追加モードで使用して、既存の Hive テーブルと Iceberg テーブルに書き込むことができます。上書きオペレーションの場合、または新しいテーブルを作成する場合、EMR はランタイムロールの認証情報を使用してテーブルデータを変更します。
+ ビューまたはキャッシュされたテーブルをソースデータとして使用する場合は、次の制限が適用されます (これらの制限は Glue Data Catalog AWS ビューには適用されません）。
  + MERGE、DELETE、および UPDATE オペレーションの場合
    + サポートされている: ビューとキャッシュされたテーブルをソーステーブルとして使用します。
    + サポート対象外: 割り当て句と条件句でビューとキャッシュされたテーブルを使用する。
  + CREATE OR REPLACE および REPLACE TABLE AS SELECT オペレーションの場合:
    + サポート対象外: ビューとキャッシュされたテーブルをソーステーブルとして使用する。
+ ソースデータの UDFsを持つ Delta Lake テーブルは、削除ベクトルが有効になっている場合にのみ MERGE、DELETE、UPDATE オペレーションをサポートします。

## ログとデバッグ
<a name="emr-lf-logs-debugging"></a>
+ Amazon EMR は、Lake Formation 対応アプリケーションのシステムドライバー Spark ログへのアクセスを制限します。システムドライバーは昇格アクセス許可を使用して実行されるため、システムドライバーが生成するイベントとログには機密情報が含まれる可能性があります。許可されていないユーザーまたはコードがこの機密データにアクセスできないように、Amazon EMR はシステムドライバーログへのアクセスを無効にしました。

  システムプロファイルログは常にマネージドストレージに保持されます。これは無効にできない必須の設定です。これらのログは、カスタマーマネージド KMS キーまたは AWS マネージド KMS キーを使用して安全に保存され、暗号化されます。

## Iceberg
<a name="emr-lf-iceberg-considerations"></a>

Apache Iceberg を使用するときは、以下の考慮事項を確認してください。
+ Apache Iceberg はセッションカタログでのみ使用でき、任意の名前のカタログでは使用できません。
+ Lake Formation に登録されている Iceberg テーブルは、メタデータテーブル `history`、`metadata_log_entries`、`snapshots`、`files`、`manifests`、および `refs` のみをサポートします。Amazon EMR は `partitions`、`path`、`summaries` などの機密データを持つ可能性のある列を非表示にします。この制限は、Lake Formation に登録されていない Iceberg テーブルには適用されません。
+ Lake Formation に登録されていないテーブルは、すべての Iceberg ストアドプロシージャをサポートします。`register_table` プロシージャと `migrate` プロシージャは、どのテーブルでもサポートされていません。
+ V1 の代わりに Iceberg DataFrameWriterV2 を使用することを提案します。

# Spark ネイティブのきめ細かなアクセスコントロール alllowlisted PySpark API
<a name="clean-rooms-spark-fgac-pyspark-api-allowlist"></a>

セキュリティとデータアクセスコントロールを維持するために、Spark のきめ細かなアクセスコントロール (FGAC) は特定の PySpark 関数を制限します。これらの制限は、以下を通じて適用されます。
+ 関数の実行を妨げる明示的なブロック
+ 関数を機能させないアーキテクチャの非互換性
+ エラーをスローしたり、アクセス拒否メッセージを返したり、呼び出されたときに何もしない関数

Spark FGAC では、次の PySpark 機能はサポートされていません。
+ RDD オペレーション (SparkRDDUnsupportedException でブロック)
+ Spark Connect (サポートされていません)
+ Spark ストリーミング (サポートされていません)

Native Spark FGAC 環境でリストされた関数をテストし、期待どおりに動作することを確認しましたが、テストは通常、各 API の基本的な使用のみを対象としています。複数の入力タイプまたは複雑なロジックパスを持つ関数には、テストされていないシナリオがある可能性があります。

ここに記載されておらず、上記のサポートされていないカテゴリに明確に含まれていない関数については、次のことをお勧めします。
+ ガンマ環境または小規模デプロイで最初にテストする
+ 本番環境で使用する前に動作を検証する

**注記**  
クラスメソッドがリストされているが、そのベースクラスが表示されていない場合でも、そのメソッドは機能します。つまり、ベースクラスコンストラクタを明示的に検証していないということです。

PySpark API はモジュールに整理されています。各モジュール内のメソッドの一般的なサポートの詳細については、以下の表を参照してください。


| モジュール名 | ステータス | 注意事項 | 
| --- | --- | --- | 
|  pyspark\$1core  |  サポート  |  このモジュールには主要な RDD クラスが含まれており、これらの関数はほとんどサポートされていません。  | 
|  pyspark\$1sql  |  サポート  |  | 
|  pyspark\$1testing  |  サポート  |  | 
|  pyspark\$1resource  |  サポート  |  | 
|  pyspark\$1streaming  |  ブロック  |  ストリーミングの使用は Spark FGAC でブロックされます。  | 
|  pyspark\$1mllib  |  実験的  |  このモジュールには RDD ベースの ML オペレーションが含まれており、これらの関数はほとんどサポートされていません。このモジュールは徹底的にテストされていません。  | 
|  pyspark\$1ml  |  実験的  |  このモジュールには DataFrame ベースの ML オペレーションが含まれており、これらの関数は主にサポートされています。このモジュールは徹底的にテストされていません。  | 
|  pyspark\$1pandas  |  サポート  |    | 
|  pyspark\$1pandas\$1slow  |  サポート  |    | 
| pyspark\$1connect |  ブロック  |  Spark Connect の使用が Spark FGAC でブロックされます。  | 
| pyspark\$1pandas\$1connect |  ブロック  |  Spark Connect の使用が Spark FGAC でブロックされます。  | 
| pyspark\$1pandas\$1slow\$1connect |  ブロック  |  Spark Connect の使用が Spark FGAC でブロックされます。  | 
| pyspark\$1errors |  実験的  |  このモジュールは徹底的にテストされていません。カスタムエラークラスは使用できません。  | 

**API 許可リスト**

ダウンロード可能で検索しやすいリストの場合、モジュールとクラスを含むファイルは[、ネイティブ FGAC で許可されている Python 関数](samples/Python functions allowed in Native FGAC.zip)で使用できます。