Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Beralih layanan menggunakan menu tarik-turun Versi. Pelajari selengkapnya tentang navigasi.
Berlaku untuk: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel
Mengambil nilai ekspresi tabular selama durasi eksekusi kueri sehingga dapat direferensikan beberapa kali oleh kueri tanpa perhitungan ulang.
Sintaks
materialize(
Ekspresi)
Pelajari selengkapnya tentang konvensi sintaksis.
Parameter
| Nama | Tipe | Wajib | Deskripsi |
|---|---|---|---|
| ekspresi | string |
✔️ | Ekspresi tabular yang akan dievaluasi dan di-cache selama eksekusi kueri. |
Keterangan
Fungsi materialize() ini berguna dalam skenario berikut:
- Untuk mempercepat kueri yang melakukan perhitungan berat yang hasilnya digunakan beberapa kali dalam kueri.
- Untuk mengevaluasi ekspresi tabular hanya sekali dan menggunakannya berkali-kali dalam kueri. Ini biasanya diperlukan jika ekspresi tabular tidak mendeterministik. Misalnya, jika ekspresi menggunakan
rand()fungsi ataudcount().
Catatan
Materialize memiliki batas ukuran cache 5 GB. Batas ini adalah node per kluster dan saling menguntungkan untuk semua kueri yang berjalan secara bersamaan. Jika kueri menggunakan materialize() dan cache tidak dapat menyimpan data lagi, kueri akan dibatalkan karena kesalahan.
Petunjuk / Saran
- Cara lain untuk melakukan materialisasi ekspresi tabular adalah dengan menggunakan
hint.materializedbendera operator sebagai operator dan operator partisi. Mereka semua berbagi satu cache materialisasi. - Dorong semua operator yang mungkin mengurangi himpunan data materialisasi dan pertahankan semantik kueri. Misalnya, menggunakan filter umum di atas ekspresi materialisasi yang sama.
- Menggunakan materialize dengan join atau union ketika operand mereka memiliki subkueri bersama yang dapat dieksekusi sekali. Misalnya, kaki fork join/union. Lihat contoh menggunakan operator join.
- Materialize hanya dapat digunakan dalam pernyataan let jika Anda memberikan nama hasil cache. Lihat contoh penggunaan pernyataan let).
Perhatian
Tolok ukur kueri Anda dengan dan tanpa materialisasi() untuk melihat apakah kueri dan kueri meningkatkan performa untuk data dan pola kueri Anda. Dalam beberapa kasus, materialisasi() dapat meningkatkan penggunaan memori tanpa memberikan keuntungan performa yang signifikan, sehingga pengujian membantu Anda memilih pendekatan terbaik.
Contoh peningkatan performa kueri
Contoh berikut menunjukkan bagaimana materialize() dapat digunakan untuk meningkatkan kinerja kueri.
Ekspresi _detailed_data didefinisikan menggunakan materialize() fungsi dan oleh karena itu dihitung hanya sekali.
let _detailed_data = materialize(StormEvents | summarize Events=count() by State, EventType);
_detailed_data
| summarize TotalStateEvents=sum(Events) by State
| join (_detailed_data) on State
| extend EventPercentage = Events*100.0 / TotalStateEvents
| project State, EventType, EventPercentage, Events
| top 10 by EventPercentage
Hasil
| Status | Jenis Acara | EventPercentage | Acara |
|---|---|---|---|
| PERAIRAN HAWAII | Sengkayan | 100 | 2 |
| DANAU ONTARIO | Angin Badai Petir Laut | 100 | 8 |
| TELUK ALASKA | Sengkayan | 100 | 4 |
| ATLANTIK UTARA | Angin Badai Petir Laut | 95.2127659574468 | 179 |
| DANAU ERIE | Angin Badai Petir Laut | 92.5925925925926 | Dua puluh lima |
| E PACIFIC | Sengkayan | 90 | 9 |
| DANAU MICHIGAN | Angin Badai Petir Laut | 85.1648351648352 | 155 |
| DANAU HURON | Angin Badai Petir Laut | 79.3650793650794 | 50 |
| TELUK MEKSIKO | Angin Badai Petir Laut | 71.7504332755633 | 414 |
| HAWAII | Selancar Tinggi | 70.0218818380744 | 320 |
Contoh berikut menghasilkan satu set angka acak dan menghitung:
- Berapa banyak nilai berbeda dalam set (
Dcount) - Tiga nilai teratas dalam set
- Jumlah semua nilai ini dalam set
Operasi ini dapat dilakukan dengan menggunakan batch dan materialize:
let randomSet =
materialize(
range x from 1 to 3000000 step 1
| project value = rand(10000000));
randomSet | summarize Dcount=dcount(value);
randomSet | top 3 by value;
randomSet | summarize Sum=sum(value)
Hasil set 1:
| Dcount |
|---|
| 2578351 |
Hasil set 2:
| nilai |
|---|
| 9999998 |
| 9999998 |
| 9999997 |
Hasil set 3:
| Jumlah total |
|---|
| 15002960543563 |
Contoh penggunaan materialize()
Petunjuk / Saran
Materialisasikan kolom Anda pada waktu penyerapan jika sebagian besar kueri Anda mengekstrak bidang dari objek dinamis di jutaan baris. Dalam skenario ini, gunakan gambaran umum Kebijakan pembaruan.
Untuk menggunakan let pernyataan dengan nilai yang Anda gunakan lebih dari sekali, gunakan fungsi materialize(). Cobalah untuk mendorong semua operator yang mungkin yang akan mengurangi himpunan data terwujud dan tetap menyimpan semantik kueri. Misalnya, menggunakan filter, atau hanya kolom yang diperlukan untuk proyek.
let materializedData = materialize(Table
| where Timestamp > ago(1d));
union (materializedData
| where Text !has "somestring"
| summarize dcount(Resource1)), (materializedData
| where Text !has "somestring"
| summarize dcount(Resource2))
Filter adalah Text saling menguntungkan dan dapat didorong ke ekspresi materialize.
Kueri hanya membutuhkan kolom Timestamp, Text, Resource1, dan Resource2. Proyek kolom-kolom ini di dalam ekspresi materialize.
let materializedData = materialize(Table
| where Timestamp > ago(1d)
| where Text !has "somestring"
| project Timestamp, Resource1, Resource2, Text);
union (materializedData
| summarize dcount(Resource1)), (materializedData
| summarize dcount(Resource2))
Jika filter tidak identik, seperti dalam kueri berikut:
let materializedData = materialize(Table
| where Timestamp > ago(1d));
union (materializedData
| where Text has "String1"
| summarize dcount(Resource1)), (materializedData
| where Text has "String2"
| summarize dcount(Resource2))
Saat filter gabungan mengurangi hasil materialisasi secara drastis, gabungkan kedua filter pada hasil materialisasi dengan ekspresi logis or seperti dalam kueri berikut. Namun, simpan filter di setiap kaki penyatuan pekerja untuk mempertahankan semantik kueri.
let materializedData = materialize(Table
| where Timestamp > ago(1d)
| where Text has "String1" or Text has "String2"
| project Timestamp, Resource1, Resource2, Text);
union (materializedData
| where Text has "String1"
| summarize dcount(Resource1)), (materializedData
| where Text has "String2"
| summarize dcount(Resource2))