Menggunakan tampilan terwujud dengan Amazon EMR - Amazon EMR

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

Menggunakan tampilan terwujud dengan Amazon EMR

Amazon EMR merilis 7.12.0 dan yang lebih baru mendukung pembuatan dan pengelolaan tampilan terwujud Apache Iceberg di Katalog Data Glue. AWS Tampilan terwujud adalah tabel terkelola yang menyimpan hasil yang telah dihitung sebelumnya dari kueri SQL dalam format Apache Iceberg dan diperbarui secara bertahap saat tabel sumber yang mendasarinya berubah. Anda dapat menggunakan tampilan terwujud untuk menyederhanakan jalur transformasi data dan mempercepat kinerja kueri untuk beban kerja analitis yang kompleks.

Saat Anda membuat tampilan terwujud menggunakan Spark di Amazon EMR, definisi tampilan dan metadata disimpan dalam Katalog Data Glue. AWS Hasil yang telah dihitung sebelumnya disimpan sebagai tabel Apache Iceberg di bucket Amazon S3 Tables atau bucket tujuan umum Amazon S3 dalam akun Anda. AWS Katalog Data AWS Glue secara otomatis memonitor tabel sumber dan menyegarkan tampilan terwujud menggunakan infrastruktur komputasi terkelola.

Cara kerja tampilan terwujud dengan Amazon EMR

Tampilan terwujud terintegrasi dengan Amazon EMR melalui dukungan Iceberg Apache Spark. Saat Anda mengonfigurasi sesi Spark Anda untuk menggunakan Katalog Data AWS Glue, Anda dapat membuat tampilan terwujud menggunakan sintaks SQL standar. Pengoptimal Spark dapat secara otomatis menulis ulang kueri untuk menggunakan tampilan terwujud ketika mereka memberikan kinerja yang lebih baik, menghilangkan kebutuhan untuk memodifikasi kode aplikasi secara manual.

Katalog Data AWS Glue menangani semua aspek operasional pemeliharaan tampilan terwujud, termasuk:

  • Mendeteksi perubahan dalam tabel sumber menggunakan lapisan metadata Apache Iceberg

  • Menjadwalkan dan menjalankan operasi penyegaran menggunakan komputasi Spark terkelola

  • Menentukan apakah akan melakukan penyegaran penuh atau inkremental berdasarkan perubahan data

  • Menyimpan hasil yang telah dihitung sebelumnya dalam format Apache Iceberg untuk akses multi-engine

Anda dapat menanyakan tampilan terwujud dari Amazon EMR menggunakan antarmuka Spark SQL yang sama yang Anda gunakan untuk tabel biasa. Data yang telah dihitung sebelumnya juga dapat diakses dari layanan lain termasuk Amazon Athena dan Amazon Redshift.

Prasyarat

Untuk menggunakan tampilan terwujud dengan Amazon EMR, Anda perlu:

  • AWS Akun

  • Cluster EMR Amazon yang menjalankan rilis 7.12.0 atau yang lebih baru

  • Tabel sumber dalam format Apache Iceberg terdaftar di Katalog Data Glue AWS

  • AWS Izin Lake Formation dikonfigurasi untuk tabel sumber dan database target

  • Bucket S3 Tables atau bucket tujuan umum S3 yang terdaftar di AWS Lake Formation untuk menyimpan data tampilan yang terwujud

Mengkonfigurasi Spark untuk menggunakan tampilan terwujud

Untuk membuat dan mengelola tampilan terwujud, konfigurasikan sesi Spark Anda dengan ekstensi Iceberg dan pengaturan katalog yang diperlukan. Konfigurasi bervariasi tergantung pada apakah tabel sumber dan tampilan terwujud Anda menggunakan bucket Tabel S3 atau bucket tujuan umum S3.

Mengkonfigurasi untuk Tabel S3

Saat menggunakan bucket Tabel S3 untuk tampilan terwujud, konfigurasikan referensi katalog terpisah untuk tabel sumber dan tampilan terwujud:

