Let deyimi
İfadeye let
veya işleve eşit bir değişken adı ayarlamak veya görünümler oluşturmak için deyimini kullanın.
let
deyimleri şunlar için yararlıdır:
- Karmaşık bir ifadeyi, her biri bir değişkenle temsil edilen birden çok bölüme ayırma.
- Okunabilirlik için sorgu gövdesinin dışındaki sabitleri tanımlama.
- Bir değişkeni bir kez tanımlama ve sorgu içinde birden çok kez kullanma.
Değişken daha önce iç içe deyimler gibi başka bir değeri temsil ettiyse, en let
içteki deyim uygulanır.
Syntax
Skaler veya tablosal ifadeler için söz dizimi
let
Adı=
ScalarExpression
let
Adı=
TabularExpression
Alan | Tanım | Örnek |
---|---|---|
Ad | Değişken adı geçerli olmalıdır. | Adından kaçabilirsiniz, örneğin ["Name with spaces"] |
ScalarExpression | Skaler sonucu olan bir ifade. | let one=1; |
TabularExpression | Tablosal sonucu olan bir ifade. | let RecentLog = Logs \| where Timestamp > ago(1h) |
Görünüm veya işlevin söz dizimi
let
Adı=
[view
] (
[TabularArgName:
(
*
)
,
[ArgNameArgType:
],
... ] )
{
FunctionBody}
let
Adı=
[view
] (
[ [TabularArgName:
(
[AttributeNameAttributeType:
] [,
... ] )
] ,
[ [ArgNameArgType:
, ...] ] )
{
FunctionBody '}
Alan | Tanım |
---|---|
FunctionBody | Kullanıcı tanımlı işlev veren bir ifade, anonim işlev bildirimi. |
görünüm | Yalnızca bağımsız değişken içermeyen parametresiz let bir deyimde görünür. Kullanıldığında deyimi, let tabloların/görünümlerin joker karakter seçimine sahip bir union işleç içeren sorgulara eklenir. |
TabularArgName | Tablosal bağımsız değişkenin adı. FunctionBody içinde görünebilir ve kullanıcı tanımlı işlev çağrıldığında belirli bir değere bağlıdır. |
AttributeName : AttributeType | Özniteliğin adı ve türü. Türleriyle bir dizi öznitelik içeren tablo şeması tanımının bir bölümü. |
ArgName | Skaler bağımsız değişkenin adı. FunctionBody içinde görünebilir ve kullanıcı tanımlı işlev çağrıldığında belirli bir değere bağlıdır. |
ArgType | Skaler bağımsız değişkenin türü. Şu anda kullanıcı tanımlı işlevler için aşağıdakiler desteklenir: bool , string , long , datetime , timespan , , real ve (ve dynamic bu türlerin diğer adları). |
Not
- Tablosal ifade için kullanabilirsiniz
(*)
. - Kullanıcı tanımlı bir işlevin parçası olarak tablosal ifade kullanıldığında, sütunlara işlevin bir parçası olarak erişilemiyor.
- Tablosal bağımsız değişkenler skaler bağımsız değişkenlerden önce görünür.
- İki ifade noktalı virgülle ayrılmalıdır.
Örnekler
Skaler değerleri tanımlama
Aşağıdaki örnekte skaler ifade deyimi kullanılır.
let n = 10; // number
let place = "Dallas"; // string
let cutoff = ago(62d); // datetime
Events
| where timestamp > cutoff
and city == place
| take n
Aşağıdaki örnek, gösterimi kullanarak ['name']
adı some number
bağlar ve ardından tablosal ifade deyiminde kullanır.
let ['some number'] = 20;
range y from 0 to ['some number'] step 5
Skaler hesaplama ile kullanıcı tanımlı işlev oluşturma
Bu örnekte, skaler hesaplama için bağımsız değişkenlerle let deyimi kullanılır. Sorgu, iki sayıyı çarpma işlevini MultiplyByN
tanımlar.
let MultiplyByN = (val:long, n:long) { val * n };
range x from 1 to 5 step 1
| extend result = MultiplyByN(x, 5)
Çıkış
x | sonuç |
---|---|
1 | 5 |
2 | 10 |
3 | 15 |
4 | 20 |
5 | 25 |
Girişi kırpan kullanıcı tanımlı işlev oluşturma
Aşağıdaki örnek, girişten baştaki ve sondakileri kaldırır.
let TrimOnes = (s:string) { trim("1", s) };
range x from 10 to 15 step 1
| extend result = TrimOnes(tostring(x))
Çıkış
x | sonuç |
---|---|
10 | 0 |
11 | |
12 | 2 |
13 | 3 |
14 | 4 |
15 | 5 |
Birden çok let deyimi kullanma
Bu örnek, bir deyimin () başkafoo1
bir deyimi (foo2
) kullandığı iki let deyimini tanımlar.
let foo1 = (_start:long, _end:long, _step:long) { range x from _start to _end step _step};
let foo2 = (_step:long) { foo1(1, 100, _step)};
foo2(2) | count
Çıkış
sonuç |
---|
50 |
Görünüm veya sanal tablo oluşturma
Bu örnekte, bir veya sanal tablosu oluşturmakview
için let deyiminin nasıl kullanılacağı gösterilmektedir.
let Range10 = view () { range MyColumn from 1 to 10 step 1 };
let Range20 = view () { range MyColumn from 1 to 20 step 1 };
search MyColumn == 5
Çıkış
$table | MyColumn |
---|---|
Aralık10 | 5 |
Aralık20 | 5 |
Materialize işlevi kullanma
işlevi, materialize()
sorgu yürütme sırasında alt sorgu sonuçlarını önbelleğe almanızı sağlar. işlevini kullandığınızda materialize()
veriler önbelleğe alınır ve sonucun sonraki çağrılarında önbelleğe alınmış veriler kullanılır.
let totalPagesPerDay = PageViews
| summarize by Page, Day = startofday(Timestamp)
| summarize count() by Day;
let materializedScope = PageViews
| summarize by Page, Day = startofday(Timestamp);
let cachedResult = materialize(materializedScope);
cachedResult
| project Page, Day1 = Day
| join kind = inner
(
cachedResult
| project Page, Day2 = Day
)
on Page
| where Day2 > Day1
| summarize count() by Day1, Day2
| join kind = inner
totalPagesPerDay
on $left.Day1 == $right.Day
| project Day1, Day2, Percentage = count_*100.0/count_1
Çıkış
Gün1 | Gün2 | Yüzde |
---|---|---|
2016-05-01 00:00:00.0000000 | 2016-05-02 00:00:00.0000000 | 34.0645725975255 |
2016-05-01 00:00:00.0000000 | 2016-05-03 00:00:00.0000000 | 16.618368960101 |
2016-05-02 00:00:00.0000000 | 2016-05-03 00:00:00.0000000 | 14.6291376489636 |
İç içe let deyimlerini kullanma
İç içe let deyimlerine, kullanıcı tanımlı işlev ifadesi içinde de dahil olmak üzere izin verilir. let deyimleri ve bağımsız değişkenleri işlev gövdesinin hem geçerli hem de iç kapsamında uygulanır.
let start_time = ago(5h);
let end_time = start_time + 2h;
T | where Time > start_time and Time < end_time | ...