Adlandırılmış ifadeleri kullanan sorguları iyileştirme

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

Bu makalede, sorguda adlandırılmış ifadelerin tekrar kullanımını iyileştirme işlemi açıklanır.

Kusto Sorgu Dili'nde, adları karmaşık ifadelere çeşitli yollarla bağlayabilirsiniz:

Bir sorguda bu adlandırılmış ifadelere başvurdığınızda aşağıdaki adımlar gerçekleşir:

  1. Adlandırılmış ifade içindeki hesaplama değerlendirilir. Bu hesaplama bir skaler veya tablosal değer oluşturur.
  2. Adlandırılmış ifade hesaplanan değerle değiştirilir.

Aynı ilişkili ad birden çok kez kullanılırsa, temel hesaplama birden çok kez yinelenir. Bu ne zaman sorun olur?

  • Hesaplamalar birçok kaynak tükettiğinde ve birçok kez kullanıldığında.
  • Hesaplama belirleyici olmadığında, ancak sorgu aynı değeri döndürmek için tüm çağrıları varsayar.

Mitigation

Bu endişeleri azaltmak için sorgu sırasında hesaplama sonuçlarını bellekte gerçekleştirebilirsiniz. Adlandırılmış hesaplamanın tanımlanma şekline bağlı olarak, farklı gerçekleştirme stratejileri kullanacaksınız:

Tablosal işlevler

Tablosal işlevler için aşağıdaki stratejileri kullanın:

  • let deyimleri ve işlev parametreleri: materialize() işlevini kullanın.
  • as işleci: İpucu değerini olarak hint.materializedayarlayıntrue.

Örneğin, aşağıdaki sorgu belirleyici olmayan tablosal örnek işlecini kullanır:

Uyarı

Tablolar genel olarak sıralanmadığından, sorgudaki tablo başvuruları tanıma göre belirlenimci değildir.

Materialize işlevini kullanmadan davranış

range x from 1 to 100 step 1
| sample 1
| as T
| union T

Çıkış

x
63
92

Materialize işlevini kullanma davranışı

range x from 1 to 100 step 1
| sample 1
| as hint.materialized=true T
| union T

Çıkış

x
95
95

Skaler işlevler

Belirlenemeyen skaler işlevler , toskalar() kullanılarak tam olarak bir kez hesaplanmaya zorlanabilir.

Örneğin, aşağıdaki sorgu rand() adlı belirlenimi olmayan işlevi kullanır:

let x = () {rand(1000)};
let y = () {toscalar(rand(1000))};
print x, x, y, y

Çıkış

print_0 print_1 print_2 print_3
166 137 70 70