spark-sql \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \ --conf spark.sql.catalog.glue_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.glue_catalog.type=glue \ --conf spark.sql.catalog.glue_catalog.warehouse=s3://amzn-s3-demo-bucket/warehouse \ --conf spark.sql.catalog.glue_catalog.glue.region=us-east-1 \ --conf spark.sql.catalog.glue_catalog.glue.id=111122223333 \ --conf spark.sql.catalog.glue_catalog.glue.account-id=111122223333 \ --conf spark.sql.catalog.glue_catalog.glue.lakeformation-enabled=true \ --conf spark.sql.catalog.s3t_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.s3t_catalog.type=glue \ --conf spark.sql.catalog.s3t_catalog.glue.id=111122223333:s3tablescatalog/my-table-bucket \ --conf spark.sql.catalog.s3t_catalog.glue.account-id=111122223333 \ --conf spark.sql.catalog.s3t_catalog.glue.lakeformation-enabled=true \ --conf spark.sql.catalog.s3t_catalog.warehouse=s3://amzn-s3-demo-bucket/mv-warehouse \ --conf spark.sql.catalog.s3t_catalog.glue.region=us-east-1 \ --conf spark.sql.defaultCatalog=s3t_catalog \ // turn on automatic query rewrite (optional) --conf spark.sql.optimizer.answerQueriesWithMVs.enabled=true

Mengkonfigurasi untuk bucket tujuan umum S3

Saat menggunakan bucket tujuan umum S3, konfigurasikan referensi katalog tunggal:

spark-sql \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \ --conf spark.sql.catalog.glue_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.glue_catalog.type=glue \ --conf spark.sql.catalog.glue_catalog.warehouse=s3://amzn-s3-demo-bucket/warehouse \ --conf spark.sql.catalog.glue_catalog.glue.region=us-east-1 \ --conf spark.sql.catalog.glue_catalog.glue.id=111122223333 \ --conf spark.sql.catalog.s3t_catalog.glue.account-id=111122223333 \ --conf spark.sql.catalog.s3t_catalog.glue.lakeformation-enabled=true \ --conf spark.sql.defaultCatalog=glue_catalog \ // turn on automatic query rewrite (optional) --conf spark.sql.optimizer.answerQueriesWithMVs.enabled=true

Mengaktifkan penyegaran inkremental

Untuk mengaktifkan pengoptimalan penyegaran tambahan, tambahkan properti konfigurasi berikut ke sesi Spark Anda:

spark-sql \ --conf spark.sql.optimizer.incrementalMVRefresh.enabled=true \

Parameter konfigurasi

Parameter konfigurasi berikut mengontrol perilaku tampilan terwujud:

  • spark.sql.extensions- Mengaktifkan ekstensi sesi Iceberg Spark yang diperlukan untuk dukungan tampilan terwujud.

  • spark.sql.optimizer.answerQueriesWithMVs.enabled— Memungkinkan penulisan ulang kueri otomatis untuk menggunakan tampilan terwujud. Setel ke true untuk mengaktifkan pengoptimalan ini.

  • spark.sql.optimizer.incrementalMVRefresh.enabled— Mengaktifkan optimasi penyegaran inkremental. Setel ke true untuk memproses hanya data yang diubah selama operasi penyegaran.

Membuat tampilan yang terwujud

Anda membuat tampilan terwujud menggunakan pernyataan CREATE MATERIALIZED VIEW SQL. Definisi tampilan menentukan logika transformasi sebagai kueri SQL yang mereferensikan satu atau lebih tabel sumber.

DLLs

Buat Tampilan

{ CREATE OR REPLACE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] } view_identifier [ view_clauses ] [ schedule_clauses ] AS [ select_statement ] view_clauses = { [ LOCATION location ] | [ PARTITIONED BY (col [, ...]) ] | [ COMMENT view_comment ] | [ SCHEDULE [ REFRESH ] schedule_clause ] } schedule_clause = { EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS } }
catatan

View_clauses harus muncul sebelum select_statement.

Membuat tampilan dasar yang terwujud

Contoh berikut membuat tampilan terwujud yang menggabungkan data pesanan menurut pelanggan, menggunakan nama tabel yang sepenuhnya memenuhi syarat dengan konvensi penamaan tiga bagian dalam definisi tampilan:

CREATE MATERIALIZED VIEW customer_orders AS SELECT customer_name, COUNT(*) as order_count, SUM(amount) as total_amount FROM glue_catalog.sales.orders GROUP BY customer_name;

Membuat tampilan terwujud dengan penyegaran otomatis

Untuk mengonfigurasi penyegaran otomatis, tentukan jadwal penyegaran saat membuat tampilan menggunakan nama tabel yang memenuhi syarat penuh dengan konvensi penamaan tiga bagian dalam definisi tampilan:

CREATE MATERIALIZED VIEW customer_orders SCHEDULE REFRESH EVERY 1 HOUR AS SELECT customer_name, COUNT(*) as order_count, SUM(amount) as total_amount FROM glue_catalog.sales.orders GROUP BY customer_name;

