materialize()

Sorgu yürütme sırasında diğer alt sorguların kısmi sonuça başvuracak şekilde bir alt sorgunun önbelleğe alınmasını sağlar.

Syntax

materialize(materialize()

Bağımsız değişkenler

  • expression: Sorgu yürütme sırasında değerlendirilecek ve önbelleğe alınan tablosal ifade.

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. Bir sorgu kullanırsa materialize() ve önbellek daha fazla veri tutamayacaksa, sorgu bir hatayla durdurulacak.

İpucu

  • Uzlaştırılan veri kümesi sayısını azaltan ve sorgunun semantiklerini saklayan tüm olası işleçleri gönderebilirsiniz. Örneğin, aynı malzemeleştirilmiş ifadenin üzerinde ortak filtreler kullanın.
  • İşlecilerin bir kez yürütülecek karşılıklı alt dizileri olduğunda birleştirme veya birleşim ile gerçekleştirin. Örneğin, birleştirme/birleşim fork tut. Join işleci kullanma örneğine bakın.
  • Materialize yalnızca önbelleğe alınan sonuça bir ad verdiyebilirsiniz let deyimleri içinde kullanılabilir. Let deyimlerini kullanma örneğine bakın).

Sorgu performansı geliştirme örnekleri

Aşağıdaki örnek, sorgunun materialize() performansını geliştirmek için nasıl kullanıla bir örnektir. İfade işlev _detailed_data kullanılarak tanımlanır materialize() 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
Durum Olay türü EventPercentage Ekinlikler
HAWAII VELAS Açık Deniz Mavisi 100 2
LAKE ON YERİ Deniz Fırtınası Rüzgarı 100 8
YERİNE'NIN YALISI Açık Deniz Mavisi 100 4
ATLANTIC NORTH Deniz Fırtınası Rüzgarı 95.2127659574468 179
LAKE ERIE Deniz Fırtınası Rüzgarı 92.5925925925926 25
E PACIFIC Açık Deniz Mavisi 90 9
LAKE MICHIGAN Deniz Fırtınası Rüzgarı 85.1648351648352 155
LAKE HURON Deniz Fırtınası Rüzgarı 79.3650793650794 50
GULF OF MEXICO Deniz Fırtınası Rüzgarı 71.7504332755633 414
HAWAİİ High Surf 70.0218818380744 320

Aşağıdaki örnek, bir dizi rastgele sayı üretir ve hesaplar:

  • kümede kaç ayrı değer (Dcount)
  • kümenin ilk üç değeri
  • kümede yer alan tüm bu değerlerin toplamı

Bu işlem toplu işler kullanılarak yapılabilir ve şunları yapılabilir:

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:

Dcount
2578351

Sonuç kümesi 2:

değer
9999998
9999998
9999997

Sonuç kümesi 3:

Sum
15002960543563

materialize() kullanma örnekleri

İpucu

Sorguların çoğu milyonlarca satırdaki dinamik nesnelerden alan ayıklarsa, sütununu alımı zamanında elde edersiniz.

deyimini let birden çok kez kullanılan bir değerle kullanmak için let. Gerçekleştirilen veri kümelerini azaltacak ve sorgunun semantiklerini saklayacak tüm olası işleçleri gönderebilirsiniz. Örneğin filtreleri kullanın veya yalnızca gerekli sütunları proje olarak ayarlayın.

    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))

üzerinde filtre karşılıklıdır Text ve ifadeyi uzlaştırarak ifadeye geri itilir. Sorgunun yalnızca , Timestamp, ve Textsütunlarına Resource1ihtiyacı vardır Resource2. Project ifadenin içinde bu sütunları seçin.

    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))

Aşağıdaki sorguda olduğu gibi filtreler 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, elde edilen sonucu önemli ölçüde azaltıyorsa, or aşağıdaki sorguda olduğu gibi her iki filtreyi de bir mantıksal ifadeyle birleştirin. Ancak, sorgunun semantiklerini korumak için filtreleri her bir union okunda tutabilirsiniz.

    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))