Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
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
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.
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
-
| Operasi |
AWS Lake Formation izin |
Status Support |
| SELECT |
SELECT |
Didukung |
| CREATE TABLE |
CREATE_TABLE |
Didukung |
| BUAT TABEL SEPERTI |
CREATE_TABLE |
Didukung dengan izin IAM di lokasi Amazon S3 |
| BUAT TABEL SEBAGAI PILIH |
CREATE_TABLE |
Didukung dengan izin IAM di lokasi Amazon S3 |
| MENGGAMBARKAN TABEL |
MENJELASKAN |
Didukung |
| TBLPROPERTIES |
MENJELASKAN |
Didukung |
| TAMPILKAN KOLOM |
MENJELASKAN |
Didukung |
| TAMPILKAN PARTISI |
MENJELASKAN |
Didukung |
| TAMPILKAN TABEL BUAT |
MENJELASKAN |
Didukung |
UBAH TABEL tablename |
PILIH dan UBAH |
Didukung |
UBAH LOKASI tablename SET TABEL |
- |
Tidak didukung |
UBAH TABEL tablename TAMBAHKAN PARTISI |
PILIH, MASUKKAN dan UBAH |
Didukung |
| MEJA PERBAIKAN |
PILIH dan UBAH |
Didukung |
| MEMUAT DATA |
|
Tidak didukung |
| INSERT |
INSERT dan ALTER |
Didukung |
| MASUKKAN TIMPA |
PILIH, MASUKKAN, HAPUS dan UBAH |
Didukung |
| MEJA DROP |
SELECT, DROP, DELETE dan ALTER |
Didukung |
| MEMOTONG TABEL |
PILIH, MASUKKAN, HAPUS dan UBAH |
Didukung |
| Penulis Rangka Data V1 |
Sama seperti operasi SQL yang sesuai |
Didukung saat menambahkan data ke tabel yang ada. Lihat pertimbangan dan batasan untuk informasi lebih lanjut
|
| Penulis Rangka Data V2 |
Sama seperti operasi SQL yang sesuai |
Didukung saat menambahkan data ke tabel yang ada. Lihat pertimbangan dan batasan untuk informasi lebih lanjut
|
- Iceberg
-
| Operasi |
AWS Lake Formation izin |
Status Support |
| SELECT |
SELECT |
Didukung |
| CREATE TABLE |
CREATE_TABLE |
Didukung |
| BUAT TABEL SEPERTI |
CREATE_TABLE |
Didukung dengan izin IAM di lokasi Amazon S3 |
| BUAT TABEL SEBAGAI PILIH |
CREATE_TABLE |
Didukung dengan izin IAM di lokasi Amazon S3 |
| GANTI TABEL SEBAGAI PILIH |
PILIH, MASUKKAN dan UBAH |
Didukung |
| MENGGAMBARKAN TABEL |
MENJELASKAN |
Didukung dengan izin IAM di lokasi Amazon S3 |
| TBLPROPERTIES |
MENJELASKAN |
Didukung dengan izin IAM di lokasi Amazon S3 |
| TAMPILKAN TABEL BUAT |
MENJELASKAN |
Didukung dengan izin IAM di lokasi Amazon S3 |
| ALTER TABLE |
PILIH, MASUKKAN dan UBAH |
Didukung |
| MENGUBAH LOKASI SET TABEL |
PILIH, MASUKKAN dan UBAH |
Didukung dengan izin IAM di lokasi Amazon S3 |
| MENGUBAH TABEL TULIS DIURUTKAN OLEH |
PILIH, MASUKKAN dan UBAH |
Didukung dengan izin IAM di lokasi Amazon S3 |
| MENGUBAH TABEL TULIS DIDISTRIBUSIKAN OLEH |
PILIH, INSERT, dan ALTER |
Didukung dengan izin IAM di lokasi Amazon S3 |
| UBAH TABEL GANTI NAMA TABEL |
CREATE_TABLE, dan DROP |
Didukung |
| MASUKKAN KE |
PILIH, MASUKKAN dan UBAH |
Didukung |
| MASUKKAN TIMPA |
PILIH, MASUKKAN dan UBAH |
Didukung |
| DELETE |
PILIH, MASUKKAN dan UBAH |
Didukung |
| UPDATE |
PILIH, MASUKKAN dan UBAH |
Didukung |
| BERGABUNG MENJADI |
PILIH, MASUKKAN dan UBAH |
Didukung |
| MEJA DROP |
PILIH, HAPUS, dan JATUHKAN |
Didukung |
| DataFrame Penulis V1 |
- |
Tidak didukung |
| DataFrame Penulis V2 |
Sama seperti operasi SQL yang sesuai |
Didukung saat menambahkan data ke tabel yang ada. Lihat pertimbangan dan batasan untuk informasi lebih lanjut.
|
| Tabel metadata |
SELECT |
Didukung. Tabel tertentu disembunyikan. Lihat pertimbangan dan batasan untuk informasi lebih lanjut. |
| Prosedur tersimpan |
- |
Didukung untuk tabel yang memenuhi ketentuan berikut:
-
Tabel tidak terdaftar di AWS Lake Formation
-
Tabel yang tidak menggunakan register_table dan migrate
Lihat pertimbangan dan batasan untuk informasi lebih lanjut.
|
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
-
| Operasi |
AWS Lake Formation izin |
Status Support |
| SELECT |
SELECT |
Didukung |
| CREATE TABLE |
CREATE_TABLE |
Didukung dengan izin IAM di lokasi Amazon S3 |
| BUAT TABEL SEPERTI |
CREATE_TABLE |
Didukung dengan izin IAM di lokasi Amazon S3 |
| BUAT TABEL SEBAGAI PILIH |
- |
Tidak didukung |
| MENGGAMBARKAN TABEL |
MENJELASKAN |
Didukung dengan izin IAM di lokasi Amazon S3 |
| TBLPROPERTIES |
MENJELASKAN |
Didukung dengan izin IAM di lokasi Amazon S3 |
| TAMPILKAN KOLOM |
MENJELASKAN |
Didukung dengan izin IAM di lokasi Amazon S3 |
| TAMPILKAN TABEL BUAT |
MENJELASKAN |
Didukung dengan izin IAM di lokasi Amazon S3 |
| ALTER TABLE |
SELECT |
Didukung dengan izin IAM di lokasi Amazon S3 |
| MASUKKAN KE |
PILIH dan UBAH |
Didukung dengan izin IAM di lokasi Amazon S3 |
| MASUKKAN TIMPA |
PILIH dan UBAH |
Didukung dengan izin IAM di lokasi Amazon S3 |
| DELETE |
- |
Tidak didukung |
| UPDATE |
- |
Tidak didukung |
| BERGABUNG MENJADI |
- |
Tidak didukung |
| MEJA DROP |
PILIH dan DROP |
Didukung dengan izin IAM di lokasi Amazon S3 |
| DataFrame Penulis V1 |
- |
Tidak didukung |
| DataFrame Penulis V2 |
Sama seperti operasi SQL yang sesuai |
Didukung dengan izin IAM di lokasi Amazon S3 |
| Tabel metadata |
- |
Tidak didukung |
| Pemeliharaan meja dan fitur utilitas |
- |
Tidak didukung |
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
-
| Operasi |
AWS Lake Formation izin |
Status Support |
| SELECT |
SELECT |
Didukung |
| CREATE TABLE |
CREATE_TABLE |
Didukung |
| BUAT TABEL SEPERTI |
- |
Tidak didukung |
| BUAT TABEL SEBAGAI PILIH |
CREATE_TABLE |
Didukung |
| GANTI TABEL SEBAGAI PILIH |
PILIH, MASUKKAN dan UBAH |
Didukung |
| MENGGAMBARKAN TABEL |
MENJELASKAN |
Didukung dengan izin IAM di lokasi Amazon S3 |
| TBLPROPERTIES |
MENJELASKAN |
Didukung dengan izin IAM di lokasi Amazon S3 |
| TAMPILKAN KOLOM |
MENJELASKAN |
Didukung dengan izin IAM di lokasi Amazon S3 |
| TAMPILKAN TABEL BUAT |
MENJELASKAN |
Didukung dengan izin IAM di lokasi Amazon S3 |
| ALTER TABLE |
PILIH dan INSERT |
Didukung |
| MENGUBAH LOKASI SET TABEL |
PILIH dan INSERT |
Didukung dengan izin IAM di lokasi Amazon S3 |
UBAH tablename KLASTER TABEL DENGAN |
PILIH dan INSERT |
Didukung dengan izin IAM di lokasi Amazon S3 |
UBAH TABEL tablename TAMBAHKAN KENDALA |
PILIH dan INSERT |
Didukung dengan izin IAM di lokasi Amazon S3 |
UBAH KENDALA tablename DROP TABEL |
PILIH dan INSERT |
Didukung dengan izin IAM di lokasi Amazon S3 |
| MASUKKAN KE |
PILIH dan INSERT |
Didukung |
| MASUKKAN TIMPA |
PILIH dan INSERT |
Didukung |
| DELETE |
PILIH dan INSERT |
Didukung |
| UPDATE |
PILIH dan INSERT |
Didukung |
| BERGABUNG MENJADI |
PILIH dan INSERT |
Didukung |
| MEJA DROP |
PILIH, HAPUS dan JATUHKAN |
Didukung |
| DataFrame Penulis V1 |
- |
Tidak didukung |
| DataFrame Penulis V2 |
Sama seperti operasi SQL yang sesuai |
Didukung
|
| Pemeliharaan meja dan fitur utilitas |
- |
Tidak didukung |
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.
-
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');
-
Untuk melihat detail tabel Anda, buka https://console.aws.amazon.com/glue/.
-
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
-
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 kolomx,y, danz.
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 adalahselect * from table where _hoodie_commit_time <=
point_in_time. Untuk informasi selengkapnya, lihat Kueri Tunjuk Waktu Perjalanan Waktu di tabel Hudi.
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.