Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Sürüm açılan listesini kullanarak hizmetler arasında geçiş yapın. Gezinti hakkında daha fazla bilgi edinin.
Şunlar için geçerlidir: ✅ Microsoft Fabric ✅ Azure Veri Gezgini ✅ Azure İzleyici ✅ Microsoft Sentinel
Sorgu yürütme süresi boyunca tablosal ifadenin değerini yakalar, böylece sorgu tarafından yeniden hesaplama olmadan birden çok kez başvurulabilmesini sağlar.
Sözdizimi
materialize(
ifade)
Söz dizimi kuralları hakkında daha fazla bilgi edinin.
Parametreler
| Ad | Tür | Zorunlu | Açıklama |
|---|---|---|---|
| ifade | string |
✔️ | Sorgu yürütme sırasında değerlendirilecek ve önbelleğe alınabilecek tablosal ifade. |
Açıklamalar
materialize() İşlev aşağıdaki senaryolarda kullanışlıdır:
- Sonuçları sorguda birden çok kez kullanılan ağır hesaplamalar yapan sorguları hızlandırmak için.
- Tablosal ifadeyi yalnızca bir kez değerlendirmek ve sorguda birçok kez kullanmak için. Tablosal ifade belirleyici değilse bu genellikle gereklidir. Örneğin, ifade veya
rand()işlevlerini kullanıyorsadcount().
Not
Materialize'ın önbellek boyutu sınırı 5 GB'tır. Bu sınır küme düğümü başınadır ve eşzamanlı olarak çalışan tüm sorgular için karşılıklıdır. Sorgu kullanıyorsa materialize() ve önbellek daha fazla veri tutamıyorsa sorgu bir hatayla durdurulacaktır.
İpucu
- Tablosal ifadenin gerçekleştirilmesini sağlamanın bir diğer yolu da as işleci ve bölüm işleci
hint.materializedbayrağını kullanmaktır. Hepsi tek bir gerçekleştirme önbelleğini paylaşır. - Gerçekleştirilmiş veri kümesini azaltan ve sorgunun semantiğini tutan tüm olası işleçleri gönderme. Örneğin, aynı gerçekleştirilmiş ifadenin üzerinde ortak filtreler kullanın.
- İşlenenleri bir kez yürütülebilen karşılıklı alt sorgulara sahip olduğunda birleştirme veya birleşim ile gerçekleştirin. Örneğin birleşim/birleşim çatalı bacakları. Bkz . join işlecini kullanma örneği.
- Materialize yalnızca önbelleğe alınan sonuca bir ad verirseniz let deyimlerinde kullanılabilir. Bkz . let deyimlerini kullanma örneği).
Dikkat
Verilerinizin ve sorgu desenlerinizin performansını artırıp geliştirmediğini görmek için sorgularınızı materialize() ile ve olmadan karşılaştırma yapın. Bazı durumlarda materialize() önemli performans kazanımları sağlamadan bellek kullanımını artırabilir, bu nedenle test en iyi yaklaşımı seçmenize yardımcı olur.
Sorgu performansı iyileştirme örnekleri
Aşağıdaki örnekte, sorgunun performansını geliştirmek için nasıl materialize() kullanılabileceğini gösterilmektedir.
İfade _detailed_data işlevi kullanılarak materialize() tanımlanır ve bu nedenle yalnızca bir kez hesaplanır.
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
Çıktı
| Devlet | EtkinlikTürü | EventPercentage | Ekinlikler |
|---|---|---|---|
| HAWAII SULARı | Su damlası | 100 | 2 |
| ONTARIO GÖLÜ | Deniz Fırtına Rüzgarı | 100 | 8 |
| ALASKA KÖRFEZI | Su damlası | 100 | 4 |
| ATLANTIK KUZEY | Deniz Fırtına Rüzgarı | 95.2127659574468 | 179 |
| ERIE GÖLÜ | Deniz Fırtına Rüzgarı | 92.5925925925926 | Yirmi beş |
| E PASIFIK | Su damlası | 90 | 9 |
| MICHIGAN GÖLÜ | Deniz Fırtına Rüzgarı | 85.1648351648352 | 155 |
| HURON GÖLÜ | Deniz Fırtına Rüzgarı | 79.3650793650794 | 50 |
| MEKSIKA KÖRFEZI | Deniz Fırtına Rüzgarı | 71.7504332755633 | 414 |
| HAWAİİ | Yüksek Sörf | 70.0218818380744 | 320 |
Aşağıdaki örnek bir dizi rastgele sayı oluşturur ve hesaplar:
- Kümede kaç ayrı değer (
Dcount) - Kümedeki ilk üç değer
- Kümedeki tüm bu değerlerin toplamı
Bu işlem toplu işlemler kullanılarak gerçekleştirilebilir ve gerçekleştirilebilir:
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)
Sonuç kümesi 1:
| Sayım |
|---|
| 2578351 |
Sonuç kümesi 2:
| değer |
|---|
| 9999998 |
| 9999998 |
| 9999997 |
Sonuç kümesi 3:
| Toplam |
|---|
| 15002960543563 |
materialize() kullanma örnekleri
İpucu
Sorgularınızın çoğu milyonlarca satırdaki dinamik nesnelerden alan ayıklarsa, sütununuzu alım zamanında gerçekleştirin. Bu senaryoda Güncelleştirme ilkesine genel bakış'ı kullanın.
deyimini let birden çok kez kullandığınız bir değerle kullanmak için materialize() işlevini kullanın. Gerçekleştirilmiş veri kümesini azaltacak ve sorgunun semantiğini kullanmaya devam edecek tüm olası işleçleri göndermeyi deneyin. Örneğin, filtreleri kullanın veya yalnızca gerekli sütunları projeleyin.
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))
üzerindeki Text filtre karşılıklıdır ve gerçekleştirilmiş ifadeye gönderilebilir.
Sorguda yalnızca , TimestampTextve Resource1sütunları Resource2gerekir. Bu sütunları gerçekleştirilmiş ifadenin içine yansıtın.
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))
Filtreler aşağıdaki sorguda olduğu gibi aynı değilse:
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))
Birleştirilmiş filtre gerçekleştirilmiş sonucu önemli ölçüde azalttığında, aşağıdaki sorguda olduğu gibi, gerçekleştirilmiş sonuç üzerindeki her iki filtreyi de mantıksal or bir ifadeyle birleştirin. Ancak, sorgunun semantiğini korumak için filtreleri her birleşim bacağında tutun.
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))