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
Bagaimana tampilan terwujud bekerja 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:
-
AWS Akun
-
AWS Glue versi 5.1 atau yang lebih baru
-
Tabel sumber dalam format Apache Iceberg terdaftar di Katalog Data Glue AWS
-
Bucket S3 Tables atau bucket tujuan umum S3 untuk menyimpan data tampilan terwujud
-
Peran IAM dengan izin untuk mengakses AWS Glue Data Catalog dan Amazon S3
-
Izin dikonfigurasi menggunakan salah satu model berikut:
-
Hanya kebijakan IAM - Peran IAM Anda memerlukan CreateTable izin pada database AWS Glue dan akses baca ke tabel dasar (GetTables pada katalog AWS Glue dan akses baca ke lokasi S3 yang mendasarinya). Tidak diperlukan AWS Lake Formation konfigurasi.
-
AWS Lake Formation— Jika Anda sudah menggunakannya AWS Lake Formation untuk mengatur data lake Anda, konfigurasikan AWS Lake Formation izin pada tabel sumber dan database target, dan daftarkan bucket S3 Anda. AWS Lake Formation
-
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.
Melakukan konfigurasi AWS Lowongan kerja 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.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.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' )
Jika Anda menggunakan AWS Lake Formation untuk mengatur akses ke data lake Anda, tambahkan setelan berikut ke setiap konfigurasi katalog:
--conf spark.sql.catalog.glue_catalog.glue.lakeformation-enabled=true
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.defaultCatalog=glue_catalog ' '--conf spark.sql.optimizer.answerQueriesWithMVs.enabled=true ' '--conf spark.sql.materializedViews.metadataCache.enabled=true' }, GlueVersion='5.1' )
Jika Anda menggunakan AWS Lake Formation untuk mengatur akses ke data lake Anda, tambahkan setelan berikut ke setiap konfigurasi katalog:
--conf spark.sql.catalog.glue_catalog.glue.lakeformation-enabled=true
Melakukan konfigurasi AWS Notebook 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.defaultCatalog": "glue_catalog", "spark.sql.optimizer.answerQueriesWithMVs.enabled": "true", "spark.sql.materializedViews.metadataCache.enabled": "true" } }
Jika Anda menggunakan AWS Lake Formation, tambahkan baris berikut ke conf blok:
"spark.sql.catalog.glue_catalog.glue.lakeformation-enabled": "true"
Mengaktifkan penyegaran tambahan
Untuk mengaktifkan pengoptimalan penyegaran tambahan, 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.catalog.glue_catalog.glue.lakeformation-enabled– Opsional. Setel ketruehanya jika Anda menggunakan AWS Lake Formation untuk mengatur akses ke danau data Anda. Ketika dihilangkan atau disetel kefalse, kebijakan IAM digunakan untuk otorisasi. -
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 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 di AWS Lowongan kerja 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 AWS Notebook 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 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 di AWS Lowongan kerja 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()
Menanyakan di AWS Notebook 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 EXPLOW 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 di AWS Lowongan kerja 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 di AWS Lowongan kerja 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 AWS Notebook Glue Studio
Di buku catatan, gunakan perintah ajaib %%sql:
%%sql REFRESH MATERIALIZED VIEW customer_orders FULL
Memverifikasi eksekusi penyegaran tambahan
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 izin untuk peran IAM yang membuat tampilan (peran yang lebih pasti). AWS Glue mendukung dua model izin:
-
Hanya kebijakan IAM - Jika Anda mengelola tabel Katalog Data AWS Glue dengan kebijakan IAM, AWS Lake Formation konfigurasi tidak diperlukan.
-
AWS Lake Formation— Jika Anda sudah menggunakan AWS Lake Formation untuk mengatur data lake Anda, Anda dapat mengonfigurasi AWS Lake Formation izin untuk tampilan terwujud.
Izin yang diperlukan untuk peran definer
Jika hanya menggunakan kebijakan IAM:
Peran definer harus memiliki izin IAM berikut:
-
Pada Katalog Data AWS Glue — GetTable GetTables,, dan izin CreateTable API
-
Pada database target — CreateTable izin
-
Pada tabel sumber lokasi S3 - Akses baca (s3:GetObject, s3:) ListBucket
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.
Jika menggunakan AWS Lake Formation:
Peran definer harus memiliki AWS Lake Formation izin 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 AWS Lowongan kerja Glue
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/*" ] } ] }
Jika Anda menggunakan AWS Lake Formation, tambahkan juga izin berikut:
{ "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 AWS 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", "Principal": { "Service": "glue.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
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 terwujud
Jika hanya menggunakan kebijakan IAM:
Identitas IAM apa pun dengan GetTable izin pada tampilan terwujud dapat menanyakannya. Pengguna dapat menanyakan tampilan terwujud tanpa memerlukan akses langsung ke tabel sumber yang mendasarinya.
Jika menggunakan AWS Lake Formation:
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 AWS Lake Formation izin, 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 AWS Glue skrip pekerjaan
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 AWS Notebook 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.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 atau Apache Hive yang terdaftar di Katalog Data Glue. AWS Tabel Apache Hudi dan Linux Foundation Delta Lake tidak didukung saat peluncuran.
-
Tabel sumber harus berada di Wilayah dan akun yang sama dengan tampilan terwujud.
-
Tampilan terwujud tidak dapat AWS mereferensikan tampilan Glue Data Catalog, tampilan multi-dialek, atau tampilan terwujud lainnya sebagai tabel sumber.
-
Peran view definer harus memiliki akses baca penuh pada semua tabel sumber. Untuk pelanggan yang menggunakan kebijakan IAM, ini berarti GetTables izin pada katalog AWS Glue dan akses baca ke lokasi S3 yang mendasarinya. Untuk pelanggan yang menggunakan AWS Lake Formation, ini berarti SELECT atau ALL izin tanpa baris, kolom, atau filter sel 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 satu SELECT-FROM-WHERE-GROUP BY-HAVING blok 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 nama catalog/namespace /tabel, kolom dan nama bidang struct, CTE, 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.
-
Cross-Region dan tabel sumber 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.
-
Non-deterministic fungsi seperti rand () atau current_timestamp () tidak didukung dalam definisi tampilan terwujud.
-
AWS Lake Formation kontrol akses berbutir halus (keamanan tingkat baris, keamanan tingkat kolom, keamanan tingkat sel) pada tampilan terwujud saat ini tidak didukung.