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

Bu makalede, bir sorguda adlandırılmış ifadelerin tekrar kullanımını iyileştirme adımları anlatılmaktadır.

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

Bir sorguda bu adlandırılmış ifadelere başvurduğunda 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 üretir.
  2. Adlandırılmış ifade hesaplanan değerle değiştirilir.

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

  • Hesaplamalar çok fazla kaynak kullandığında 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.

Risk azaltma

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 kullanırsı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 trueayarlayınhint.materialized.

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

Not

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