Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan tampilan terwujud dengan AWS Glue
AWS Glue versi 5.1 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 in AWS Glue, definisi tampilan dan metadata disimpan di 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. Katalog Data AWS Glue secara otomatis memonitor tabel sumber dan menyegarkan tampilan terwujud menggunakan infrastruktur komputasi terkelola.
Topik
Cara kerja tampilan terwujud dengan AWS Glue
Tampilan terwujud terintegrasi dengan AWS Glue melalui dukungan Iceberg Apache Spark dalam pekerjaan AWS Glue dan AWS notebook Glue Studio. 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 AWS Glue 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 AWS Glue, Anda perlu:
-
Akun
-
AWS Glue versi 5.1 atau yang lebih baru
-
Tabel sumber dalam format Apache Iceberg terdaftar di Katalog Data Glue AWS
-
AWS Lake Formation izin yang dikonfigurasi untuk tabel sumber dan basis data target
-
Bucket S3 Tables atau bucket tujuan umum S3 yang terdaftar AWS Lake Formation untuk menyimpan data tampilan terwujud
-
Peran IAM dengan izin untuk mengakses AWS Glue Data Catalog dan Amazon S3
Mengkonfigurasi Spark untuk menggunakan tampilan terwujud
Untuk membuat dan mengelola tampilan terwujud di AWS Glue, konfigurasikan sesi Spark Anda dengan ekstensi Iceberg dan pengaturan katalog yang diperlukan. Metode konfigurasi bervariasi tergantung pada apakah Anda menggunakan pekerjaan AWS Glue atau notebook AWS Glue Studio.
Mengkonfigurasi pekerjaan AWS Glue
Saat membuat atau memperbarui pekerjaan AWS Glue, tambahkan parameter konfigurasi berikut sebagai parameter pekerjaan:
Untuk ember Tabel S3
job = glue.create_job( Name='materialized-view-job', Role='arn:aws:iam::111122223333:role/GlueServiceRole', Command={ 'Name': 'glueetl', 'ScriptLocation': 's3://amzn-s3-demo-bucket/scripts/mv-script.py', 'PythonVersion': '3' }, DefaultArguments={ '--enable-glue-datacatalog': 'true', '--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 ' '--conf spark.sql.optimizer.answerQueriesWithMVs.enabled=true ' '--conf spark.sql.materializedViews.metadataCache.enabled=true' }, GlueVersion='5.1' )
Untuk ember tujuan umum S3
job = glue.create_job( Name='materialized-view-job', Role='arn:aws:iam::111122223333:role/GlueServiceRole', Command={ 'Name': 'glueetl', 'ScriptLocation': 's3://amzn-s3-demo-bucket/scripts/mv-script.py', 'PythonVersion': '3' }, DefaultArguments={ '--enable-glue-datacatalog': 'true', '--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 ' '--conf spark.sql.materializedViews.metadataCache.enabled=true' }, GlueVersion='5.1' )
Mengkonfigurasi notebook AWS Glue Studio
Di notebook AWS Glue Studio, konfigurasikan sesi Spark Anda menggunakan perintah ajaib %%configure di awal buku catatan Anda:
%%configure { "conf": { "spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions", "spark.sql.catalog.glue_catalog": "org.apache.iceberg.spark.SparkCatalog", "spark.sql.catalog.glue_catalog.type": "glue", "spark.sql.catalog.glue_catalog.warehouse": "s3://amzn-s3-demo-bucket/warehouse", "spark.sql.catalog.glue_catalog.glue.region": "us-east-1", "spark.sql.catalog.glue_catalog.glue.id": "111122223333", "spark.sql.catalog.glue_catalog.glue.account-id": "111122223333", "spark.sql.catalog.glue_catalog.glue.lakeformation-enabled": "true", "spark.sql.defaultCatalog": "glue_catalog", "spark.sql.optimizer.answerQueriesWithMVs.enabled": "true", "spark.sql.materializedViews.metadataCache.enabled": "true" } }
Mengaktifkan penyegaran inkremental
Untuk mengaktifkan pengoptimalan penyegaran inkremental, tambahkan properti konfigurasi berikut ke parameter pekerjaan atau konfigurasi buku catatan Anda:
--conf spark.sql.optimizer.incrementalMVRefresh.enabled=true --conf spark.sql.optimizer.incrementalMVRefresh.deltaThresholdCheckEnabled=false
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.materializedViews.metadataCache.enabled— Mengaktifkan caching metadata tampilan terwujud untuk optimasi kueri. Setel ke true untuk meningkatkan kinerja penulisan ulang kueri. -
spark.sql.optimizer.incrementalMVRefresh.enabled— Mengaktifkan optimasi penyegaran inkremental. Setel ke true untuk memproses hanya data yang diubah selama operasi penyegaran. -
spark.sql.optimizer.answerQueriesWithMVs.decimalAggregateCheckEnabled— Mengontrol validasi operasi agregat desimal dalam penulisan ulang kueri. Setel ke false untuk menonaktifkan pemeriksaan overflow desimal tertentu.
Membuat tampilan yang terwujud
Anda membuat tampilan terwujud menggunakan pernyataan CREATE MATERIALIZED VIEW SQL di AWS Glue jobs atau notebook. Definisi tampilan menentukan logika transformasi sebagai kueri SQL yang mereferensikan satu atau lebih tabel sumber.
Membuat tampilan dasar yang terwujud dalam pekerjaan AWS Glue
Contoh berikut menunjukkan pembuatan tampilan terwujud dalam skrip pekerjaan AWS Glue, gunakan nama tabel yang sepenuhnya memenuhi syarat dengan konvensi penamaan tiga bagian dalam definisi tampilan:
from awsglue.context import GlueContext from pyspark.context import SparkContext sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session # Create materialized view spark.sql(""" 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 sepenuhnya memenuhi syarat dengan konvensi penamaan tiga bagian dalam definisi tampilan:
spark.sql(""" 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:
spark.sql(""" 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 """)
Membuat tampilan terwujud di notebook AWS Glue Studio
Di notebook AWS Glue Studio, Anda dapat menggunakan perintah ajaib %%sql untuk membuat tampilan terwujud, menggunakan nama tabel yang sepenuhnya memenuhi syarat dengan konvensi penamaan tiga bagian dalam definisi tampilan:
%%sql 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
Menanyakan tampilan yang terwujud
Setelah membuat tampilan terwujud, Anda dapat menanyakannya seperti tabel lainnya menggunakan pernyataan SQL SELECT standar dalam pekerjaan atau buku catatan AWS Glue Anda.
Menanyakan lowongan kerja AWS Glue
from awsglue.context import GlueContext from pyspark.context import SparkContext sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session # Query materialized view result = spark.sql("SELECT * FROM customer_orders") result.show()
Meminta di notebook AWS Glue Studio
%%sql 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:
result = spark.sql(""" 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:
spark.sql(""" EXPLAIN EXTENDED SELECT customer_name, COUNT(*) as order_count, SUM(amount) as total_amount FROM orders GROUP BY customer_name """).show(truncate=False)
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.
Perhatikan bahwa 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 dalam pekerjaan AWS Glue
Untuk melakukan penyegaran penuh tampilan yang terwujud:
spark.sql("REFRESH MATERIALIZED VIEW customer_orders FULL") # Verify updated results result = spark.sql("SELECT * FROM customer_orders") result.show()
Penyegaran inkremental manual dalam pekerjaan AWS Glue
Untuk melakukan penyegaran tambahan, pastikan penyegaran inkremental diaktifkan dalam konfigurasi sesi Spark Anda, lalu jalankan:
spark.sql("REFRESH MATERIALIZED VIEW customer_orders") # Verify updated results result = spark.sql("SELECT * FROM customer_orders") result.show()
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.
Menyegarkan di notebook AWS Glue Studio
Di buku catatan, gunakan perintah ajaib %%sql:
%%sql REFRESH MATERIALIZED VIEW customer_orders FULL
Memverifikasi eksekusi penyegaran inkremental
Untuk mengonfirmasi bahwa penyegaran inkremental berhasil dijalankan, aktifkan logging debug di pekerjaan AWS Glue Anda:
from awsglue.context import GlueContext from pyspark.context import SparkContext import logging sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session # Enable debug logging logger = logging.getLogger('org.apache.spark.sql') logger.setLevel(logging.DEBUG) # Execute refresh spark.sql("REFRESH MATERIALIZED VIEW customer_orders")
Cari pesan berikut di log pekerjaan AWS Glue:
DEBUG RefreshMaterializedViewExec: Executed Incremental Refresh
Mengelola tampilan yang terwujud
AWS Glue menyediakan perintah SQL untuk mengelola siklus hidup tampilan terwujud dalam pekerjaan dan notebook Anda.
Menjelaskan tampilan yang terwujud
Untuk melihat metadata tentang tampilan terwujud, termasuk definisi, status penyegaran, dan stempel waktu penyegaran terakhir:
spark.sql("DESCRIBE EXTENDED customer_orders").show(truncate=False)
Mengubah tampilan yang terwujud
Untuk mengubah jadwal penyegaran tampilan terwujud yang ada:
spark.sql(""" ALTER MATERIALIZED VIEW customer_orders ADD SCHEDULE REFRESH EVERY 2 HOURS """)
Untuk menghapus penyegaran otomatis:
spark.sql(""" ALTER MATERIALIZED VIEW customer_orders DROP SCHEDULE """)
Menjatuhkan tampilan yang terwujud
Untuk menghapus tampilan terwujud:
spark.sql("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.
Daftar tampilan terwujud
Untuk mencantumkan semua tampilan terwujud dalam database:
spark.sql("SHOW VIEWS FROM analytics").show()
Izin untuk tampilan terwujud
Untuk membuat dan mengelola tampilan terwujud, Anda harus mengonfigurasi AWS Lake Formation izin. 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.
Izin IAM untuk pekerjaan Glue AWS
Peran IAM pekerjaan AWS Glue Anda memerlukan izin berikut:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetCatalog", "glue:GetCatalogs", "glue:GetTable", "glue:GetTables", "glue:CreateTable", "glue:UpdateTable", "glue:DeleteTable", "glue:GetDatabase", "glue:GetDatabases", "cloudwatch:PutMetricData" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket" ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:*:*:*:/aws-glue/*" ] }, { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": "*" } ] }
Peran yang Anda gunakan untuk penyegaran otomatis Tampilan Materialisasi harus memiliki PassRole izin iam: pada peran tersebut.
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::111122223333:role/materialized-view-role-name" ] } ] }
Agar Glue secara otomatis menyegarkan tampilan terwujud untuk Anda, peran tersebut juga harus memiliki kebijakan kepercayaan berikut yang memungkinkan layanan untuk mengambil peran tersebut.
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::111122223333:role/materialized-view-role-name" ] } ] }
Jika Tampilan Materialisasi disimpan di Bucket Tabel S3, Anda juga perlu menambahkan izin berikut ke peran.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3tables:PutTableMaintenanceConfiguration" ], "Resource": "arn:aws:s3tables:*:123456789012:*" } ] }
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. AWS Lake Formation
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 log pekerjaan
Untuk melihat log untuk pekerjaan AWS Glue yang membuat atau menyegarkan tampilan terwujud:
-
Buka konsol AWS Glue.
-
Pilih Jobs dari panel navigasi.
-
Pilih pekerjaan Anda dan pilih Runs.
-
Pilih proses tertentu dan pilih Log untuk melihat CloudWatch log.
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 Glue. AWS
Contoh skrip pekerjaan AWS Glue
import sys from awsglue.transforms import * from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job args = getResolvedOptions(sys.argv, ['JOB_NAME']) sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session job = Job(glueContext) job.init(args['JOB_NAME'], args) # Create database and base table spark.sql("CREATE DATABASE IF NOT EXISTS sales") spark.sql("USE sales") spark.sql(""" CREATE TABLE IF NOT EXISTS orders ( id INT, customer_name STRING, amount DECIMAL(10,2), order_date DATE ) """) # Insert sample data spark.sql(""" 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')) """) # Create materialized view spark.sql(""" 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 """) # Query the materialized view print("Initial materialized view data:") spark.sql("SELECT * FROM customer_summary").show() # Insert additional data spark.sql(""" INSERT INTO orders VALUES (4, 'Jane Smith', 350.00, DATE('2024-01-18')), (5, 'Bob Johnson', 100.25, DATE('2024-01-19')) """) # Refresh the materialized view spark.sql("REFRESH MATERIALIZED VIEW customer_summary FULL") # Query updated results print("Updated materialized view data:") spark.sql("SELECT * FROM customer_summary").show() job.commit()
Contoh notebook AWS Glue Studio
%%configure { "conf": { "spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions", "spark.sql.catalog.glue_catalog": "org.apache.iceberg.spark.SparkCatalog", "spark.sql.catalog.glue_catalog.type": "glue", "spark.sql.catalog.glue_catalog.warehouse": "s3://amzn-s3-demo-bucket/warehouse", "spark.sql.catalog.glue_catalog.glue.region": "us-east-1", "spark.sql.catalog.glue_catalog.glue.id": "111122223333", "spark.sql.catalog.glue_catalog.glue.account-id": "111122223333", "spark.sql.catalog.glue_catalog.glue.lakeformation-enabled": "true", "spark.sql.defaultCatalog": "glue_catalog", "spark.sql.optimizer.answerQueriesWithMVs.enabled": "true", "spark.sql.materializedViews.metadataCache.enabled": "true" } }
%%sql CREATE DATABASE IF NOT EXISTS sales
%%sql USE sales
%%sql CREATE TABLE IF NOT EXISTS orders ( id INT, customer_name STRING, amount DECIMAL(10,2), order_date DATE )
%%sql 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'))
%%sql 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
%%sql SELECT * FROM customer_summary
%%sql INSERT INTO orders VALUES (4, 'Jane Smith', 350.00, DATE('2024-01-18')), (5, 'Bob Johnson', 100.25, DATE('2024-01-19'))
%%sql REFRESH MATERIALIZED VIEW customer_summary FULL
%%sql SELECT * FROM customer_summary
Pertimbangan dan batasan
Pertimbangkan hal berikut saat menggunakan tampilan terwujud dengan AWS Glue:
-
Tampilan terwujud memerlukan AWS Glue versi 5.1 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 Wilayah dan 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.
-
Pengidentifikasi yang berisi karakter khusus selain karakter alfanumerik dan garis bawah tidak didukung dalam kueri CREATE MATERIALIZED VIEW. Ini berlaku untuk semua jenis pengenal termasuk catalog/namespace/table nama, kolom dan nama bidang struct CTEs, dan alias.
-
Kolom tampilan terwujud yang dimulai dengan awalan __ivm dicadangkan untuk penggunaan sistem. Amazon 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.
-
Tabel yang direferensikan dalam kueri tampilan harus menggunakan konvensi penamaan tiga bagian (misalnya, glue_catalog.my_db.my_table) karena penyegaran otomatis tidak menggunakan pengaturan katalog dan database default.
-
Operasi penyegaran penuh menimpa seluruh tabel dan membuat snapshot sebelumnya tidak tersedia.
-
Fungsi non-deterministik seperti rand () atau current_timestamp () tidak didukung dalam definisi tampilan terwujud.