operator find

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 where. 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)] wherePredicate [project-smart | projectColumnName[:ColumnType, ... ] [,pack_all()]]

  • findPredikat [project-smart | projectColumnName[:ColumnType, ... ] [,pack_all()]]

Pelajari selengkapnya tentang konvensi sintaksis.

Parameter

Nama Jenis Diperlukan 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 pencocokan kartubebas, 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.
Predikat bool ✔️ Ekspresi boolean ini dievaluasi untuk setiap baris di setiap tabel input. Untuk informasi selengkapnya, lihat detail predicate-syntax.
Tabel string Nol atau beberapa referensi tabel yang dipisahkan koma. Secara default, find akan melihat 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_.

  • Predicate: booleanEkspresi pada kolom tabel input Table [,Table, ...]. Ini dievaluasi untuk setiap baris untuk setiap baris di setiap tabel input. Untuk informasi selengkapnya, lihat detail predicate-syntax.

  • Tabel: Opsional. Nol atau beberapa 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 dengan E.
  • project-smart | project: Jika tidak ditentukan project-smart akan digunakan secara default. Untuk informasi selengkapnya, lihat detail output-schema .

Mengembalikan

Transformasi baris dalam Tabel [,Table, ...] 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 projectColumnName[: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 hasil find, 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()

Output

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

Output

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'

Output

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()

Output

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)