Aracılığıyla paylaş


materialize()

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şlecihint.materialized bayrağı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))