Membuat tampilan terwujud dengan referensi lintas katalog

Jika tabel sumber Anda berada dalam katalog yang berbeda dari tampilan materialisasi Anda, gunakan nama tabel yang sepenuhnya memenuhi syarat dengan konvensi penamaan tiga bagian di kedua nama tampilan dan definisi tampilan:

CREATE MATERIALIZED VIEW s3t_catalog.analytics.customer_summary AS SELECT customer_name, COUNT(*) as order_count, SUM(amount) as total_amount FROM glue_catalog.sales.orders GROUP BY customer_name;

Menanyakan tampilan yang terwujud

Setelah membuat tampilan terwujud, Anda dapat menanyakannya seperti tabel lainnya menggunakan pernyataan SQL SELECT standar:

SELECT * FROM customer_orders;

Penulisan ulang kueri otomatis

Ketika penulisan ulang kueri otomatis diaktifkan, pengoptimal Spark menganalisis kueri Anda dan secara otomatis menggunakan tampilan yang terwujud ketika mereka dapat meningkatkan kinerja. Misalnya, jika Anda menjalankan kueri berikut:

SELECT customer_name, COUNT(*) as order_count, SUM(amount) as total_amount FROM orders GROUP BY customer_name;

Pengoptimal Spark secara otomatis menulis ulang kueri ini untuk menggunakan tampilan materialisasi customer_orders alih-alih memproses tabel pesanan dasar, asalkan tampilan terwujud saat ini.

Memverifikasi penulisan ulang kueri otomatis

Untuk memverifikasi apakah kueri menggunakan penulisan ulang kueri otomatis, gunakan perintah EXPLORE EXTENDED:

EXPLAIN EXTENDED SELECT customer_name, COUNT(*) as order_count, SUM(amount) as total_amount FROM orders GROUP BY customer_name;

Dalam rencana eksekusi, cari nama tampilan terwujud dalam BatchScan operasi. Jika rencana menunjukkan BatchScan glue_catalog.analytics.customer_orders alih-alih glue_catalog.sales.orders, kueri telah ditulis ulang secara otomatis untuk menggunakan tampilan BatchScan terwujud.

catatan

Penulisan ulang kueri otomatis memerlukan waktu agar cache metadata Spark terisi setelah membuat tampilan terwujud. Proses ini biasanya selesai dalam waktu 30 detik.

Menyegarkan tampilan terwujud

Anda dapat menyegarkan tampilan terwujud menggunakan dua metode: penyegaran penuh atau penyegaran tambahan. Penyegaran penuh menghitung ulang seluruh tampilan terwujud dari semua data tabel dasar, sementara penyegaran inkremental hanya memproses data yang telah berubah sejak penyegaran terakhir.

Penyegaran penuh manual

Untuk melakukan penyegaran penuh tampilan terwujud:

REFRESH MATERIALIZED VIEW customer_orders FULL;

Setelah menjalankan perintah ini, kueri tampilan terwujud untuk memverifikasi hasil yang diperbarui:

SELECT * FROM customer_orders;

Penyegaran inkremental manual

Untuk melakukan penyegaran tambahan, pastikan penyegaran inkremental diaktifkan dalam konfigurasi sesi Spark Anda, lalu jalankan:

REFRESH MATERIALIZED VIEW customer_orders;

Katalog Data AWS Glue secara otomatis menentukan apakah penyegaran tambahan berlaku berdasarkan definisi tampilan dan jumlah data yang diubah. Jika penyegaran inkremental tidak memungkinkan, operasi akan kembali ke penyegaran penuh.

Memverifikasi eksekusi penyegaran inkremental

Untuk mengonfirmasi bahwa penyegaran inkremental berhasil dijalankan, Anda dapat memeriksa properti lastRefreshType tabel dengan menjalankan perintah berikut:

SHOW TBLPROPERTIES <mvName>("lastRefreshType")

Selain itu, ini juga dapat dicapai dengan mengaktifkan logging debug dengan memodifikasi konfigurasi log Spark Anda:

  1. Buka file konfigurasi Spark log4j:

    sudo vim /usr/lib/spark/conf/log4j2.properties
  2. Tambahkan konfigurasi logger berikut:

    logger.spark.name = org.apache.spark.sql logger.spark.level = debug logger.inmemcache.name = org.apache.spark.sql.InMemMvMetadataCache logger.inmemcache.level = off
  3. Setelah menjalankan operasi penyegaran, cari pesan berikut di output Spark:

    DEBUG RefreshMaterializedViewExec: Executed Incremental Refresh

