Share via


優化使用具名表達式的查詢

本文討論如何在查詢中優化重複使用具名表達式。

在 Kusto 查詢語言 中,您可以透過數種不同的方式將名稱系結至複雜表示式:

當您在查詢中參考這些具名表達式時,會發生下列步驟:

  1. 系統會評估具名表達式內的計算。 此計算會產生純量或表格式值。
  2. 具名表達式會取代為匯出值。

如果使用相同的系結名稱多次,則基礎計算將會重複多次。 這何時是個問題?

  • 當計算耗用許多資源並多次使用時。
  • 當計算不具決定性時,查詢會假設所有叫用都會傳回相同的值。

風險降低

若要減輕這些疑慮,您可以在查詢期間具體化計算結果。 根據定義具名計算的方式,您將使用不同的具體化策略:

表格式函式

針對表格式函式使用下列策略:

  • let 語句和函式參數:使用 materialize () 函式。
  • as 運算子:將 hint.materialized 提示值設定為 true

例如,下列查詢會使用不具決定性的表格式 範例運算符

注意

數據表一般不會排序,因此查詢中的任何數據表參考都是依定義,不具決定性。

不使用具體化函式的行為

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

輸出

x
63
92

使用具體化函式的行為

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

輸出

x
95
95

純量函式

使用 toscalar () ,可以強制不具決定性純量函式只計算一次。

例如,下列查詢會使用不具決定性的函式 rand ()

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

輸出

print_0 print_1 print_2 print_3
166 137 70 70