

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Integrasikan Amazon EMR dengan AWS Lake Formation
Integrasikan Amazon EMR with Lake Formation

AWS Lake Formation adalah layanan terkelola yang membantu Anda menemukan, membuat katalog, membersihkan, dan mengamankan data di danau data Amazon Simple Storage Service (S3) Amazon Simple Storage Service (S3). Lake Formation menyediakan akses berbutir halus pada tingkat kolom, baris, atau sel ke database dan tabel di Katalog Data Glue AWS . Untuk informasi selengkapnya, lihat [Apa itu AWS Lake Formation?](https://docs.aws.amazon.com/lake-formation/latest/dg/what-is-lake-formation.html)

Dengan Amazon EMR rilis 6.7.0 dan yang lebih baru, Anda dapat menerapkan kontrol akses berbasis Lake Formation ke pekerjaan Spark, Hive, dan Presto yang Anda kirimkan ke kluster Amazon EMR. Untuk berintegrasi dengan Lake Formation, Anda harus membuat cluster EMR dengan peran *runtime*. Peran runtime adalah peran AWS Identity and Access Management (IAM) yang Anda kaitkan dengan pekerjaan atau kueri EMR Amazon. Amazon EMR kemudian menggunakan peran ini untuk mengakses AWS sumber daya. Untuk informasi selengkapnya, lihat [Peran runtime untuk langkah-langkah EMR Amazon](emr-steps-runtime-roles.md).

## Bagaimana Amazon EMR bekerja dengan Lake Formation


[Setelah mengintegrasikan Amazon EMR dengan Lake Formation, Anda dapat menjalankan kueri ke kluster EMR Amazon dengan API atau dengan AI Studio. `Step`](https://docs.aws.amazon.com/emr/latest/APIReference/API_Step.html) SageMaker Kemudian, Lake Formation menyediakan akses ke data melalui kredensyal sementara untuk Amazon EMR. Proses ini disebut credential vending. Untuk informasi selengkapnya, lihat [Apa itu AWS Lake Formation?](https://docs.aws.amazon.com/lake-formation/latest/dg/what-is-lake-formation.html)

Berikut ini adalah ikhtisar tingkat tinggi tentang bagaimana Amazon EMR mendapatkan akses ke data yang dilindungi oleh kebijakan keamanan Lake Formation.

![\[Bagaimana Amazon EMR mengakses data yang dilindungi oleh kebijakan keamanan Lake Formation\]](http://docs.aws.amazon.com/id_id/emr/latest/ManagementGuide/images/lf-emr-security.png)


1. Seorang pengguna mengirimkan kueri EMR Amazon untuk data di Lake Formation.

1. Amazon EMR meminta kredensyal sementara dari Lake Formation untuk memberikan akses data pengguna.

1. Lake Formation mengembalikan kredensyal sementara.

1. Amazon EMR mengirimkan permintaan kueri untuk mengambil data dari Amazon S3.

1. Amazon EMR menerima data dari Amazon S3, memfilternya, dan mengembalikan hasil berdasarkan izin pengguna yang ditentukan pengguna di Lake Formation.

Untuk informasi selengkapnya tentang penambahan pengguna dan grup ke kebijakan Lake Formation, lihat [Memberikan izin Katalog Data](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html).

## Prasyarat


Anda harus memenuhi persyaratan berikut sebelum mengintegrasikan Amazon EMR dan Lake Formation:
+ Aktifkan otorisasi peran runtime di klaster EMR Amazon Anda.
+ Gunakan AWS Glue Data Catalog sebagai toko metadata Anda.
+ Tentukan dan kelola izin di Lake Formation untuk mengakses database, tabel, dan kolom di AWS Glue Data Catalog. Untuk informasi selengkapnya, lihat [Apa itu AWS Lake Formation?](https://docs.aws.amazon.com/lake-formation/latest/dg/what-is-lake-formation.html)

# Akses berbutir halus dengan Lake Formation
Akses berbutir halus dengan Lake Formation

Amazon EMR merilis 6.15.0 dan yang lebih tinggi termasuk dukungan untuk kontrol akses berbutir halus di baris, kolom, atau tingkat sel berdasarkan Lake Formation. AWS Topik di bagian ini mencakup bagaimana Anda dapat mengakses tabel katalog Data Glue Data yang dilindungi Lake Formation dari pekerjaan EMR Spark atau sesi interaktif dengan kontrol akses berbutir halus.

# Aktifkan Lake Formation dengan Amazon EMR


Dengan Amazon EMR 6.15.0 dan yang lebih tinggi, saat Anda menjalankan pekerjaan Spark di Amazon EMR di kluster EC2 yang mengakses data di Katalog Data AWS Glue, Anda dapat AWS Lake Formation menggunakannya untuk menerapkan izin tingkat tabel, baris, kolom, dan sel pada tabel berbasis Hudi, Iceberg, atau Delta Lake.

Di bagian ini, kami membahas cara membuat konfigurasi keamanan dan mengatur Lake Formation untuk bekerja dengan Amazon EMR. Kami juga membahas cara meluncurkan cluster dengan konfigurasi keamanan yang Anda buat untuk Lake Formation. 

## Langkah 1: Siapkan peran runtime untuk cluster EMR Anda
Langkah 1: Siapkan peran runtime

Untuk menggunakan peran runtime untuk klaster EMR Anda, Anda harus membuat konfigurasi keamanan. Dengan konfigurasi keamanan, Anda dapat menerapkan opsi keamanan, otorisasi, dan otentikasi yang konsisten di seluruh cluster Anda. 

1. Buat file yang disebut `lf-runtime-roles-sec-cfg.json` dengan konfigurasi keamanan berikut.

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

   Contoh di bawah ini menggambarkan cara menggunakan file zip dengan sertifikat di Amazon S3 untuk konfigurasi sertifikat:
   + File zip dengan sertifikat di Amazon S3 digunakan sebagai penyedia kunci. (Lihat [Memberikan sertifikat untuk mengenkripsi data dalam transit dengan enkripsi Amazon EMR](emr-encryption-enable.md#emr-encryption-certificates) untuk persyaratan sertifikat.)

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

   Contoh di bawah ini menggambarkan cara menggunakan penyedia kunci kustom untuk konfigurasi sertifikat:
   + Penyedia kunci khusus digunakan. (Lihat [Memberikan sertifikat untuk mengenkripsi data dalam transit dengan enkripsi Amazon EMR](emr-encryption-enable.md#emr-encryption-certificates) untuk persyaratan sertifikat.)

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

1. Selanjutnya, untuk memastikan bahwa tag sesi dapat mengotorisasi Lake Formation, atur `LakeFormationConfiguration/AuthorizedSessionTagValue` properti ke`Amazon EMR`. 

1. Gunakan perintah berikut untuk membuat konfigurasi keamanan Amazon EMR.

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

   Atau, Anda dapat menggunakan [konsol EMR Amazon](https://console.aws.amazon.com//emr) untuk membuat konfigurasi keamanan dengan pengaturan khusus.

## Langkah 2: Luncurkan klaster Amazon EMR
Langkah 2: Luncurkan cluster

Sekarang Anda siap meluncurkan cluster EMR dengan konfigurasi keamanan yang Anda buat pada langkah sebelumnya. Untuk informasi selengkapnya tentang konfigurasi keamanan, lihat [Gunakan konfigurasi keamanan untuk mengatur keamanan klaster Amazon EMR](emr-security-configurations.md) dan[Peran runtime untuk langkah-langkah EMR Amazon](emr-steps-runtime-roles.md).

## Langkah 3: Siapkan izin kolom, baris, atau tingkat sel berbasis Lake Formation dengan peran runtime Amazon EMR
Langkah 3: Izin kolom, baris, atau tingkat sel

Untuk menerapkan kontrol akses berbutir halus pada tingkat kolom, baris, atau sel dengan Lake Formation, administrator data lake untuk Lake Formation harus menetapkan `Amazon EMR` sebagai nilai untuk konfigurasi tag sesi. `AuthorizedSessionTagValue` Lake Formation menggunakan tag sesi ini untuk mengotorisasi penelepon dan menyediakan akses ke danau data. Anda dapat mengatur tag sesi ini di bagian **Pengaturan integrasi aplikasi** di konsol Lake Formation. Ganti *123456789012* dengan Akun AWS ID Anda sendiri.

## Langkah 4: Konfigurasikan hibah AWS Glue dan Lake Formation untuk peran runtime Amazon EMR
Langkah 4: Konfigurasikan Glue dan Lake Formation

Untuk melanjutkan penyiapan kontrol akses berbasis Lake Formation dengan peran runtime Amazon EMR, Anda harus mengonfigurasi hibah AWS Glue dan Lake Formation untuk peran runtime Amazon EMR. Untuk memungkinkan peran runtime IAM Anda berinteraksi dengan Lake Formation, beri mereka akses dengan `lakeformation:GetDataAccess` dan. `glue:Get*`

Izin Lake Formation mengontrol akses ke sumber daya Katalog Data AWS Glue, lokasi Amazon S3, dan data dasar di lokasi tersebut. Izin IAM mengontrol akses ke Lake Formation dan AWS Glue APIs dan sumber daya. Meskipun Anda mungkin memiliki izin Lake Formation untuk mengakses tabel di katalog data (SELECT), operasi Anda gagal jika Anda tidak memiliki izin IAM pada `glue:Get*` API. Untuk detail lebih lanjut tentang kontrol akses Lake Formation, lihat [ikhtisar kontrol akses Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/lf-permissions-overview.html).

1.  Buat `emr-runtime-roles-lake-formation-policy.json` file dengan konten berikut. 

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

****  

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

------

1. Buat kebijakan IAM terkait.

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

1. [Untuk menetapkan kebijakan ini ke peran runtime IAM Anda, ikuti langkah-langkah dalam Mengelola izin. AWS Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/managing-permissions.html)

Anda sekarang dapat menggunakan peran runtime dan Lake Formation untuk menerapkan izin tingkat tabel dan kolom. Anda juga dapat menggunakan identitas sumber untuk mengontrol tindakan dan memantau operasi dengan AWS CloudTrail.

Untuk setiap peran IAM yang Anda rencanakan untuk digunakan sebagai peran runtime, tetapkan kebijakan kepercayaan berikut, ganti `EMR_EC2_DefaultRole` dengan peran profil instans Anda. Untuk mengubah kebijakan kepercayaan peran IAM, lihat [Memodifikasi kebijakan kepercayaan peran](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"
       ]
 }
```

Untuk selengkapnya, end-to-end lihat [Memperkenalkan peran runtime untuk langkah-langkah EMR Amazon](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/).

Untuk informasi tentang cara mengintegrasikan dengan Iceberg dan AWS Glue Data Catalog untuk hierarki multi-katalog, lihat [Mengonfigurasi Spark untuk mengakses hierarki multi-katalog di Glue Data Catalog](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-multi-catalog.html#emr-lakehouse-using-spark-access). AWS 

# Dukungan format meja terbuka


Amazon EMR merilis 6.15.0 dan yang lebih tinggi termasuk dukungan untuk kontrol akses berbutir halus berdasarkan tabel Hive, Apache Iceberg, Apache Hudi, dan Delta Lake saat Anda membaca dan menulis data AWS Lake Formation dengan Spark SQL. Amazon EMR mendukung tabel, baris, kolom, dan kontrol akses tingkat sel dengan Apache Hudi. Amazon EMR merilis 6.15.0 dan yang lebih tinggi termasuk dukungan untuk kontrol akses berbutir halus di baris, kolom, atau tingkat sel berdasarkan Lake Formation. AWS Dimulai dengan EMR 7.12, operasi DHTML dan DDL yang memodifikasi data tabel didukung untuk tabel Apache Hive, Apache Iceberg, dan Delta Lake menggunakan kredensyal penjual Lake Formation. 

Topik di bagian ini mencakup bagaimana Anda dapat mengakses tabel terdaftar Lake Formation dalam format tabel terbuka dari pekerjaan EMR Spark atau sesi interaktif dengan kontrol akses berbutir halus.

## Persyaratan izin


### Tabel tidak terdaftar di AWS Lake Formation


Untuk tabel yang tidak terdaftar AWS Lake Formation, peran runtime pekerjaan mengakses Katalog Data AWS Glue dan data tabel yang mendasarinya di Amazon S3. Ini mengharuskan peran runtime pekerjaan memiliki izin IAM yang sesuai untuk operasi AWS Glue dan Amazon S3. 

### Tabel terdaftar di AWS Lake Formation


Untuk tabel yang terdaftar AWS Lake Formation, peran runtime pekerjaan mengakses metadata AWS Glue Data Catalog, sementara kredensyal sementara yang dijual oleh Lake Formation mengakses data tabel yang mendasarinya di Amazon S3. Izin Lake Formation yang diperlukan untuk menjalankan operasi bergantung pada panggilan AWS Glue Data Catalog dan Amazon S3 API yang memulai tugas Spark dan dapat diringkas sebagai berikut:
+ Izin **DESCRIBE** memungkinkan peran runtime untuk membaca tabel atau metadata database dalam Katalog Data
+ Izin **ALTER** memungkinkan peran runtime untuk memodifikasi tabel atau metadata database dalam Katalog Data
+ Izin **DROP** memungkinkan peran runtime untuk menghapus tabel atau metadata database dari Katalog Data
+ Izin **SELECT** memungkinkan peran runtime membaca data tabel dari Amazon S3
+ **Izin INSERT** memungkinkan peran runtime untuk menulis data tabel ke Amazon S3
+ Izin **DELETE** memungkinkan peran runtime untuk menghapus data tabel dari Amazon S3
**catatan**  
Lake Formation mengevaluasi izin dengan malas saat pekerjaan Spark memanggil AWS Glue untuk mengambil metadata tabel dan Amazon S3 untuk mengambil data tabel. Pekerjaan yang menggunakan peran runtime dengan izin yang tidak mencukupi tidak akan gagal sampai Spark melakukan panggilan AWS Glue atau Amazon S3 yang memerlukan izin yang hilang.

**catatan**  
Dalam matriks tabel yang didukung berikut:   
Operasi yang ditandai sebagai **Didukung** secara eksklusif menggunakan kredensyal Lake Formation untuk mengakses data tabel untuk tabel yang terdaftar dengan Lake Formation. Jika izin Lake Formation tidak mencukupi, operasi tidak akan kembali ke kredensyal peran runtime. Untuk tabel yang tidak terdaftar di Lake Formation, kredensyal peran runtime pekerjaan mengakses data tabel.
Operasi yang ditandai sebagai **Didukung dengan izin IAM di lokasi Amazon S3** tidak menggunakan kredensyal Lake Formation untuk mengakses data tabel yang mendasarinya di Amazon S3. Untuk menjalankan operasi ini, peran runtime pekerjaan harus memiliki izin Amazon S3 IAM yang diperlukan untuk mengakses data tabel, terlepas dari apakah tabel terdaftar di Lake Formation.

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

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

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

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

**Konfigurasi Spark untuk Iceberg:** Jika Anda ingin menggunakan format Iceberg, atur konfigurasi berikut. Ganti `DB_LOCATION` dengan jalur Amazon S3 tempat tabel Iceberg Anda berada, dan ganti placeholder wilayah dan ID akun dengan nilai Anda sendiri.

```
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
```

Jika Anda ingin menggunakan format Iceberg pada versi EMR sebelumnya, gunakan perintah berikut sebagai gantinya:

```
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
```

**Contoh:**

Berikut adalah beberapa contoh bekerja dengan tabel 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/id_id/emr/latest/ManagementGuide/emr-lf-fgac1.html)

**Konfigurasi percikan untuk Hudi:**

Untuk memulai shell Spark pada EMR 7.10 atau versi yang lebih tinggi, gunakan perintah berikut:

```
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
```

Untuk memulai shell Spark pada versi EMR sebelumnya, gunakan perintah di bawah ini sebagai gantinya:

```
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
```

**Contoh:**

Berikut adalah beberapa contoh bekerja dengan tabel 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;
```

Untuk menanyakan snapshot terbaru dari copy-on-write tabel:

```
SELECT * FROM my_hudi_cow_table
```

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

Untuk menanyakan data tabel terbaru yang dipadatkan, Anda dapat menanyakan `MOR` tabel yang dioptimalkan baca yang diakhiran dengan: `_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/id_id/emr/latest/ManagementGuide/emr-lf-fgac1.html)

**Konfigurasi percikan untuk Danau Delta:**

Untuk menggunakan Delta Lake dengan Lake Formation di EMR 7.10 dan yang lebih tinggi, jalankan perintah berikut:

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

Untuk menggunakan Danau Delta dengan Lake Formation di EMR 6.15 hingga 7.9, jalankan yang berikut

```
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
```

Jika Anda ingin Lake Formation menggunakan server rekaman untuk mengelola katalog Spark Anda, atur `spark.sql.catalog.<managed_catalog_name>.lf.managed` ke true.

**Contoh:**

Berikut adalah beberapa contoh bekerja dengan tabel 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 *;
```

**Membuat tabel Delta Lake di AWS Glue Data Catalog**

Amazon EMR dengan Lake Formation tidak mendukung perintah DDL dan pembuatan tabel Delta dalam rilis EMR lebih awal dari 7.12. Ikuti langkah-langkah ini untuk membuat tabel di Katalog Data AWS Glue.

1. Gunakan contoh berikut untuk membuat tabel Delta. Pastikan lokasi S3 Anda ada.

   ```
   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. Untuk melihat detail tabel Anda, buka [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Di navigasi kiri, perluas **Katalog Data**, pilih **Tabel**, lalu pilih tabel yang Anda buat. Di bawah **Skema**, Anda akan melihat bahwa tabel Delta yang Anda buat dengan Spark menyimpan semua kolom dalam tipe data di Glue. `array<string>` AWS 

1. Untuk menentukan filter kolom dan tingkat sel di Lake Formation, hapus `col` kolom dari skema Anda, lalu tambahkan kolom yang ada di skema tabel Anda. Dalam contoh ini, tambahkan kolom`x`,`y`, dan`z`.

------

Dengan fitur ini, Anda dapat menjalankan kueri snapshot pada copy-on-write tabel untuk menanyakan snapshot terbaru dari tabel pada saat komit atau pemadatan tertentu. Saat ini, klaster EMR Amazon yang mendukung Lake Formation harus mengambil kolom waktu komit Hudi untuk melakukan kueri tambahan dan kueri perjalanan waktu. Itu tidak mendukung `timestamp as of` sintaks dan fungsinya Spark. `Spark.read()` Sintaks yang benar adalah`select * from table where _hoodie_commit_time <= point_in_time`. Untuk informasi selengkapnya, lihat [Kueri Tunjuk Waktu Perjalanan Waktu di tabel Hudi](https://cwiki.apache.org/confluence/display/HUDI/RFC+-+07+%3A+Point+in+time+Time-Travel+queries+on+Hudi+table).

**catatan**  
Kinerja pembacaan pada cluster Lake Formation mungkin lebih lambat karena optimasi yang tidak didukung. Fitur-fitur ini termasuk daftar file berdasarkan metadata Hudi, dan melewatkan data. Kami menyarankan Anda menguji kinerja aplikasi Anda untuk memastikan bahwa itu memenuhi persyaratan Anda.

# Bekerja dengan tampilan Katalog Data Glue di Amazon EMR


**catatan**  
Membuat dan mengelola tampilan Katalog Data AWS Glue untuk digunakan dengan EMR di EC2 tersedia dengan rilis Amazon [EMR](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-7100-release.html) 7.10.0 dan yang lebih baru.

Anda dapat membuat dan mengelola tampilan di Katalog Data AWS Glue untuk digunakan dengan EMR di EC2. Ini umumnya dikenal sebagai tampilan AWS Glue Data Catalog. Tampilan ini berguna karena mendukung beberapa mesin kueri SQL, sehingga Anda dapat mengakses tampilan yang sama di berbagai AWS layanan, seperti EMR di EC2, Amazon Athena, dan Amazon Redshift.

Dengan membuat tampilan di Katalog Data, Anda dapat menggunakan hibah sumber daya dan kontrol akses berbasis tag AWS Lake Formation untuk memberikan akses ke sana. Dengan menggunakan metode kontrol akses ini, Anda tidak perlu mengonfigurasi akses tambahan ke tabel yang Anda referensikan saat membuat tampilan. Metode pemberian izin ini disebut semantik definer, dan pandangan ini disebut tampilan definer. Untuk informasi selengkapnya tentang kontrol akses di Lake Formation, lihat [Memberikan dan mencabut izin pada sumber daya Katalog Data di Panduan Pengembang](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html) AWS Lake Formation.

Tampilan Katalog Data berguna untuk kasus penggunaan berikut:
+ **Kontrol akses granular** — Anda dapat membuat tampilan yang membatasi akses data berdasarkan izin yang dibutuhkan pengguna. Misalnya, Anda dapat menggunakan tampilan di Katalog Data untuk mencegah karyawan yang tidak bekerja di departemen SDM melihat informasi identitas pribadi (PII).
+ **Definisi tampilan lengkap** — Dengan menerapkan filter pada tampilan Anda di Katalog Data, Anda memastikan bahwa catatan data yang tersedia dalam tampilan di Katalog Data selalu lengkap.
+ **Keamanan yang ditingkatkan** — Definisi kueri yang digunakan untuk membuat tampilan harus lengkap. Manfaat ini berarti bahwa tampilan dalam Katalog Data kurang rentan terhadap perintah SQL dari aktor jahat.
+ **Berbagi data sederhana** — Bagikan data dengan AWS akun lain tanpa memindahkan data. Untuk informasi selengkapnya, lihat [Berbagi data lintas akun di Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-permissions.html).

## Membuat tampilan Katalog Data


Ada berbagai cara untuk membuat tampilan Katalog Data. Ini termasuk menggunakan AWS CLI atau Spark SQL. Beberapa contoh mengikuti.

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

Berikut ini menunjukkan sintaks untuk membuat tampilan Data Catalog. Perhatikan jenis `MULTI DIALECT` tampilan. Ini membedakan tampilan Katalog Data dari tampilan lain. `SECURITY`Predikat ditentukan sebagai`DEFINER`. Ini menunjukkan tampilan Katalog Data dengan `DEFINER` semantik.

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

Berikut ini adalah contoh `CREATE` pernyataan, mengikuti sintaks:

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

Anda juga dapat membuat tampilan dalam mode dry-run, menggunakan SQL, untuk menguji pembuatan tampilan, tanpa benar-benar membuat sumber daya. Menggunakan opsi ini menghasilkan “dry run” yang memvalidasi input dan, jika validasi berhasil, mengembalikan JSON dari objek tabel AWS Glue yang akan mewakili tampilan. Dalam hal ini, Tampilan sebenarnya tidak dibuat.

```
CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW view_name
SECURITY DEFINER 
[ SHOW VIEW JSON ]
AS view-sql
```

------
#### [ Using the AWS CLI ]

**catatan**  
Saat Anda menggunakan perintah CLI, SQL yang digunakan untuk membuat tampilan tidak diurai. Hal ini dapat mengakibatkan kasus di mana tampilan dibuat, tetapi kueri tidak berhasil. Pastikan untuk menguji sintaks SQL Anda sebelum membuat tampilan.

Anda menggunakan perintah CLI berikut untuk membuat tampilan:

```
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"
        }
      ]
    }
  }
}'
```

------

## Operasi tampilan yang didukung


Fragmen perintah berikut menunjukkan kepada Anda berbagai cara untuk bekerja dengan tampilan Katalog Data:
+ **CREATE VIEW**

  Membuat tampilan data-katalog. Berikut ini adalah contoh yang menunjukkan pembuatan tampilan dari tabel yang ada:

  ```
  CREATE PROTECTED MULTI DIALECT VIEW catalog_view 
  SECURITY DEFINER AS SELECT * FROM my_catalog.my_database.source_table
  ```
+ **UBAH TAMPILAN**

  Sintaks yang tersedia:
  + `ALTER VIEW view_name [FORCE] ADD DIALECT AS query`
  + `ALTER VIEW view_name [FORCE] UPDATE DIALECT AS query`
  + `ALTER VIEW view_name DROP DIALECT`

  Anda dapat menggunakan `FORCE ADD DIALECT` opsi untuk memaksa memperbarui skema dan sub objek sesuai dialek mesin baru. Perhatikan bahwa melakukan hal ini dapat mengakibatkan kesalahan kueri jika Anda juga tidak menggunakannya `FORCE` untuk memperbarui dialek mesin lainnya. Berikut ini menunjukkan contoh:

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

  Berikut ini menunjukkan cara mengubah tampilan untuk memperbarui dialek:

  ```
  ALTER VIEW catalog_view UPDATE DIALECT AS 
  SELECT count(*) FROM my_catalog.my_database.source_table;
  ```
+ **JELASKAN TAMPILAN**

  Sintaks yang tersedia untuk menggambarkan tampilan:
  + `SHOW COLUMNS {FROM|IN} view_name [{FROM|IN} database_name]`— Jika pengguna memiliki izin AWS Glue dan Lake Formation yang diperlukan untuk menggambarkan tampilan, mereka dapat membuat daftar kolom. Berikut ini menunjukkan beberapa contoh perintah untuk menampilkan kolom:

    ```
    SHOW COLUMNS FROM my_database.source_table;    
    SHOW COLUMNS IN my_database.source_table;
    ```
  + `DESCRIBE view_name`— Jika pengguna memiliki izin AWS Glue dan Lake Formation yang diperlukan untuk mendeskripsikan tampilan, mereka dapat mencantumkan kolom dalam tampilan bersama dengan metadatanya.
+ **TAMPILAN DROP**

  Sintaks yang tersedia:
  + `DROP VIEW [ IF EXISTS ] view_name`

    Contoh berikut menunjukkan `DROP` pernyataan yang menguji apakah tampilan ada sebelum menjatuhkannya:

    ```
    DROP VIEW IF EXISTS catalog_view;
    ```
+ **TAMPILKAN TAMPILAN BUAT**
  + `SHOW CREATE VIEW view_name`- Menunjukkan pernyataan SQL yang menciptakan tampilan yang ditentukan. Berikut ini adalah contoh yang menunjukkan pembuatan tampilan data-katalog:

    ```
    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)
    ```
+ **TAMPILKAN TAMPILAN**

  Daftar semua tampilan dalam katalog seperti tampilan biasa, tampilan multi-dialek (MDV), dan MDV tanpa dialek Spark. Sintaks yang tersedia adalah sebagai berikut:
  + `SHOW VIEWS [{ FROM | IN } database_name] [LIKE regex_pattern]`:

    Berikut ini menunjukkan contoh perintah untuk menampilkan tampilan:

    ```
    SHOW VIEWS IN marketing_analytics LIKE 'catalog_view*';
    ```

Untuk informasi selengkapnya tentang membuat dan mengonfigurasi tampilan data-katalog, lihat Membangun tampilan [Katalog Data AWS Glue di Panduan](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html) Pengembang AWS Lake Formation .

## Menanyakan tampilan Katalog Data


 Setelah membuat tampilan Katalog Data, Anda dapat melakukan kueri menggunakan pekerjaan Amazon EMR Spark yang mengaktifkan kontrol akses berbutir AWS Lake Formation halus. Peran runtime pekerjaan harus memiliki `SELECT` izin Lake Formation pada tampilan Katalog Data. Anda tidak perlu memberikan akses ke tabel dasar yang direferensikan dalam tampilan. 

Setelah semuanya disiapkan, Anda dapat menanyakan tampilan Anda. Misalnya, setelah membuat aplikasi EMR Amazon di EMR Studio, Anda dapat menjalankan kueri berikut untuk mengakses tampilan.

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

Fungsi yang bermanfaat adalah`invoker_principal`. Ia mengembalikan pengenal unik dari peran runtime pekerjaan EMRS. Ini dapat digunakan untuk mengontrol output tampilan, berdasarkan prinsip pemanggilan. Anda dapat menggunakan ini untuk menambahkan kondisi dalam tampilan yang menyempurnakan hasil kueri, berdasarkan peran pemanggilan. Peran runtime pekerjaan harus memiliki izin untuk tindakan `LakeFormation:GetDataLakePrincipal` IAM untuk menggunakan fungsi ini.

```
select invoker_principal();
```

Anda dapat menambahkan fungsi ini ke `WHERE` klausa, misalnya, untuk memperbaiki hasil kueri.

## Pertimbangan dan batasan


Saat Anda membuat tampilan Katalog Data, berikut ini berlaku:
+ Anda hanya dapat membuat tampilan Katalog Data dengan Amazon EMR 7.10 ke atas.
+ Penentu tampilan Katalog Data harus memiliki `SELECT` akses ke tabel dasar dasar yang diakses oleh tampilan. Membuat tampilan Katalog Data gagal jika tabel dasar tertentu memiliki filter Lake Formation yang dikenakan pada peran definer.
+ Tabel dasar tidak boleh memiliki izin `IAMAllowedPrincipals` data lake di Lake Formation. Jika ada, kesalahan *tampilan Multi Dialek mungkin hanya referensi tabel tanpa izin IAMAllowed Prinsipal* terjadi.
+ Lokasi Amazon S3 tabel harus terdaftar sebagai lokasi danau data Lake Formation. Jika tabel tidak terdaftar, kesalahan *tampilan Multi Dialek mungkin hanya referensi tabel terkelola Lake Formation* terjadi. Untuk informasi tentang cara mendaftarkan lokasi Amazon S3 di Lake Formation, lihat [Mendaftarkan lokasi Amazon S3](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html) di AWS Lake Formation Panduan Pengembang.
+ Anda hanya dapat membuat tampilan Katalog `PROTECTED` Data. `UNPROTECTED`tampilan tidak didukung.
+ Anda tidak dapat mereferensikan tabel di AWS akun lain dalam definisi tampilan Katalog Data. Anda juga tidak dapat mereferensikan tabel di akun yang sama yang berada di wilayah terpisah.
+ Untuk berbagi data di seluruh akun atau wilayah, seluruh tampilan harus dibagikan lintas akun dan lintas wilayah, menggunakan tautan sumber daya Lake Formation.
+ Fungsi yang ditentukan pengguna (UDFs) tidak didukung.
+ Anda dapat menggunakan tampilan berdasarkan tabel Iceberg. Format meja terbuka Apache Hudi dan Delta Lake juga didukung.
+ Anda tidak dapat mereferensikan tampilan lain dalam tampilan Katalog Data.
+ Skema tampilan AWS Glue Data Catalog selalu disimpan menggunakan huruf kecil. Misalnya, jika Anda menggunakan pernyataan DDL untuk membuat tampilan Katalog Data Glue dengan kolom bernama`Castle`, kolom yang dibuat dalam Katalog Data Glue akan dibuat huruf kecil, untuk. `castle` Jika Anda kemudian menentukan nama kolom dalam kueri DMLsebagai `Castle` atau`CASTLE`, EMR Spark akan membuat nama huruf kecil untuk Anda dalam rangka untuk menjalankan query. Tetapi judul kolom ditampilkan menggunakan casing yang Anda tentukan dalam kueri. 

  Jika Anda ingin kueri gagal dalam kasus di mana nama kolom yang ditentukan dalam kueri DMLtidak cocok dengan nama kolom di Katalog Data Glue, Anda dapat mengatur`spark.sql.caseSensitive=true`.

# Pertimbangan untuk Amazon EMR dengan Lake Formation
Pertimbangan-pertimbangan

Amazon EMR dengan Lake Formation tersedia di semua wilayah yang [tersedia](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-region.html).

## Pertimbangan untuk Amazon EMR dengan Lake Formation untuk versi 7.9 dan sebelumnya
Pertimbangan-pertimbangan

Pertimbangkan hal berikut saat menggunakan AWS Lake Formation EMR 7.9 dan versi sebelumnya.
+ [Kontrol akses berbutir halus](emr-lf-enable.md#emr-lf-fgac-perms) pada tingkat baris, kolom, dan sel tersedia di cluster dengan rilis Amazon EMR 6.15 dan lebih tinggi.
+ Pengguna dengan akses ke tabel dapat mengakses semua properti tabel itu. Jika Anda memiliki kontrol akses berbasis Lake Formation pada tabel, tinjau tabel untuk memastikan bahwa properti tidak berisi data atau informasi sensitif apa pun.
+ Cluster EMR Amazon dengan Lake Formation tidak mendukung fallback Spark ke HDFS saat Spark mengumpulkan statistik tabel. Ini biasanya membantu mengoptimalkan kinerja kueri.
+ Operasi yang mendukung kontrol akses berdasarkan Lake Formation dengan tabel Apache Spark yang tidak diatur termasuk dan. `INSERT INTO` `INSERT OVERWRITE`
+ Operasi yang mendukung kontrol akses berdasarkan Lake Formation dengan Apache Spark dan Apache Hive meliputi`SELECT`,,,, `DESCRIBE``SHOW DATABASE`, `SHOW TABLE` dan. `SHOW COLUMN` `SHOW PARTITION`
+ Amazon EMR tidak mendukung kontrol akses ke operasi berbasis Lake Formation berikut: 
  + Menulis ke tabel yang diatur
  + Amazon EMR tidak mendukung. `CREATE TABLE` Amazon EMR 6.10.0 dan dukungan yang lebih tinggi. `ALTER TABLE`
  + Pernyataan DML selain `INSERT` perintah.
+ Ada perbedaan kinerja antara kueri yang sama dengan dan tanpa kontrol akses berbasis Lake Formation.
+ Anda hanya dapat menggunakan Amazon EMR dengan Lake Formation untuk pekerjaan Spark.
+ Propagasi Identitas Tepercaya tidak didukung dengan hierarki multi-katalog di Katalog Data Glue. Untuk informasi selengkapnya, lihat [Bekerja dengan hierarki multi-katalog di Katalog Data AWS Glue](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-multi-catalog.html).

## Pertimbangan untuk Amazon EMR dengan Lake Formation untuk versi 7.10 dan yang lebih baru
Pertimbangan-pertimbangan

Pertimbangkan hal berikut saat menggunakan Amazon EMR dengan AWS Lake Formation EMR 7.10 dan versi yang lebih baru.
+ Amazon EMR mendukung kontrol akses berbutir halus melalui Lake Formation hanya untuk Apache Hive, Apache Iceberg, Apache Delta dan Apache Hudi tabel. Format Apache Hive termasuk Parket, ORC, dan xSV CSV. 
+ Untuk aplikasi yang mendukung Lake Formation, log Spark ditulis ke Amazon S3 dalam dua grup: log ruang sistem dan log ruang pengguna. Log ruang sistem mungkin berisi informasi sensitif seperti skema tabel lengkap. Untuk melindungi data ini, Amazon EMR menyimpan log ruang sistem di lokasi terpisah dari log ruang pengguna. Sangat disarankan agar administrator akun tidak memberikan pengguna akses ke log ruang sistem.
+ Jika Anda mendaftarkan lokasi tabel dengan Lake Formation, akses data akan dikontrol secara eksklusif oleh izin peran yang digunakan untuk pendaftaran, bukan oleh peran runtime pekerjaan Amazon EMR. Jika peran registrasi salah dikonfigurasi, pekerjaan yang mencoba mengakses tabel akan gagal.
+ Anda tidak dapat mematikan `DynamicResourceAllocation` untuk pekerjaan Lake Formation.
+ Anda hanya dapat menggunakan Lake Formation dengan pekerjaan Spark.
+ Amazon EMR dengan Lake Formation hanya mendukung satu sesi Spark selama pekerjaan.
+ Amazon EMR dengan Lake Formation hanya mendukung kueri tabel lintas akun yang dibagikan melalui tautan sumber daya.
+ Berikut ini tidak didukung:
  + Kumpulan data terdistribusi yang tangguh (RDD)
  + Streaming percikan
  + Menulis dengan izin yang diberikan Lake Formation
  + Kontrol akses untuk kolom bersarang
+ Amazon EMR memblokir fungsionalitas yang mungkin merusak isolasi lengkap driver sistem, termasuk yang berikut ini:
  + UDTs, HiveUDFs, dan fungsi apa pun yang ditentukan pengguna yang melibatkan kelas khusus
  + Sumber data kustom
  + Pasokan stoples tambahan untuk ekstensi Spark, konektor, atau metastore
  + Perintah `ANALYZE TABLE`
+ Untuk menegakkan kontrol akses, `EXPLAIN PLAN` dan operasi DDL seperti `DESCRIBE TABLE` tidak mengekspos informasi terbatas.
+ Amazon EMR membatasi akses ke driver sistem Spark log pada aplikasi yang mendukung Lake Formation. Karena driver sistem berjalan dengan izin tinggi, peristiwa dan log yang dihasilkan driver sistem dapat mencakup informasi sensitif. Untuk mencegah pengguna atau kode yang tidak sah mengakses data sensitif ini, Amazon EMR menonaktifkan akses ke log driver sistem.

  Log profil sistem selalu disimpan dalam penyimpanan terkelola - ini adalah pengaturan wajib yang tidak dapat dinonaktifkan. Log ini disimpan dengan aman dan dienkripsi menggunakan kunci KMS yang Dikelola Pelanggan atau kunci KMS Terkelola AWS . 

  [Jika aplikasi EMR Amazon Anda berada dalam subnet pribadi dengan titik akhir VPC untuk Amazon S3 dan Anda melampirkan kebijakan titik akhir untuk mengontrol akses, sebelum pekerjaan Anda dapat mengirim data log ke AWS Amazon S3 Terkelola, Anda harus menyertakan izin yang dirinci dalam Penyimpanan terkelola dalam kebijakan VPC Anda ke titik akhir gateway S3.](logging.html#jobs-log-storage-managed-storage) Untuk permintaan pemecahan masalah, hubungi AWS dukungan.
+ Jika Anda mendaftarkan lokasi tabel dengan Lake Formation, jalur akses data akan melewati kredensyal yang disimpan Lake Formation terlepas dari izin IAM untuk peran runtime pekerjaan Amazon EMR. Jika Anda salah mengonfigurasi peran yang terdaftar dengan lokasi tabel, pekerjaan yang dikirimkan yang menggunakan peran dengan izin IAM S3 ke lokasi tabel akan gagal.
+ Menulis ke tabel Lake Formation menggunakan izin IAM daripada izin yang diberikan Lake Formation. Jika peran runtime pekerjaan Anda memiliki izin S3 yang diperlukan, Anda dapat menggunakannya untuk menjalankan operasi penulisan.

Berikut ini adalah pertimbangan dan batasan saat menggunakan Apache Iceberg:
+ Anda hanya dapat menggunakan Apache Iceberg dengan katalog sesi dan tidak sewenang-wenang bernama katalog.
+ Tabel gunung es yang terdaftar di Lake Formation hanya mendukung tabel metadata`history`,,,, `metadata_log_entries``snapshots`, `files` dan. `manifests` `refs` Amazon EMR menyembunyikan kolom yang mungkin memiliki data sensitif, seperti`partitions`,, dan. `path` `summaries` Batasan ini tidak berlaku untuk tabel Gunung Es yang tidak terdaftar di Lake Formation.
+ Tabel yang tidak Anda daftarkan di Lake Formation mendukung semua prosedur yang disimpan Gunung Es. Prosedur `register_table` dan `migrate` prosedur tidak didukung untuk tabel apa pun.
+ Kami menyarankan Anda menggunakan Iceberg DataFrameWriter V2 alih-alih V1.

## Pertimbangan untuk Amazon EMR dengan Lake Formation untuk versi 7.12 dan yang lebih baru


### Umum


Tinjau batasan berikut saat menggunakan Lake Formation dengan Amazon EMR.
+ Anda tidak dapat mematikan `DynamicResourceAllocation` untuk pekerjaan Lake Formation.
+ Anda hanya dapat menggunakan Lake Formation dengan pekerjaan Spark.
+ Amazon EMR dengan Lake Formation hanya mendukung satu sesi Spark selama pekerjaan.
+ Amazon EMR dengan Lake Formation hanya mendukung kueri tabel lintas akun yang dibagikan melalui tautan sumber daya.
+ Berikut ini tidak didukung:
  + Kumpulan data terdistribusi yang tangguh (RDD)
  + Streaming percikan
  + Kontrol akses untuk kolom bersarang
+ Amazon EMR memblokir fungsionalitas yang mungkin merusak isolasi lengkap driver sistem, termasuk yang berikut ini:
  + UDTs, HiveUDFs, dan fungsi apa pun yang ditentukan pengguna yang melibatkan kelas khusus
  + Sumber data kustom
  + Pasokan stoples tambahan untuk ekstensi Spark, konektor, atau metastore
  + Perintah `ANALYZE TABLE`
+ [Jika aplikasi EMR Amazon Anda berada dalam subnet pribadi dengan titik akhir VPC untuk Amazon S3 dan Anda melampirkan kebijakan titik akhir untuk mengontrol akses, sebelum pekerjaan Anda dapat mengirim data log ke AWS Amazon S3 Terkelola, Anda harus menyertakan izin yang dirinci dalam Penyimpanan terkelola dalam kebijakan VPC Anda ke titik akhir gateway S3.](logging.html#jobs-log-storage-managed-storage) Untuk permintaan pemecahan masalah, hubungi AWS dukungan.
+ Dimulai dengan Amazon EMR 7.9.0, Spark FGAC mendukung AFile Sistem S3 saat digunakan dengan skema s3a://.
+ Amazon EMR 7.11 mendukung pembuatan tabel terkelola menggunakan CTAS.
+ Amazon EMR 7.12 mendukung pembuatan tabel terkelola dan eksternal menggunakan CTAS.

## Izin

+ Untuk menegakkan kontrol akses, EXPLORE PLAN dan operasi DDL seperti DESCRIBE TABLE tidak mengekspos informasi terbatas.
+ Saat Anda mendaftarkan lokasi tabel dengan Lake Formation, akses data menggunakan kredensyal yang disimpan Lake Formation, bukan izin IAM peran runtime pekerjaan EMR Tanpa Server. Pekerjaan akan gagal jika peran terdaftar untuk lokasi tabel salah dikonfigurasi, bahkan ketika peran runtime memiliki izin IAM S3 untuk lokasi tersebut.
+ Dimulai dengan Amazon EMR 7.12, Anda dapat menulis ke tabel Hive dan Iceberg yang ada menggunakan DataFrameWriter (V2) dengan kredensyal Lake Formation dalam mode append. Untuk operasi menimpa atau saat membuat tabel baru, EMR menggunakan kredensyal peran runtime untuk memodifikasi data tabel.
+ Batasan berikut berlaku saat menggunakan tampilan atau tabel cache sebagai data sumber (batasan ini tidak berlaku untuk tampilan AWS Glue Data Catalog):
  + Untuk operasi MERGE, DELETE, dan UPDATE
    + Didukung: Menggunakan tampilan dan tabel cache sebagai tabel sumber.
    + Tidak didukung: Menggunakan tampilan dan tabel cache dalam klausa penetapan dan kondisi.
  + Untuk CREATE OR REPLACE dan REPLACE TABLE AS SELECT operasi:
    + Tidak didukung: Menggunakan tampilan dan tabel cache sebagai tabel sumber.
+ Tabel Delta Lake dengan UDFs data sumber mendukung operasi MERGE, DELETE, dan UPDATE hanya ketika vektor penghapusan diaktifkan.

## Log dan debugging

+ Amazon EMR membatasi akses ke driver sistem Spark log pada aplikasi yang mendukung Lake Formation. Karena driver sistem berjalan dengan izin tinggi, peristiwa dan log yang dihasilkan driver sistem dapat mencakup informasi sensitif. Untuk mencegah pengguna atau kode yang tidak sah mengakses data sensitif ini, Amazon EMR menonaktifkan akses ke log driver sistem.

  Log profil sistem selalu disimpan dalam penyimpanan terkelola - ini adalah pengaturan wajib yang tidak dapat dinonaktifkan. Log ini disimpan dengan aman dan dienkripsi menggunakan kunci KMS yang Dikelola Pelanggan atau kunci KMS Terkelola AWS . 

## Gunung es


Tinjau pertimbangan berikut saat menggunakan Apache Iceberg:
+ Anda hanya dapat menggunakan Apache Iceberg dengan katalog sesi dan tidak sewenang-wenang bernama katalog.
+ Tabel gunung es yang terdaftar di Lake Formation hanya mendukung tabel metadata`history`,,,, `metadata_log_entries``snapshots`, `files` dan. `manifests` `refs` Amazon EMR menyembunyikan kolom yang mungkin memiliki data sensitif, seperti`partitions`,, dan. `path` `summaries` Batasan ini tidak berlaku untuk tabel Gunung Es yang tidak terdaftar di Lake Formation.
+ Tabel yang tidak terdaftar di Lake Formation mendukung semua prosedur yang disimpan Gunung Es. Prosedur `register_table` dan `migrate` prosedur tidak didukung untuk tabel apa pun.
+ Kami menyarankan Anda menggunakan Iceberg DataFrameWriter V2 alih-alih V1.

# Spark kontrol akses berbutir halus asli alllowlisted API PySpark


Untuk menjaga keamanan dan kontrol akses data, Spark fine-grained access control (FGAC) membatasi fungsi tertentu. PySpark Pembatasan ini diberlakukan melalui:
+ Pemblokiran eksplisit yang mencegah eksekusi fungsi
+ Ketidakcocokan arsitektur yang membuat fungsi tidak berfungsi
+ Fungsi yang dapat menimbulkan kesalahan, mengembalikan akses pesan yang ditolak, atau tidak melakukan apa pun saat dipanggil

 PySpark Fitur berikut tidak didukung di Spark FGAC:
+ Operasi RDD (diblokir dengan Spark RDDUnsupported Exception)
+ Spark Connect (tidak didukung)
+ Spark Streaming (tidak didukung)

Meskipun kami telah menguji fungsi yang terdaftar di lingkungan Native Spark FGAC dan mengonfirmasi bahwa fungsi tersebut berfungsi seperti yang diharapkan, pengujian kami biasanya hanya mencakup penggunaan dasar setiap API. Fungsi dengan beberapa jenis input atau jalur logika kompleks mungkin memiliki skenario yang belum diuji.

Untuk fungsi apa pun yang tidak tercantum di sini dan tidak jelas bagian dari kategori yang tidak didukung di atas, kami merekomendasikan:
+ Mengujinya terlebih dahulu di lingkungan gamma atau penerapan skala kecil
+ Memverifikasi perilaku mereka sebelum menggunakannya dalam produksi

**catatan**  
Jika Anda melihat metode kelas terdaftar tetapi bukan kelas dasarnya, metode tersebut harus tetap berfungsi—itu hanya berarti kita belum secara eksplisit memverifikasi konstruktor kelas dasar.

 PySpark API diatur ke dalam modul. Dukungan umum untuk metode dalam setiap modul dirinci dalam tabel di bawah ini.


| Nama modul | Status | Catatan | 
| --- | --- | --- | 
|  pyspark\$1core  |  Didukung  |  Modul ini berisi kelas RDD utama, dan fungsi-fungsi ini sebagian besar tidak didukung.  | 
|  pyspark\$1sql  |  Didukung  |  | 
|  pyspark\$1testing  |  Didukung  |  | 
|  pyspark\$1resource  |  Didukung  |  | 
|  pyspark\$1streaming  |  Diblokir  |  Penggunaan streaming diblokir di Spark FGAC.  | 
|  pyspark\$1mllib  |  Eksperimental  |  Modul ini berisi operasi MLberbasis RDD, dan fungsi-fungsi ini sebagian besar tidak didukung. Modul ini tidak diuji secara menyeluruh.  | 
|  pyspark\$1ml  |  Eksperimental  |  Modul ini berisi operasi DataFrame berbasis ML, dan fungsi-fungsi ini sebagian besar didukung. Modul ini tidak diuji secara menyeluruh.  | 
|  pyspark\$1panda  |  Didukung  |    | 
|  pyspark\$1pandas\$1slow  |  Didukung  |    | 
| pyspark\$1connect |  Diblokir  |  Penggunaan Spark Connect diblokir di Spark FGAC.  | 
| pyspark\$1pandas\$1connect |  Diblokir  |  Penggunaan Spark Connect diblokir di Spark FGAC.  | 
| pyspark\$1pandas\$1slow\$1connect |  Diblokir  |  Penggunaan Spark Connect diblokir di Spark FGAC.  | 
| pyspark\$1errors |  Eksperimental  |  Modul ini tidak diuji secara menyeluruh. Kelas kesalahan khusus tidak dapat digunakan.  | 

**Daftar Izin API**

Untuk daftar yang dapat diunduh dan lebih mudah dicari, file dengan modul dan kelas tersedia di [fungsi Python yang diizinkan di](samples/Python functions allowed in Native FGAC.zip) Native FGAC.

# Akses meja lengkap Lake Formation untuk Amazon EMR di EC2


Dengan Amazon EMR merilis 7.8.0 dan yang lebih tinggi, Anda dapat memanfaatkan Lake AWS Formation with Glue Data Catalog di mana peran runtime pekerjaan memiliki izin tabel lengkap tanpa batasan kontrol akses berbutir halus. Kemampuan ini memungkinkan Anda membaca dan menulis ke tabel yang dilindungi oleh Lake Formation dari Amazon EMR Anda pada batch EC2 Spark dan pekerjaan interaktif. Lihat bagian berikut untuk mempelajari lebih lanjut tentang Lake Formation dan cara menggunakannya dengan Amazon EMR di EC2.

## Menggunakan Lake Formation dengan akses meja penuh


Anda dapat mengakses tabel katalog Data Glue yang dilindungi AWS Lake Formation dari Amazon EMR pada pekerjaan EC2 Spark atau sesi interaktif di mana peran runtime pekerjaan memiliki akses tabel penuh. Anda tidak perlu mengaktifkan AWS Lake Formation di Amazon EMR pada aplikasi EC2. Saat pekerjaan Spark dikonfigurasi untuk Akses Tabel Penuh (FTA), kredensyal AWS Lake Formation digunakan untuk data read/write S3 untuk tabel terdaftar AWS Lake Formation, sedangkan kredensyal peran runtime pekerjaan akan digunakan untuk tabel yang tidak terdaftar di Lake Formation. read/write AWS 

**penting**  
Jangan aktifkan AWS Lake Formation untuk kontrol akses berbutir halus. Pekerjaan tidak dapat secara bersamaan menjalankan Akses Tabel Penuh (FTA) dan Kontrol Akses Berbutir Halus (FGAC) pada cluster atau aplikasi EMR yang sama.

### Langkah 1: Aktifkan Akses Tabel Penuh di Lake Formation


Untuk menggunakan mode Akses Tabel Penuh (FTA), Anda harus mengizinkan mesin kueri pihak ketiga mengakses data tanpa validasi tag sesi IAM di Lake Formation AWS . Untuk mengaktifkan, ikuti langkah-langkah dalam [Integrasi aplikasi untuk akses tabel penuh](https://docs.aws.amazon.com/lake-formation/latest/dg/full-table-credential-vending.html).

**catatan**  
 Saat mengakses tabel lintas akun, akses tabel penuh harus diaktifkan di akun produsen dan konsumen. Dengan cara yang sama, saat mengakses tabel lintas wilayah, pengaturan ini harus diaktifkan di wilayah produsen dan konsumen. 

### Langkah 2: Siapkan izin IAM untuk peran runtime pekerjaan


Untuk akses baca atau tulis ke data dasar, selain izin Lake Formation, peran runtime pekerjaan memerlukan izin `lakeformation:GetDataAccess` IAM. Dengan izin ini, Lake Formation memberikan permintaan kredensyal sementara untuk mengakses data.

Berikut ini adalah contoh kebijakan tentang cara memberikan izin IAM untuk mengakses skrip di Amazon S3, mengunggah log ke S3, izin AWS Glue API, dan izin untuk mengakses Lake Formation.

#### Langkah 2.1 Konfigurasikan izin Lake Formation

+ Pekerjaan percikan yang membaca data dari S3 memerlukan izin Lake Formation SELECT.
+ Memicu pekerjaan yang write/delete data di S3 memerlukan izin Lake Formation ALL (SUPER).
+ Pekerjaan Spark yang berinteraksi dengan katalog Glue Data memerlukan izin DESCRIPTION, ALTER, DROP yang sesuai.

Untuk informasi selengkapnya, lihat [Memberikan izin pada sumber daya Katalog Data](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html).

### Langkah 3: Inisialisasi sesi Spark untuk Akses Tabel Penuh menggunakan Lake Formation


#### Prasyarat


AWS Glue Data Catalog harus dikonfigurasi sebagai metastore untuk mengakses tabel Lake Formation.

Atur pengaturan berikut untuk mengkonfigurasi katalog Glue sebagai metastore:

```
--conf spark.sql.catalogImplementation=hive
--conf spark.hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
```

Untuk informasi selengkapnya tentang mengaktifkan Katalog Data untuk Amazon EMR di EC2, lihat [konfigurasi Metastore untuk Amazon](metastore-config.html) EMR di EC2.

Untuk mengakses tabel yang terdaftar dengan AWS Lake Formation, konfigurasi berikut perlu disetel selama inisialisasi Spark untuk mengonfigurasi Spark agar menggunakan kredensyal Lake Formation AWS .

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

```
‐‐conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver
--conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true 
--conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true
--conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true
--conf spark.sql.catalog.createDirectoryAfterTable.enabled=true
--conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
```

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

```
--conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog
--conf spark.sql.catalog.spark_catalog.warehouse=S3_DATA_LOCATION
--conf spark.sql.catalog.spark_catalog.client.region=REGION
--conf spark.sql.catalog.spark_catalog.type=glue
--conf spark.sql.catalog.spark_catalog.glue.account-id=ACCOUNT_ID
--conf spark.sql.catalog.spark_catalog.glue.lakeformation-enabled=true
--conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
```

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

```
‐‐conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver
--conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true 
--conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true
--conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true
--conf spark.sql.catalog.createDirectoryAfterTable.enabled=true
--conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
```

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

```
‐‐conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver
--conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true 
--conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true
--conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true
--conf spark.sql.catalog.createDirectoryAfterTable.enabled=true
--conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
--conf spark.jars=/usr/lib/hudi/hudi-spark-bundle.jar
--conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension
--conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog
--conf spark.serializer=org.apache.spark.serializer.KryoSerializer
```

------
+ `spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver`: Konfigurasikan Sistem File EMR (EMRFS) atau EMR S3A untuk menggunakan kredensyal Lake Formation S3 untuk tabel terdaftar Lake AWS Formation. Jika tabel tidak terdaftar, gunakan kredensyal peran runtime pekerjaan. 
+ `spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true`dan`spark.hadoop.fs.s3.folderObject.autoAction.disabled=true`: Konfigurasikan EMRFS untuk menggunakan aplikasi header tipe konten/x-directory alih-alih akhiran \$1folder\$1 saat membuat folder S3. Ini diperlukan saat membaca tabel Lake Formation, karena kredensyal Lake Formation tidak mengizinkan membaca folder tabel dengan akhiran \$1folder\$1.
+ `spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true`: Konfigurasikan Spark untuk melewati validasi kekosongan lokasi tabel sebelum pembuatan. Ini diperlukan untuk tabel terdaftar Lake Formation, karena kredensyal Lake Formation untuk memverifikasi lokasi kosong hanya tersedia setelah pembuatan tabel Katalog Data Glue. Tanpa konfigurasi ini, kredensyal peran runtime job akan memvalidasi lokasi tabel kosong.
+ `spark.sql.catalog.createDirectoryAfterTable.enabled=true`: Konfigurasikan Spark untuk membuat folder Amazon S3 setelah pembuatan tabel di metastore Hive. Ini diperlukan untuk tabel terdaftar Lake Formation, karena kredensyal Lake Formation untuk membuat folder S3 hanya tersedia setelah pembuatan tabel Glue Data Catalog.
+ `spark.sql.catalog.dropDirectoryBeforeTable.enabled=true`: Konfigurasikan Spark untuk menjatuhkan folder S3 sebelum penghapusan tabel di metastore Hive. Ini diperlukan untuk tabel terdaftar Lake Formation, karena kredensyal Lake Formation untuk menjatuhkan folder S3 tidak tersedia setelah penghapusan tabel dari Katalog Data Glue.
+ `spark.sql.catalog.<catalog>.glue.lakeformation-enabled=true`: Konfigurasikan katalog Gunung Es untuk menggunakan kredensyal AWS Lake Formation S3 untuk tabel terdaftar Lake Formation. Jika tabel tidak terdaftar, gunakan kredensyal lingkungan default.

#### Konfigurasikan mode akses tabel penuh di SageMaker Unified Studio


Untuk mengakses tabel terdaftar Lake Formation dari sesi Spark interaktif di JupyterLab notebook, gunakan mode izin kompatibilitas. Gunakan perintah ajaib %%configure untuk mengatur konfigurasi Spark Anda. Pilih konfigurasi berdasarkan jenis tabel Anda:

------
#### [ For Hive tables ]

```
%%configure -f
{
    "conf": {
        "spark.hadoop.fs.s3.credentialsResolverClass": "com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver",
        "spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject": true,
        "spark.hadoop.fs.s3.folderObject.autoAction.disabled": true,
        "spark.sql.catalog.skipLocationValidationOnCreateTable.enabled": true,
        "spark.sql.catalog.createDirectoryAfterTable.enabled": true,
        "spark.sql.catalog.dropDirectoryBeforeTable.enabled": true
    }
}
```

------
#### [ For Iceberg tables ]

```
%%configure -f
{
    "conf": {
        "spark.sql.catalog.spark_catalog": "org.apache.iceberg.spark.SparkSessionCatalog",
        "spark.sql.catalog.spark_catalog.warehouse": "S3_DATA_LOCATION",
        "spark.sql.catalog.spark_catalog.client.region": "REGION",
        "spark.sql.catalog.spark_catalog.type": "glue",
        "spark.sql.catalog.spark_catalog.glue.account-id": "ACCOUNT_ID",
        "spark.sql.catalog.spark_catalog.glue.lakeformation-enabled": "true",
        "spark.sql.catalog.dropDirectoryBeforeTable.enabled": "true", 
    }
}
```

------
#### [ For Delta Lake tables ]

```
%%configure -f
{
    "conf": {
        "spark.hadoop.fs.s3.credentialsResolverClass": "com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver",
        "spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject": true,
        "spark.hadoop.fs.s3.folderObject.autoAction.disabled": true,
        "spark.sql.catalog.skipLocationValidationOnCreateTable.enabled": true,
        "spark.sql.catalog.createDirectoryAfterTable.enabled": true,
        "spark.sql.catalog.dropDirectoryBeforeTable.enabled": true
    }
}
```

------
#### [ For Hudi tables ]

```
%%configure -f
{
    "conf": {
        "spark.hadoop.fs.s3.credentialsResolverClass": "com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver",
        "spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject": true,
        "spark.hadoop.fs.s3.folderObject.autoAction.disabled": true,
        "spark.sql.catalog.skipLocationValidationOnCreateTable.enabled": true,
        "spark.sql.catalog.createDirectoryAfterTable.enabled": true,
        "spark.sql.catalog.dropDirectoryBeforeTable.enabled": true,
        "spark.jars": "/usr/lib/hudi/hudi-spark-bundle.jar",
        "spark.sql.extensions": "org.apache.spark.sql.hudi.HoodieSparkSessionExtension",
        "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.hudi.catalog.HoodieCatalog",
        "spark.serializer": "org.apache.spark.serializer.KryoSerializer"
    }
}
```

------

Ganti placeholder:
+ `S3_DATA_LOCATION`: Jalur ember S3 Anda
+ `REGION`: AWS wilayah (misalnya, us-east-1)
+ `ACCOUNT_ID`: ID AWS akun Anda

**catatan**  
Anda harus mengatur konfigurasi ini sebelum menjalankan operasi Spark apa pun di buku catatan Anda.

#### Operasi yang Didukung


Operasi ini akan menggunakan kredensyal AWS Lake Formation untuk mengakses data tabel.
+ CREATE TABLE
+ ALTER TABLE
+ MASUKKAN KE
+ MASUKKAN TIMPA
+ UPDATE
+ BERGABUNG MENJADI
+ DELETE FROM
+ MENGANALISIS TABEL
+ MEJA PERBAIKAN
+ MEJA DROP
+ Percikan kueri sumber data
+ Sumber data Spark menulis

**catatan**  
Operasi yang tidak tercantum di atas akan terus menggunakan izin IAM untuk mengakses data tabel.

#### Pertimbangan-pertimbangan

+ Jika tabel Hive dibuat menggunakan pekerjaan yang tidak mengaktifkan akses tabel penuh, dan tidak ada catatan yang disisipkan, pembacaan atau penulisan berikutnya dari pekerjaan dengan akses tabel penuh akan gagal. Ini karena EMR Spark tanpa akses tabel penuh menambahkan `$folder$` akhiran ke nama folder tabel. Untuk mengatasi ini, Anda dapat:
  + Masukkan setidaknya satu baris ke dalam tabel dari pekerjaan yang tidak mengaktifkan FTA.
  + Konfigurasikan pekerjaan yang tidak mengaktifkan FTA untuk tidak menggunakan `$folder$` akhiran dalam nama folder di S3. Ini dapat dicapai dengan mengatur konfigurasi `spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true` Spark.
  + Buat folder S3 di lokasi tabel `s3://path/to/table/table_name` menggunakan konsol S3 atau AWS AWS S3 CLI.
+ Akses Tabel Lengkap didukung dengan EMR Filesystem (EMRFS) yang dimulai di Amazon EMR rilis 7.8.0, dan dengan sistem file S3A dimulai pada rilis Amazon EMR 7.10.0.
+ Akses Tabel Penuh didukung untuk tabel Hive, Iceberg, Delta, dan Hudi.
+ **Pertimbangan Hudi FTA Write Support:**
  + Hudi FTA menulis require using HoodieCredentialedHadoopStorage for credential vending selama eksekusi pekerjaan. Atur konfigurasi berikut saat menjalankan pekerjaan Hudi: `hoodie.storage.class=org.apache.spark.sql.hudi.storage.HoodieCredentialedHadoopStorage`
  + Dukungan tulis Akses Tabel Lengkap (FTA) untuk Hudi tersedia mulai dari Amazon EMR rilis 7.12.
  + Dukungan penulisan Hudi FTA saat ini hanya berfungsi dengan konfigurasi Hudi default. Pengaturan Hudi khusus atau non-default mungkin tidak sepenuhnya didukung dan dapat mengakibatkan perilaku yang tidak terduga.
  + Pengelompokan untuk tabel Hudi Merge-On-Read (MOR) tidak didukung pada saat ini di bawah mode tulis FTA.
+ Pekerjaan yang mereferensikan tabel dengan aturan Lake Formation Fine-Grained Access Control (FGAC) atau Tampilan Katalog Data Glue akan gagal. Untuk menanyakan tabel dengan aturan FGAC atau Tampilan Katalog Data Glue, Anda harus menggunakan mode FGAC. Anda dapat mengaktifkan mode FGAC dengan mengikuti langkah-langkah yang diuraikan dalam AWS dokumentasi: Menggunakan [Amazon EMR di EC2 dengan Lake AWS Formation untuk kontrol akses berbutir](emr-serverless-lf-enable.html) halus.
+ Akses tabel penuh tidak mendukung Spark Streaming.
+ Saat menulis Spark DataFrame ke tabel Lake Formation, hanya mode APPEND yang didukung untuk tabel Hive dan Iceberg: `df.write.mode("append").saveAsTable(table_name)`
+ Membuat tabel eksternal memerlukan izin IAM.
+ Karena Lake Formation menyimpan sementara kredensyal dalam pekerjaan Spark, pekerjaan batch Spark atau sesi interaktif yang sedang berjalan mungkin tidak mencerminkan perubahan izin.
+ Anda harus menggunakan peran yang ditentukan pengguna dan bukan peran terkait layanan: [Persyaratan Lake Formation untuk](https://docs.aws.amazon.com/lake-formation/latest/dg/registration-role.html) peran.

#### Hudi FTA Write Support - Operasi yang Didukung


Tabel berikut menunjukkan operasi penulisan yang didukung untuk tabel Hudi Copy-On-Write (COW) dan Merge-On-Read (MOR) di bawah mode Akses Tabel Penuh:


**Hudi FTA Mendukung Operasi Tulis**  

| Tipe Tabel | Operasi | Perintah Tulis SQL | Status | 
| --- | --- | --- | --- | 
| LEMBU | INSERT | MASUKKAN KE DALAM TABEL | Didukung | 
| LEMBU | INSERT | MASUKKAN KE DALAM TABEL - PARTISI (Statis, Dinamis) | Didukung | 
| LEMBU | INSERT | MASUKKAN TIMPA | Didukung | 
| LEMBU | INSERT | INSERT OVERWRITE - PARTISI (Statis, Dinamis) | Didukung | 
| UPDATE | UPDATE | PERBARUI TABEL | Didukung | 
| LEMBU | UPDATE | PERBARUI TABEL - Ubah Partisi | Tidak Didukung | 
| DELETE | DELETE | HAPUS DARI TABEL | Didukung | 
| MENGUBAH | MENGUBAH | UBAH TABEL - GANTI NAMA MENJADI | Tidak Didukung | 
| LEMBU | MENGUBAH | MENGUBAH TABEL - MENGATUR TBLPROPERTIES | Didukung | 
| LEMBU | MENGUBAH | MENGUBAH TABEL - UNSET TBLPROPERTIES | Didukung | 
| LEMBU | MENGUBAH | MENGUBAH TABEL - MENGUBAH KOLOM | Didukung | 
| LEMBU | MENGUBAH | MENGUBAH TABEL - TAMBAHKAN KOLOM | Didukung | 
| LEMBU | MENGUBAH | MENGUBAH TABEL - TAMBAHKAN PARTISI | Didukung | 
| LEMBU | MENGUBAH | UBAH TABEL - JATUHKAN PARTISI | Didukung | 
| LEMBU | MENGUBAH | MENGUBAH TABEL - MEMULIHKAN PARTISI | Didukung | 
| LEMBU | MENGUBAH | MEMPERBAIKI PARTISI SINKRONISASI TABEL | Didukung | 
| MENJATUHKAN | MENJATUHKAN | MEJA DROP | Didukung | 
| LEMBU | MENJATUHKAN | DROP TABLE - MEMBERSIHKAN | Didukung | 
| CREATE | CREATE | BUAT TABEL - Dikelola | Didukung | 
| LEMBU | CREATE | BUAT TABEL - PARTISI OLEH | Didukung | 
| LEMBU | CREATE | BUAT TABEL JIKA TIDAK ADA | Didukung | 
| LEMBU | CREATE | BUAT TABEL SEPERTI | Didukung | 
| LEMBU | CREATE | BUAT TABEL SEBAGAI PILIH | Didukung | 
| CREATE | CREATE | BUAT TABEL dengan LOKASI - Tabel Eksternal | Tidak Didukung | 
| KERANGKA DATA (SISIPKAN) | KERANGKA DATA (SISIPKAN) | saveAsTable.Menimpa | Didukung | 
| LEMBU | KERANGKA DATA (SISIPKAN) | saveAsTable.Menambahkan | Tidak Didukung | 
| LEMBU | KERANGKA DATA (SISIPKAN) | saveAsTable.Abaikan | Didukung | 
| LEMBU | KERANGKA DATA (SISIPKAN) | saveAsTable.ErrorIfExists | Didukung | 
| LEMBU | KERANGKA DATA (SISIPKAN) | saveAsTable - Tabel eksternal (Path) | Tidak Didukung | 
| LEMBU | KERANGKA DATA (SISIPKAN) | simpan (jalur) - DF v1 | Tidak Didukung | 
| MOR | INSERT | MASUKKAN KE DALAM TABEL | Didukung | 
| MOR | INSERT | MASUKKAN KE DALAM TABEL - PARTISI (Statis, Dinamis) | Didukung | 
| MOR | INSERT | MASUKKAN TIMPA | Didukung | 
| MOR | INSERT | INSERT OVERWRITE - PARTISI (Statis, Dinamis) | Didukung | 
| UPDATE | UPDATE | PERBARUI TABEL | Didukung | 
| MOR | UPDATE | PERBARUI TABEL - Ubah Partisi | Tidak Didukung | 
| DELETE | DELETE | HAPUS DARI TABEL | Didukung | 
| MENGUBAH | MENGUBAH | UBAH TABEL - GANTI NAMA MENJADI | Tidak Didukung | 
| MOR | MENGUBAH | MENGUBAH TABEL - MENGATUR TBLPROPERTIES | Didukung | 
| MOR | MENGUBAH | MENGUBAH TABEL - UNSET TBLPROPERTIES | Didukung | 
| MOR | MENGUBAH | MENGUBAH TABEL - MENGUBAH KOLOM | Didukung | 
| MOR | MENGUBAH | MENGUBAH TABEL - TAMBAHKAN KOLOM | Didukung | 
| MOR | MENGUBAH | MENGUBAH TABEL - TAMBAHKAN PARTISI | Didukung | 
| MOR | MENGUBAH | UBAH TABEL - JATUHKAN PARTISI | Didukung | 
| MOR | MENGUBAH | MENGUBAH TABEL - MEMULIHKAN PARTISI | Didukung | 
| MOR | MENGUBAH | MEMPERBAIKI PARTISI SINKRONISASI TABEL | Didukung | 
| MENJATUHKAN | MENJATUHKAN | MEJA DROP | Didukung | 
| MOR | MENJATUHKAN | DROP TABLE - MEMBERSIHKAN | Didukung | 
| CREATE | CREATE | BUAT TABEL - Dikelola | Didukung | 
| MOR | CREATE | BUAT TABEL - PARTISI OLEH | Didukung | 
| MOR | CREATE | BUAT TABEL JIKA TIDAK ADA | Didukung | 
| MOR | CREATE | BUAT TABEL SEPERTI | Didukung | 
| MOR | CREATE | BUAT TABEL SEBAGAI PILIH | Didukung | 
| CREATE | CREATE | BUAT TABEL dengan LOKASI - Tabel Eksternal | Tidak Didukung | 
| KERANGKA DATA (UPSERT) | KERANGKA DATA (UPSERT) | saveAsTable.Menimpa | Didukung | 
| MOR | KERANGKA DATA (UPSERT) | saveAsTable.Menambahkan | Tidak Didukung | 
| MOR | KERANGKA DATA (UPSERT) | saveAsTable.Abaikan | Didukung | 
| MOR | KERANGKA DATA (UPSERT) | saveAsTable.ErrorIfExists | Didukung | 
| MOR | KERANGKA DATA (UPSERT) | saveAsTable - Tabel eksternal (Path) | Tidak Didukung | 
| MOR | KERANGKA DATA (UPSERT) | simpan (jalur) - DF v1 | Tidak Didukung | 
| KERANGKA DATA (HAPUS) | KERANGKA DATA (HAPUS) | saveAsTable.Menambahkan | Tidak Didukung | 
| MOR | KERANGKA DATA (HAPUS) | saveAsTable - Tabel eksternal (Path) | Tidak Didukung | 
| MOR | KERANGKA DATA (HAPUS) | simpan (jalur) - DF v1 | Tidak Didukung | 
| KERANGKA DATA (BULK\$1INSERT) | KERANGKA DATA (BULK\$1INSERT) | saveAsTable.Menimpa | Didukung | 
| MOR | KERANGKA DATA (BULK\$1INSERT) | saveAsTable.Menambahkan | Tidak Didukung | 
| MOR | KERANGKA DATA (BULK\$1INSERT) | saveAsTable.Abaikan | Didukung | 
| MOR | KERANGKA DATA (BULK\$1INSERT) | saveAsTable.ErrorIfExists | Didukung | 
| MOR | KERANGKA DATA (BULK\$1INSERT) | saveAsTable - Tabel eksternal (Path) | Tidak Didukung | 
| MOR | KERANGKA DATA (BULK\$1INSERT) | simpan (jalur) - DF v1 | Tidak Didukung | 