Mengelola tampilan yang terwujud

Amazon EMR menyediakan perintah SQL untuk mengelola siklus hidup tampilan terwujud.

Menjelaskan tampilan yang terwujud

Untuk melihat metadata tentang tampilan terwujud, termasuk definisinya, status penyegaran, dan stempel waktu penyegaran terakhir:

DESCRIBE EXTENDED customer_orders;

Mengubah tampilan yang terwujud

Untuk mengubah jadwal penyegaran tampilan terwujud yang ada:

ALTER MATERIALIZED VIEW customer_orders ADD SCHEDULE REFRESH EVERY 2 HOURS;

Untuk menghapus penyegaran otomatis:

ALTER MATERIALIZED VIEW customer_orders DROP SCHEDULE;

Menjatuhkan tampilan yang terwujud

Untuk menghapus tampilan terwujud:

DROP MATERIALIZED VIEW customer_orders;

Perintah ini menghapus definisi tampilan terwujud dari Katalog Data AWS Glue dan menghapus data tabel Iceberg yang mendasarinya dari bucket S3 Anda.

Izin untuk tampilan terwujud

Untuk membuat dan mengelola tampilan terwujud, Anda harus mengonfigurasi izin AWS Lake Formation. Peran IAM yang menciptakan tampilan terwujud (peran definer) memerlukan izin khusus pada tabel sumber dan database target.

Izin yang diperlukan untuk peran definer

Peran definer harus memiliki izin Lake Formation berikut:

  • Pada tabel sumber - PILIH atau SEMUA izin tanpa filter baris, kolom, atau sel

  • Pada database target - izin CREATE_TABLE

  • Pada Katalog Data AWS Glue — GetTable dan izin CreateTable API

Saat Anda membuat tampilan terwujud, ARN peran definer disimpan dalam definisi tampilan. Katalog Data AWS Glue mengasumsikan peran ini saat menjalankan operasi penyegaran otomatis. Jika peran definer kehilangan akses ke tabel sumber, operasi refresh akan gagal hingga izin dipulihkan.

Memberikan akses ke tampilan yang terwujud

Untuk memberi pengguna lain akses ke kueri tampilan terwujud, gunakan AWS Lake Formation untuk memberikan izin SELECT pada tabel tampilan terwujud. Pengguna dapat menanyakan tampilan terwujud tanpa memerlukan akses langsung ke tabel sumber yang mendasarinya.

Untuk informasi lebih lanjut tentang mengonfigurasi izin Lake Formation, lihat Memberikan dan mencabut izin pada sumber daya Katalog Data di Panduan Pengembang Lake Formation. AWS

Memantau operasi tampilan terwujud

Katalog Data AWS Glue menerbitkan metrik dan log untuk operasi penyegaran tampilan terwujud ke Amazon. CloudWatch Anda dapat memantau status penyegaran, durasi, dan volume data yang diproses melalui CloudWatch metrik.

Melihat metrik penyegaran

Untuk melihat metrik penyegaran tampilan terwujud:

  1. Buka CloudWatch konsol.

  2. Pilih Metrik dari panel navigasi.

  3. Pilih namespace Glue.

  4. Filter metrik berdasarkan nama tampilan terwujud.

Menyiapkan alarm

Untuk menerima pemberitahuan saat operasi penyegaran gagal atau melebihi durasi yang diharapkan, buat CloudWatch alarm pada metrik tampilan terwujud. Anda juga dapat mengonfigurasi EventBridge aturan Amazon untuk memicu respons otomatis untuk menyegarkan peristiwa.

Contoh: Alur kerja lengkap

