operator find
Berlaku untuk: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Menemukan baris yang cocok dengan predikat di satu set tabel.
Cakupan find
juga dapat berupa lintas database atau lintas kluster.
find in (Table1, Table2, Table3) where Fruit=="apple"
find in (database('*').*) where Fruit == "apple"
find in (cluster('cluster_name').database('MyDB*').*) where Fruit == "apple"
find in (Table1, Table2, Table3) where Fruit=="apple"
Catatan
find
operator secara substansial kurang efisien daripada pemfilteran teks khusus kolom. Setiap kali kolom diketahui, sebaiknya gunakan operator di mana. find
tidak akan berfungsi dengan baik ketika ruang kerja berisi sejumlah besar tabel dan kolom dan volume data yang sedang dipindai tinggi dan rentang waktu kueri tinggi.
Sintaks
find
[withsource
= ColumnName] [in
(
Tables)
]where
Predikat [project-smart
|project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]]find
Predikat [project-smart
|project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]]
Pelajari selengkapnya tentang konvensi sintaksis.
Parameter
Nama | Tipe | Wajib | Deskripsi |
---|---|---|---|
ColumnName | string |
Secara default, output akan menyertakan kolom yang disebut source_ yang nilainya menunjukkan tabel sumber mana yang telah berkontribusi setiap baris. Jika ditentukan, ColumnName akan digunakan bukan source_. Setelah kartubebas cocok, jika kueri mereferensikan tabel dari lebih dari satu database termasuk database default, nilai kolom ini akan memiliki nama tabel yang memenuhi syarat dengan database. Demikian pula kualifikasi kluster dan database akan ditampilkan dalam nilai jika lebih dari satu kluster direferensikan. | |
Predicate | bool |
✔️ | Ekspresi boolean ini dievaluasi untuk setiap baris di setiap tabel input. Untuk informasi selengkapnya, lihat detail predicate-syntax. |
Tabel | string |
Nol atau lebih referensi tabel yang dipisahkan koma. Secara default, find akan terlihat di semua tabel dalam database saat ini. Anda dapat menggunakan:1. Nama tabel, seperti Events 2. Ekspresi kueri, seperti (Events | where id==42) 3. Sekumpulan tabel yang ditentukan dengan kartubebas. Misalnya, E* akan membentuk gabungan dari semua tabel dalam database yang namanya dimulai dengan E . |
|
project-smart atau project |
string |
Jika tidak ditentukan, project-smart akan digunakan secara default. Untuk informasi selengkapnya, lihat detail output-schema . |
withsource=
ColumnName: Opsional. Secara default, output akan menyertakan kolom yang disebut source_ yang nilainya menunjukkan tabel sumber mana yang telah berkontribusi setiap baris. Jika ditentukan, ColumnName akan digunakan bukan source_.Predikat:
boolean
Ekspresi di atas kolom tabel input Tabel [,
Tabel, ...]. Ini dievaluasi untuk setiap baris di setiap tabel input. Untuk informasi selengkapnya, lihat detail predicate-syntax.Tabel: Opsional. Nol atau lebih referensi tabel yang dipisahkan koma. Secara default, find akan mencari semua tabel untuk:
- Nama tabel, seperti
Events
- Ekspresi kueri, seperti
(Events | where id==42)
- Satu set tabel yang ditentukan dengan kartubebas. Misalnya,
E*
akan membentuk gabungan dari semua tabel yang namanya dimulai denganE
.
- Nama tabel, seperti
project-smart
|project
: Jika tidak ditentukanproject-smart
akan digunakan secara default. Untuk informasi selengkapnya, lihat detail output-schema .
Mengembalikan
Transformasi baris dalam Tabel [ Tabel, ...] yang Predikatnya adalah true
.,
Baris tersebut diubah sesuai dengan skema output.
Skema output
source_ column
Output operator find akan selalu menyertakan kolom source_ dengan nama tabel sumber. Kolom dapat diganti namanya menggunakan parameter withsource
.
kolom hasil
Tabel sumber yang tidak berisi kolom yang digunakan oleh evaluasi predikat, akan difilter.
Saat Anda menggunakan project-smart
, kolom yang akan muncul dalam output adalah:
- Kolom yang muncul secara eksplisit dalam predikat.
- Kolom yang umum untuk semua tabel yang difilter.
Kolom lainnya akan dikemas ke dalam tas properti dan akan muncul di kolom pack
tambahan.
Kolom yang direferensikan secara eksplisit oleh predikat dan muncul dalam beberapa tabel dengan beberapa jenis, akan memiliki kolom yang berbeda dalam skema hasil untuk setiap jenis tersebut. Tiap-tiap nama kolom akan dibuat dari nama dan jenis kolom asli, yang dipisahkan oleh garis bawah.
Saat menggunakan project
ColumnName[:
ColumnType ,
... ] [,
pack_all()
]:
- Tabel hasil akan menyertakan kolom yang ditentukan dalam daftar. Jika tabel sumber tidak berisi kolom tertentu, nilai dalam baris yang sesuai akan menjadi null.
- Saat menentukan ColumnType dengan ColumnName, kolom ini di "hasil" akan memiliki jenis tertentu, dan nilai akan ditransmisikan ke jenis tersebut jika diperlukan. Proses transmisi tidak akan berpengaruh pada jenis kolom saat mengevaluasi Predikat.
- Saat
pack_all()
digunakan, semua kolom, termasuk kolom yang diproyeksikan, dikemas ke dalam tas properti dan muncul di kolom tambahan, secara default 'column1'. Dalam tas properti, nama kolom sumber berfungsi sebagai nama properti dan nilai kolom berfungsi sebagai nilai properti.
Sintaksis predikat
Operator find mendukung sintaksis alternatif untuk istilah * has
tersebut, dan hanya menggunakan istilah, akan mencari istilah di semua kolom input.
Untuk ringkasan beberapa fungsi pemfilteran, lihat operator where.
Catatan
- Jika klausa
project
mereferensikan kolom yang muncul di beberapa tabel dan memiliki beberapa jenis, jenis harus mengikuti referensi kolom ini dalam klausa proyek - Jika kolom muncul dalam beberapa tabel dan memiliki beberapa jenis dan
project-smart
sedang digunakan, akan ada kolom yang sesuai untuk setiap jenis dalam hasilfind
, seperti yang dijelaskan dalam gabungan - Saat Anda menggunakan project-smart, perubahan predikat, dalam kumpulan tabel sumber, atau dalam skema tabel, dapat mengakibatkan perubahan pada skema output. Jika skema hasil konstan diperlukan, gunakan proyek sebagai gantinya
find
cakupan tidak menyertakan fungsi. Untuk menyertakan fungsi dalam cakupan find, tentukan pernyataan let dengan kata kunci tampilan.
Tips performa
- Gunakan tabel yang bertentangan dengan ekspresi tabular.
Jika ekspresi tabular, operator find melakukan fall back pada kueri yang
union
dapat mengakibatkan penurunan performa. - Jika kolom yang muncul dalam beberapa tabel dan memiliki beberapa jenis, adalah bagian dari klausa proyek, coba tambahkan ColumnType ke klausul proyek daripada memodifikasi tabel sebelum meneruskannya ke
find
. - Tambahkan filter berbasis waktu ke predikat. Gunakan nilai kolom tanggalwaktu atau ingestion_time().
- Cari di kolom tertentu, bukan pencarian teks lengkap.
- Sebaiknya jangan mereferensikan kolom yang muncul di beberapa tabel dan memiliki beberapa jenis. Jika predikat tersebut valid saat menyelesaikan jenis kolom tersebut untuk lebih dari satu jenis, kueri akan melakukan fallback pada gabungan. Misalnya, lihat contoh kasus ketika find akan bertindak sebagai gabungan.
Contoh
Pencarian istilah di semua tabel dalam database saat ini
Kueri menemukan semua baris dari semua tabel dalam database saat ini tempat kolom apa pun menyertakan kata Hernandez
. Catatan yang dihasilkan diubah sesuai dengan skema output. Output mencakup baris dari Customers
tabel dan SalesTable
tabel ContosoSales
database.
find "Hernandez"
Pencarian istilah di semua tabel yang cocok dengan pola nama dalam database saat ini
Kueri tersebut menemukan semua baris dari semua tabel dalam database saat ini yang namanya dimulai dengan C
, dan di kolom apa pun yang menyertakan kata Hernandez
. Catatan yang dihasilkan diubah sesuai dengan skema output. Sekarang, output hanya berisi rekaman dari Customers
tabel.
find in (C*) where * has "Hernandez"
Pencarian istilah di semua tabel di semua database dalam kluster
Kueri tersebut menemukan semua baris dari semua tabel dalam database saat ini tempat kolom apa pun menyertakan kata Kusto
.
Kueri ini adalah kueri lintas database.
Catatan yang dihasilkan diubah sesuai dengan skema output.
find in (database('*').*) where * has "Kusto"
Pencarian istilah di semua tabel dan database yang cocok dengan pola nama kluster saat ini
Kueri tersebut menemukan semua baris dari semua tabel yang namanya dimulai dengan K
di semua database yang namanya dimulai dengan B
dan di kolom apa pun yang menyertakan kata Kusto
.
Catatan yang dihasilkan diubah sesuai dengan skema output.
find in (database("S*").C*) where * has "Kusto"
Pencarian istilah di beberapa kluster
Kueri tersebut menemukan semua baris dari semua tabel yang namanya dimulai dengan K
di semua database yang namanya dimulai dengan B
dan di kolom apa pun yang menyertakan kata Kusto
.
Catatan yang dihasilkan diubah sesuai dengan skema output.
find in (cluster("cluster1").database("B*").K*, cluster("cluster2").database("C*".*))
where * has "Kusto"
Pencarian istilah di semua tabel
Kueri tersebut menemukan semua baris dari semua tabel dalam di kolom apa pun yang menyertakan kata Kusto
.
Catatan yang dihasilkan diubah sesuai dengan skema output.
find "Kusto"
Contoh hasil output find
Contoh berikut menampilkan cara penggunaan find
dua tabel: EventsTable1 dan EventsTable2.
Misalkan kita memiliki konten berikutnya dari dua tabel ini:
EventsTable1
Session_Id | Tingkat | EventText | Versi |
---|---|---|---|
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informasi | Some Text1 | v1.0.0 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Kesalahan | Some Text2 | v1.0.0 |
28b8e46e-3c31-43cf-83cb-48921c3986fc | Kesalahan | Some Text3 | v1.0.1 |
8f057b11-3281-45c3-a856-05ebb18a3c59 | Informasi | Some Text4 | v1.1.0 |
EventsTable2
Session_Id | Tingkat | EventText | EventName |
---|---|---|---|
f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Informasi | Some Other Text1 | Event1 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informasi | Some Other Text2 | Event2 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Kesalahan | Some Other Text3 | Event3 |
15eaeab5-8576-4b58-8fc6-478f75d8fee4 | Kesalahan | Some Other Text4 | Event4 |
Cari di kolom umum, proyeksikan kolom umum dan tidak umum, dan kemas kolom sisanya
find in (EventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' and Level == 'Error'
project EventText, Version, EventName, pack_all()
Hasil
source_ | EventText | Versi | EventName | pack_ |
---|---|---|---|---|
EventsTable1 | Some Text2 | v1.0.0 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"} | |
EventsTable2 | Some Other Text3 | Event3 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"} |
Cari di kolom umum dan tidak umum
find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName
Hasil
source_ | Session_Id | EventText | Versi | EventName |
---|---|---|---|---|
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Some Text1 | v1.0.0 | |
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Some Text2 | v1.0.0 | |
EventsTable2 | f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Some Other Text1 | Event1 |
Catatan:dalam praktiknya, baris EventsTable1 akan difilter dengan predikat Version == 'v1.0.0'
dan baris EventsTable2 akan difilter dengan predikat EventName == 'Event1'
.
Gunakan notasi yang disingkat untuk mencari di semua tabel dalam database saat ini
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
Hasil
source_ | Session_Id | Tingkat | EventText | pack_ |
---|---|---|---|---|
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informasi | Some Text1 | {"Version":"v1.0.0"} |
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Kesalahan | Some Text2 | {"Version":"v1.0.0"} |
EventsTable2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informasi | Some Other Text2 | {"EventName":"Event2"} |
EventsTable2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Kesalahan | Some Other Text3 | {"EventName":"Event3"} |
Tampilkan hasil dari setiap baris sebagai tas properti
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' project pack_all()
Hasil
source_ | pack_ |
---|---|
EventsTable1 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Information", "EventText":"Some Text1", "Version":"v1.0.0"} |
EventsTable1 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error", "EventText":"Some Text2", "Version":"v1.0.0"} |
EventsTable2 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Information", "EventText":"Some Other Text2", "EventName":"Event2"} |
EventsTable2 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error", "EventText":"Some Other Text3", "EventName":"Event3"} |
Contoh kasus ketika find
akan bertindak sebagai union
Menggunakan ekspresi non-tabular sebagai operand find
let PartialEventsTable1 = view() { EventsTable1 | where Level == 'Error' };
find in (PartialEventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
Mereferensikan kolom yang muncul di beberapa tabel dan memiliki beberapa jenis
Misalkan kita telah membuat dua tabel dengan menjalankan:
.create tables
Table1 (Level:string, Timestamp:datetime, ProcessId:string),
Table2 (Level:string, Timestamp:datetime, ProcessId:int64)
- Kueri berikut akan dijalankan sebagai
union
.
find in (Table1, Table2) where ProcessId == 1001
Skema hasil output akan berupa (Level:string, Timestamp, ProcessId_string, ProcessId_int).
- Kueri berikut juga akan dijalankan sebagai
union
, tetapi akan menghasilkan skema hasil yang berbeda.
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string
Skema hasil output akan berupa (Level:string, Timestamp, ProcessId_string)