優化使用具名表達式的查詢
本文討論如何在查詢中優化重複使用具名表達式。
在 Kusto 查詢語言 中,您可以透過數種不同的方式將名稱系結至複雜表示式:
當您在查詢中參考這些具名表達式時,會發生下列步驟:
- 系統會評估具名表達式內的計算。 此計算會產生純量或表格式值。
- 具名表達式會取代為匯出值。
如果使用相同的系結名稱多次,則基礎計算將會重複多次。 這何時是個問題?
- 當計算耗用許多資源並多次使用時。
- 當計算不具決定性時,查詢會假設所有叫用都會傳回相同的值。
風險降低
若要減輕這些疑慮,您可以在查詢期間具體化計算結果。 根據定義具名計算的方式,您將使用不同的具體化策略:
表格式函式
針對表格式函式使用下列策略:
- 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 |
相關內容
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應