Contoh berikut menunjukkan alur kerja lengkap untuk membuat dan menggunakan tampilan terwujud di Amazon EMR.

  1. Connect ke node utama cluster EMR Anda menggunakan SSH.

  2. Buat tabel dasar dengan data sampel:

    spark-sql \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \ --conf spark.sql.catalog.glue_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.glue_catalog.type=glue \ --conf spark.sql.catalog.glue_catalog.warehouse=s3://amzn-s3-demo-bucket/warehouse \ --conf spark.sql.catalog.glue_catalog.glue.region=us-east-1 \ --conf spark.sql.catalog.glue_catalog.glue.id=111122223333 \ --conf spark.sql.catalog.glue_catalog.glue.account-id=111122223333 \ --conf spark.sql.catalog.glue_catalog.glue.lakeformation-enabled=true \ --conf spark.sql.defaultCatalog=glue_catalog \ --conf spark.sql.optimizer.answerQueriesWithMVs.enabled=true CREATE DATABASE IF NOT EXISTS sales; USE sales; CREATE TABLE orders ( id INT, customer_name STRING, amount DECIMAL(10,2), order_date DATE ); INSERT INTO orders VALUES (1, 'John Doe', 150.00, DATE('2024-01-15')), (2, 'Jane Smith', 200.50, DATE('2024-01-16')), (3, 'Bob Johnson', 75.25, DATE('2024-01-17'));
  3. Buat tampilan terwujud:

    CREATE MATERIALIZED VIEW customer_summary AS SELECT customer_name, COUNT(*) as order_count, SUM(amount) as total_amount FROM glue_catalog.sales.orders GROUP BY customer_name;
  4. Kueri tampilan terwujud:

    SELECT * FROM customer_summary;
  5. Masukkan data tambahan ke dalam tabel dasar:

    INSERT INTO orders VALUES (4, 'Jane Smith', 350.00, DATE('2024-01-18')), (5, 'Bob Johnson', 100.25, DATE('2024-01-19'));
  6. Segarkan tampilan terwujud:

    REFRESH MATERIALIZED VIEW customer_summary FULL;
  7. Verifikasi hasil yang diperbarui:

    SELECT * FROM customer_summary;

Pertimbangan dan batasan

Pertimbangkan hal berikut saat menggunakan tampilan terwujud dengan Amazon EMR:

  • Tampilan terwujud memerlukan rilis Amazon EMR 7.12.0 atau yang lebih baru.

  • Tabel sumber harus berupa tabel Apache Iceberg yang terdaftar di Katalog Data AWS Glue. Tabel Apache Hive, Apache Hudi, dan Linux Foundation Delta Lake tidak didukung saat peluncuran.

  • Tabel sumber harus berada di AWS Wilayah dan AWS akun yang sama dengan tampilan terwujud.

  • Semua tabel sumber harus diatur oleh AWS Lake Formation. Izin khusus IAM dan akses hybrid tidak didukung.

  • Tampilan terwujud tidak dapat AWS mereferensikan tampilan Glue Data Catalog, tampilan multi-dialek, atau tampilan terwujud lainnya sebagai tabel sumber.

  • Peran penentu tampilan harus memiliki akses baca penuh (PILIH atau SEMUA izin) pada semua tabel sumber tanpa filter baris, kolom, atau sel yang diterapkan.

  • Tampilan terwujud pada akhirnya konsisten dengan tabel sumber. Selama jendela penyegaran, kueri dapat mengembalikan data basi. Jalankan penyegaran manual untuk konsistensi langsung.

  • Interval penyegaran otomatis minimum adalah satu jam.

  • Incremental refresh mendukung subset terbatas dari operasi SQL. Definisi tampilan harus berupa blok SELECT-FROM-WHERE-GROUP BY-HAVING tunggal dan tidak dapat berisi operasi set, subquery, kata kunci DISTINCT dalam SELECT atau fungsi agregat, fungsi jendela, atau gabungan selain INNER JOIN.

  • Penyegaran tambahan tidak mendukung fungsi yang ditentukan pengguna atau fungsi bawaan tertentu. Hanya sebagian dari fungsi built-in Spark SQL yang didukung.

  • Penulisan ulang otomatis kueri hanya mempertimbangkan tampilan terwujud yang definisinya termasuk dalam subset SQL terbatas yang mirip dengan pembatasan penyegaran tambahan.

  • Operasi penyegaran penuh menimpa seluruh tabel dan membuat snapshot sebelumnya tidak tersedia.

  • Pengidentifikasi yang berisi karakter khusus selain karakter alfanumerik dan garis bawah tidak didukung dalam kueri CREATE MATERIALIZED VIEW.

  • Kolom tampilan terwujud yang dimulai dengan awalan __ivm dicadangkan untuk penggunaan sistem. AWS berhak untuk memodifikasi atau menghapus kolom ini dalam rilis future.

  • Klausa SORT BY, LIMIT, OFFSET, CLUSTER BY, dan ORDER BY tidak didukung dalam definisi tampilan terwujud.

  • Tabel sumber lintas wilayah dan lintas-akun tidak didukung.

  • Fungsi non-deterministik seperti rand () atau current_timestamp () tidak didukung dalam definisi tampilan terwujud.