Pernyataan let
Pernyataan let
digunakan untuk mengatur nama variabel yang sama dengan ekspresi atau fungsi, atau untuk membuat tampilan.
Pernyataan let
berguna untuk:
- Memecah ekspresi kompleks menjadi beberapa bagian, masing-masing diwakili oleh variabel.
- Menentukan konstanta di luar isi kueri agar mudah dibaca.
- Menentukan variabel satu kali dan menggunakannya beberapa kali dalam kueri.
Jika variabel sebelumnya mewakili nilai lain, misalnya dalam pernyataan bertumpuk, pernyataan let
terdalam akan berlaku.
Untuk mengoptimalkan beberapa penggunaan pernyataan let
dalam satu kueri, lihat Mengoptimalkan kueri yang menggunakan ekspresi bernama.
Catatan
Pernyataan mengikat let
nama ke perhitungan, bukan ke nilai perhitungan yang dievaluasi. Perilaku ini berarti bahwa beberapa referensi ke nama yang sama dapat mengembalikan nilai yang berbeda karena perhitungan dievaluasi beberapa kali. Jika ini bukan perilaku yang diinginkan, gunakan toscalar() atau materialize().
Sintaks: Ekspresi skalar atau tabular
let
Nama=
Ekspresi
Penting
Pernyataan let harus diikuti oleh titik koma. Tidak boleh ada baris kosong antara pernyataan let atau antara pernyataan let dan pernyataan kueri lainnya.
Pelajari selengkapnya tentang konvensi sintaksis.
Parameter
Nama | Tipe | Wajib | Deskripsi |
---|---|---|---|
Nama | string |
✔️ | Nama variabel. Anda dapat menghindari nama dengan tanda kurung siku. Contohnya,["Name with spaces"] . |
Expression | string |
✔️ | Ekspresi dengan hasil skalar atau tabular. Misalnya, ekspresi dengan hasil skalar adalah let one=1; , dan ekspresi dengan hasil tabular adalah let RecentLog = Logs | where Timestamp > ago(1h) . |
Sintaks: Tampilan atau fungsi
let
Nama=
[view
] (
[ Parameter ])
{
FunctionBody}
Penting
Pernyataan let harus diikuti oleh titik koma. Tidak boleh ada baris kosong antara pernyataan let atau antara pernyataan let dan pernyataan kueri lainnya.
Pelajari selengkapnya tentang konvensi sintaksis.
Parameter
Nama | Tipe | Wajib | Deskripsi |
---|---|---|---|
FunctionBody | string |
✔️ | Ekspresi yang menghasilkan fungsi yang ditentukan pengguna. |
view |
string |
Hanya relevan untuk pernyataan tanpa parameter let . Saat digunakan, pernyataan let disertakan dalam kueri dengan operator union yang memiliki pilihan kartubebas tabel/tampilan. Misalnya, lihat Membuat tampilan atau tabel virtual. |
|
Parameter | string |
Parameter fungsi tabel atau skalar yang dipisahkan koma atau lebih. Untuk setiap parameter jenis tabular, parameter harus dalam format TableName : TableSchema, di mana TableSchema adalah daftar kolom yang dipisahkan koma dalam format ColumnName: ColumnType atau wildcard ().* Jika kolom ditentukan, maka argumen tabular input harus berisi kolom ini. Jika kartubebas ditentukan, maka argumen tabular input dapat memiliki skema apa pun. Untuk mereferensikan kolom dalam isi fungsi, kolom tersebut harus ditentukan. Misalnya, lihat Argumen tabular dengan skema dan argumen Tabular dengan kartubebas.Untuk setiap parameter jenis skalar, berikan nama parameter dan jenis parameter dalam format : . Nama dapat muncul di FunctionBody dan terikat ke nilai tertentu ketika fungsi yang ditentukan pengguna dipanggil. Satu-satunya jenis yang didukung adalah bool , , string long , datetime , timespan , real , dynamic , dan alias untuk jenis ini. |
Catatan
- Parameter tabular harus muncul sebelum parameter skalar.
- Setiap dua pernyataan harus dipisahkan oleh titik koma.
Contoh
Contoh di bagian ini memperlihatkan cara menggunakan sintaks untuk membantu Anda memulai.
Contoh dalam artikel ini menggunakan tabel yang tersedia untuk umum di membantu kluster, seperti tabel
StormEvents
di database Sampel.
Contoh dalam artikel ini menggunakan tabel yang tersedia untuk umum, seperti tabel
StormEvents
di analitik Cuaca data sampel.
Contoh kueri memperlihatkan sintaksis dan contoh penggunaan operator, pernyataan, atau fungsi.
Menentukan nilai skalar
Contoh berikut menggunakan pernyataan ekspresi skalar.
let n = 10; // number
let place = "Dallas"; // string
let cutoff = ago(62d); // datetime
Events
| where timestamp > cutoff
and city == place
| take n
Contoh berikut mengikat nama some number
menggunakan notasi ['name']
, lalu menggunakannya dalam pernyataan ekspresi tabular.
let ['some number'] = 20;
range y from 0 to ['some number'] step 5
Hasil
y |
---|
0 |
5 |
10 |
15 |
20 |
Membuat fungsi yang ditentukan pengguna dengan penghitungan skalar
Contoh ini menggunakan pernyataan let dengan argumen untuk penghitungan skalar. Kueri menentukan fungsi MultiplyByN
untuk mengalikan dua bilangan.
let MultiplyByN = (val:long, n:long) { val * n };
range x from 1 to 5 step 1
| extend result = MultiplyByN(x, 5)
Hasil
x | hasil |
---|---|
1 | 5 |
2 | 10 |
3 | 15 |
4 | 20 |
5 | 25 |
Membuat fungsi yang ditentukan pengguna yang memangkas input
Contoh berikut menghapus karakter depan dan belakang tambahan dari input.
let TrimOnes = (s:string) { trim("1", s) };
range x from 10 to 15 step 1
| extend result = TrimOnes(tostring(x))
Hasil
x | hasil |
---|---|
10 | 0 |
11 | |
12 | 2 |
13 | 3 |
14 | 4 |
15 | 5 |
Menggunakan beberapa pernyataan let
Contoh ini menentukan dua pernyataan let di mana satu pernyataan (foo2
) menggunakan (foo1
) yang lain.
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
Hasil
hasil |
---|
50 |
Membuat tabel virtual atau tampilan
Contoh ini menunjukkan cara menggunakan pernyataan let untuk membuat view
atau tabel virtual.
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
Hasil
$table | MyColumn |
---|---|
Range10 | 5 |
Range20 | 5 |
Gunakan fungsi materialize
Fungsi materialize()
memungkinkan Anda meng-cache hasil kueri bertumpuk selama waktu eksekusi kueri. Saat Anda menggunakan fungsi materialize()
, data akan di-cache, dan setiap pemanggilan hasil berikutnya akan menggunakan data yang di-cache.
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
Hasil
Day1 | Day2 | Persentase |
---|---|---|
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 |
Menggunakan pernyataan let bertumpuk
Pernyataan let bertumpuk diizinkan, termasuk dalam ekspresi fungsi yang ditentukan pengguna. Pernyataan dan argumen let berlaku di cakupan saat ini dan internal dari isi fungsi.
let start_time = ago(5h);
let end_time = start_time + 2h;
T | where Time > start_time and Time < end_time | ...
Argumen tabular dengan skema
Contoh berikut menentukan bahwa parameter T
tabel harus memiliki kolom State
jenis string
. Tabel T
juga dapat menyertakan kolom lain, tetapi tidak dapat direferensikan dalam fungsi StateState
karena tidak dideklarasikan.
let StateState=(T: (State: string)) { T | extend s_s=strcat(State, State) };
StormEvents
| invoke StateState()
| project State, s_s
Hasil
Status | s_s |
---|---|
ATLANTIK SELATAN | ATLANTIK SOUTHATLANTIC |
FLORIDA | FLORIDAFLORIDA |
FLORIDA | FLORIDAFLORIDA |
GEORGIA | GEORGIAGEORGIA |
MISSISSIPPI | MISSISSIPPIMISSISSIPPI |
... | ... |
Argumen tabular dengan kartubebas
Parameter T
tabel dapat memiliki skema apa pun, dan fungsi CountRecordsInTable
akan berfungsi.
let CountRecordsInTable=(T: (*)) { T | count };
StormEvents | invoke CountRecordsInTable()
Hasil
Hitung |
---|
59,066 |