Tampilan Materialisasi
Berlaku untuk: ✅Microsoft Fabric✅Azure Data Explorer
Tampilan materialisasi mengekspos kueri agregasi melalui tabel sumber, atau di atas tampilan material lainnya.
Tampilan material selalu mengembalikan hasil terbaru dari kueri agregasi (selalu segar). Mengkueri tampilan materialisasi lebih bersifat performant daripada menjalankan agregasi langsung di atas tabel sumber.
Catatan
- Untuk memutuskan apakah tampilan materialisasi cocok untuk Anda, tinjau kasus penggunaan tampilan materialisasi.
- Tampilan materialisasi memiliki beberapa batasan. Sebelum bekerja dengan fitur , tinjau pertimbangan performa.
- Pertimbangkan untuk menggunakan kebijakan pembaruan jika sesuai. Untuk informasi selengkapnya, lihat Tampilan terwujud vs. kebijakan pembaruan.
- Pantau kesehatan tampilan materialisasi Anda berdasarkan rekomendasi dalam Memantau tampilan terwujud.
Mengapa menggunakan tampilan materialisasi?
Dengan menginvestasikan sumber daya (penyimpanan data, siklus CPU latar belakang) untuk tampilan terwujud dari agregasi yang umum digunakan, Anda mendapatkan manfaat berikut:
Peningkatan performa: Mengkueri tampilan materialisasi biasanya berperforma lebih baik daripada mengkueri tabel sumber untuk fungsi agregasi yang sama.
Kesegaran: Kueri tampilan material selalu mengembalikan hasil terbaru, terlepas dari kapan materialisasi terakhir terjadi. Kueri menggabungkan bagian materialisasi tampilan dengan catatan dalam tabel sumber, yang belum terwujud (
delta
bagian), selalu memberikan hasil terbaru.Pengurangan biaya: Mengkueri tampilan materialisasi mengonsumsi lebih sedikit sumber daya daripada melakukan agregasi melalui tabel sumber. Kebijakan retensi tabel sumber dapat dikurangi jika hanya diperlukan agregasi. Pengaturan ini mengurangi biaya cache panas untuk tabel sumber.
Misalnya kasus penggunaan, lihat Kasus penggunaan tampilan materialisasi.
Bagaimana tampilan materialisasi bekerja
Tampilan materialisasi terbuat dari dua komponen:
- Bagian materialisasi - tabel yang menyimpan rekaman agregat dari tabel sumber, yang telah diproses. Tabel ini selalu menyimpan satu catatan per kombinasi grup demi gabungan agregasi.
- Delta - catatan yang baru dicerna dalam tabel sumber yang belum diproses.
Mengkueri tampilan materialisasi menggabungkan bagian materialisasi dengan bagian delta, memberikan hasil terbaru dari kueri agregasi. Proses materialisasi offline menyerap rekaman baru dari delta ke tabel materialisasi, dan memperbarui rekaman yang ada. Jika persimpangan antara delta dan bagian terwujud besar, dan banyak catatan memerlukan pembaruan, ini mungkin berdampak negatif pada proses materialisasi. Lihat memantau tampilan materialisasi tentang cara memecahkan masalah situasi tersebut.
Kueri tampilan materialisasi
Ada 2 cara untuk menanyakan tampilan materialisasi:
Kueri seluruh tampilan: saat Anda menanyakan tampilan materialisasi dengan namanya, mirip dengan kueri tabel, kueri tampilan materialisasi menggabungkan bagian materialisasi tampilan dengan catatan di tabel sumber yang belum terwujud (
delta
).- Mengkueri tampilan materialisasi selalu mengembalikan hasil terbaru, berdasarkan semua rekaman yang diserap ke tabel sumber. Untuk informasi lebih lanjut tentang bagian material vs. non-materialisasi dalam tampilan material, lihat cara kerja tampilan yang terwujud.
- Opsi ini mungkin tidak berkinerja terbaik karena perlu mewujudkan
delta
bagian selama waktu kueri. Performa dalam hal ini tergantung pada usia tampilan dan filter yang diterapkan dalam kueri. Bagian pengoptimal kueri tampilan material mencakup kemungkinan cara untuk meningkatkan performa kueri saat mengkueri seluruh tampilan.
Kueri hanya bagian yang terwujud: cara lain untuk mengkueri tampilan adalah dengan menggunakan
materialized_view()
fungsi. Opsi ini hanya mendukung kueri bagian tampilan yang terwujud, sambil menentukan latensi maksimum yang bersedia ditoleransi pengguna.- Opsi ini tidak dijamin untuk mengembalikan catatan terbaru, tetapi harus selalu lebih berperforma daripada menanyakan seluruh tampilan.
- Fungsi ini berguna untuk skenario di mana Anda bersedia mengorbankan kesegaran untuk performa, misalnya untuk dasbor telemetri.
Tip
Kueri atas bagian materialisasi hanya selalu berkinerja lebih baik daripada mengkueri seluruh tampilan. Selalu gunakan fungsi materialized_view()
ini jika berlaku untuk kasus penggunaan Anda.
Tampilan materialisasi berpartisipasi dalam kueri lintas kluster atau lintas database, tetapi tidak termasuk dalam serikat atau penelusuran kartubebas.
- Contoh berikut semuanya mencakup tampilan materialisasi berdasarkan nama
ViewName
:
cluster('cluster1').database('db').ViewName cluster('cluster1').database('*').ViewName database('*').ViewName database('DB*').ViewName database('*').materialized_view('ViewName') database('DB*').materialized_view('ViewName')
- Contoh berikut tidak menyertakan rekaman dari tampilan materialisasi:
cluster('cluster1').database('db').* database('*').View* search in (*) search *
- Contoh berikut semuanya mencakup tampilan materialisasi berdasarkan nama
Tampilan materialisasi berpartisipasi dalam kueri lintas Eventhouse atau lintas database, tetapi tidak disertakan dalam gabungan atau pencarian kartubebas.
- Contoh berikut semuanya mencakup tampilan materialisasi berdasarkan nama
ViewName
:
cluster("<serviceURL>").database('db').ViewName cluster("<serviceURL>").database('*').ViewName database('*').ViewName database('DB*').ViewName database('*').materialized_view('ViewName') database('DB*').materialized_view('ViewName')
- Contoh berikut tidak menyertakan rekaman dari tampilan materialisasi:
cluster("<serviceURL>").database('db').* database('*').View* search in (*) search *
- Contoh berikut semuanya mencakup tampilan materialisasi berdasarkan nama
Pengoptimal kueri tampilan material
Saat mengkueri seluruh tampilan, bagian yang terwujud digabungkan dengan delta
selama waktu kueri. Ini termasuk menggabungkan delta
dan menggabungkannya dengan bagian yang terwujud.
- Mengkueri seluruh tampilan berkinerja lebih baik jika kueri menyertakan filter pada grup menurut kunci kueri tampilan materialisasi. Lihat tips selengkapnya tentang cara membuat tampilan materialisasi Anda, berdasarkan pola kueri Anda, di
.create materialized-view
tips performa bagian . - Pengoptimal kueri memilih ringkasan/gabungkan strategi yang diharapkan dapat meningkatkan performa kueri. Misalnya, keputusan apakah akan mengocok kueri sebagian didasarkan pada jumlah catatan
delta
. Properti permintaan klien berikut memberikan kontrol atas pengoptimalan yang diterapkan. Anda dapat menguji properti ini dengan kueri tampilan materialisasi dan mengevaluasi dampaknya terhadap performa kueri.
Nama properti permintaan klien | Tipe | Deskripsi |
---|---|---|
materialized_view_query_optimization_costbased_enabled |
bool |
Jika diatur ke false , nonaktifkan ringkasan/gabung pengoptimalan dalam kueri tampilan material. Menggunakan strategi default. Defaultnya adalah true . |
materialized_view_shuffle |
dynamic |
Paksa pengocokan kueri tampilan materialisasi, dan (opsional) menyediakan kunci tertentu untuk dikocok. Lihat contoh di bawah. |
ingestion_time()
fungsi dalam konteks tampilan materialisasi
fungsi ingestion_time() mengembalikan nilai null, saat digunakan dalam konteks tampilan materialisasi, jika mengkueri seluruh tampilan. Saat mengkueri bagian terwujud dari tampilan, nilai pengembalian bergantung pada jenis tampilan materialisasi:
- Dalam tampilan materialisasi yang mencakup agregasi tunggal
arg_max()
/arg_min()
take_any()
/,ingestion_time()
sama denganingestion_time()
rekaman yang sesuai dalam tabel sumber. - Dalam semua tampilan materialisasi lainnya, nilainya
ingestion_time()
kira-kira adalah waktu materialisasi (lihat cara kerja tampilan materialisasi).
Contoh
Kueri seluruh tampilan. Catatan terbaru dalam tabel sumber disertakan:
ViewName
Kueri bagian material dari tampilan saja, terlepas dari kapan terakhir kali terwujud.
materialized_view("ViewName")
Query seluruh tampilan, dan memberikan "petunjuk" untuk menggunakan strategi
shuffle
. Catatan terbaru dalam tabel sumber disertakan:- Contoh # 1: mengocok berdasarkan kolom
Id
(mirip dengan menggunakanhint.shufflekey=Id
):
set materialized_view_shuffle = dynamic([{"Name" : "ViewName", "Keys" : [ "Id" ] }]); ViewName
- Contoh # 2: mengocok berdasarkan semua tombol (mirip dengan menggunakan
hint.strategy=shuffle
):
set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]); ViewName
- Contoh # 1: mengocok berdasarkan kolom
Pertimbangan performa
Kontributor utama yang dapat mempengaruhi kesehatan pandangan material adalah:
- Sumber daya kluster: Seperti proses lain yang berjalan pada kluster, tampilan material mengonsumsi sumber daya (CPU, memori) dari kluster. Jika kluster kelebihan beban, menambahkan tampilan material untuk itu dapat menyebabkan degradasi dalam performa kluster. Pantau kesehatan kluster Anda menggunakan metrik kesehatan kluster. Skala otomatis yang dioptimalkan saat ini tidak mempertimbangkan kesehatan tampilan material sebagai bagian dari aturan skala otomatis.
- Proses materialisasi dibatasi oleh jumlah memori dan CPU yang dapat dikonsumsinya. Batas ini ditentukan, dan dapat diubah, dalam grup beban kerja tampilan materialisasi.
Tumpang tindih dengan data materialisasi: Selama materialisasi, semua rekaman baru diserap ke tabel sumber sejak materialisasi terakhir (delta) diproses dan diwujudkan dalam tampilan. Semakin tinggi persimpangan antara rekaman baru dan rekaman yang sudah terwujud, semakin buruk performa tampilan materialnya. Tampilan materialisasi akan bekerja paling baik jika jumlah rekaman yang diperbarui (misalnya, dalam tampilan
arg_max
) merupakan subset kecil dari tabel sumber. Jika semua atau sebagian besar rekaman tampilan material perlu diperbarui dalam setiap siklus materialisasi, maka tampilan materialisasi tidak akan bekerja dengan baik.Tingkat konsumsi: Tidak ada batasan kode keras pada volume data atau tingkat penyerapan di tabel sumber tampilan materialisasi. Namun, tingkat penyerapan yang disarankan untuk tampilan materialisasi tidak lebih dari 1-2GB /detik. Tingkat konsumsi yang lebih tinggi mungkin masih berperforma baik. Performa tergantung pada ukuran database, sumber daya yang tersedia, dan jumlah persimpangan dengan data yang ada.
- Jumlah tampilan materialisasi dalam kluster: Pertimbangan di atas berlaku untuk setiap pandangan materialisasi individu yang didefinisikan dalam kluster. Setiap tampilan menggunakan sumber dayanya sendiri, dan banyak tampilan bersaing satu sama lain pada sumber daya yang tersedia. Meskipun tidak ada batasan kode keras untuk jumlah tampilan materialisasi dalam kluster, kluster mungkin tidak dapat menangani semua tampilan material, ketika ada banyak yang ditentukan. Kebijakan kapasitas dapat disesuaikan jika ada lebih dari satu tampilan materialisasi dalam kluster. Meningkatkan nilai
ClusterMinimumConcurrentOperations
dalam kebijakan untuk menjalankan pandangan yang lebih material secara bersamaan.
- Definisi tampilan materialisasi: Definisi tampilan materialisasi harus didefinisikan sesuai dengan praktik terbaik kueri untuk performa kueri terbaik. Untuk informasi selengkapnya, lihat membuat tips performa perintah.
Tampilan materialisasi atas tampilan materialisasi
Tampilan materialisasi dapat dibuat di atas tampilan materialisasi lain jika tampilan material sumber adalah tampilan deduplikasi. Secara khusus, agregasi tampilan material sumber harus take_any(*)
untuk mengurai sumber catatan. Tampilan material kedua dapat menggunakan fungsi agregasi yang didukung. Untuk informasi spesifik tentang cara membuat tampilan materialisasi atas tampilan materialisasi, lihat .create materialized-view
perintah.
Tip
Saat mengkueri tampilan materialisasi yang ditentukan di atas tampilan materialisasi lain, sebaiknya kueri bagian materialisasi hanya menggunakan fungsi.materialized_view()
Mengkueri seluruh tampilan tidak dilakukan saat kedua tampilan tidak sepenuhnya terwujud. Untuk informasi selengkapnya, lihat pemantauan tampilan materialisasi.