operator parse-where
Berlaku untuk: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Mengevaluasi ekspresi string dan menguraikan nilainya menjadi satu atau beberapa kolom yang terhitung. Hasilnya hanya string yang berhasil diurai.
parse-where
mengurai string dengan cara yang sama seperti urai, dan memfilter string yang tidak berhasil diurai.
Lihat operator urai, yang menghasilkan null untuk string yang tidak berhasil diurai.
Sintaks
T | parse-where
[kind=
kind [flags=
regexFlags]] expression with
*
(stringConstant columnName [:
columnType]) *
...
Pelajari selengkapnya tentang konvensi sintaksis.
Parameter
Nama | Tipe | Wajib | Deskripsi |
---|---|---|---|
T | string |
✔️ | Input tabular untuk diurai. |
jenis | string |
✔️ | Salah satu nilai jenis yang didukung. Nilai defaultnya adalah simple . |
regexFlags | string |
Jika jenis adalah regex , maka Anda dapat menentukan bendera regex yang akan digunakan seperti U untuk tidak menarik, m untuk mode multibaris, s untuk mencocokkan baris \n baru, dan i untuk tidak peka huruf besar/kecil. Bendera lainnya dapat ditemukan di Bendera. |
|
expression | string |
✔️ | Ekspresi yang mengevaluasi ke string. |
stringConstant | string |
✔️ | Konstanta string yang akan dicari dan diurai. |
columnName | string |
✔️ | Nama kolom yang akan ditetapkan nilainya, diekstrak dari ekspresi string. |
columnType | string |
Nilai skalar yang menunjukkan jenis nilai yang akan dikonversi. Defaultnya adalah string . |
Catatan
- Gunakan proyek jika Anda juga ingin menghilangkan atau menamai beberapa kolom.
- Gunakan
*
dalam pola untuk melewati nilai sampah. Nilai ini tidak dapat digunakan setelahstring
kolom. - Pola penguraian ini dapat dimulai dengan ColumnName, selain StringConstant.
- Jika ekspresi yang diurai bukan tipe
string
, ekspresi tersebut akan dikonversi ke jenisstring
.
Nilai jenis yang didukung
Teks | Deskripsi |
---|---|
simple |
Ini adalah nilai default. stringConstant adalah nilai string reguler dan kecocokannya ketat. Semua pemisah string akan muncul dalam string yang diurai, dan semua kolom yang diperluas harus cocok dengan jenis yang diperlukan. |
regex |
stringConstant mungkin ekspresi reguler dan kecocokannya ketat. Semua pemisah string, yang dapat menjadi ekspresi reguler untuk mode ini, akan muncul dalam string yang diuraikan, dan semua kolom yang diperluas harus cocok dengan jenis yang diperlukan. |
Mode regex
Dalam mode regex, penguraian akan menerjemahkan pola ke regex dan menggunakan ekspresi reguler untuk melakukan pencocokan menggunakan grup yang diambil bernomor yang ditangani secara internal. Contohnya:
parse-where kind=regex Col with * <regex1> var1:string <regex2> var2:long
Regex yang akan dibuat oleh penguraian secara internal adalah .*?<regex1>(.*?)<regex2>(\-\d+)
.
*
diterjemahkan menjadi.*?
.string
diterjemahkan menjadi.*?
.long
diterjemahkan menjadi\-\d+
.
Mengembalikan
Tabel input, yang diperluas menurut daftar kolom yang disediakan untuk operator.
Catatan
Hanya string yang berhasil diurai yang akan berada dalam output. String yang tidak cocok dengan pola akan difilter.
Contoh
Operator parse-where
menyediakan cara yang efisien ke extend
tabel menggunakan beberapa extract
aplikasi pada ekspresi string
yang sama. Cara ini paling berguna ketika tabel memiliki kolom string
yang berisi beberapa nilai yang ingin Anda kelompokkan menjadi kolom tertentu. Misalnya, Anda dapat membagi kolom yang dibuat oleh pernyataan ("printf
"/"Console.WriteLine
") jejak pengembang.
Menggunakan parse
Dalam contoh di bawah ini, kolom EventText
tabel Traces
berisi string dari formulir Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5})
. Operasi di bawah ini akan memperluas tabel dengan enam kolom: resourceName
, totalSlices
, sliceNumber
, lockTime
, releaseTime
, previousLockTime
, Month
, dan Day
.
Beberapa string tidak memiliki kecocokan lengkap.
Menggunakan parse
, kolom terhitung akan memiliki null.
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=invalid_number, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=invalid_datetime, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=invalid_number, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse EventText with * "resourceName=" resourceName ", totalSlices=" totalSlices: long * "sliceNumber=" sliceNumber: long * "lockTime=" lockTime ", releaseTime=" releaseTime: date "," * "previousLockTime=" previouLockTime: date ")" *
| project
resourceName,
totalSlices,
sliceNumber,
lockTime,
releaseTime,
previouLockTime
Hasil
resourceName | totalSlices | sliceNumber | lockTime | releaseTime | previousLockTime |
---|---|---|---|---|---|
PipelineScheduler | 27 | 20 | 02/17/2016 08:40:01 | 2016-02-17 08:40:01.0000000 | 2016-02-17 08:39:01.0000000 |
PipelineScheduler | 27 | 22 | 02/17/2016 08:41:01 | 2016-02-17 08:41:00.0000000 | 2016-02-17 08:40:01.0000000 |
Menggunakan parse-where
Menggunakan 'parse-where' akan memfilter string yang tidak berhasil diurai dari hasilnya.
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=invalid_number, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=invalid_datetime, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=invalid_number, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse-where EventText with * "resourceName=" resourceName ", totalSlices=" totalSlices: long * "sliceNumber=" sliceNumber: long * "lockTime=" lockTime ", releaseTime=" releaseTime: date "," * "previousLockTime=" previousLockTime: date ")" *
| project
resourceName,
totalSlices,
sliceNumber,
lockTime,
releaseTime,
previousLockTime
Hasil
resourceName | totalSlices | sliceNumber | lockTime | releaseTime | previousLockTime |
---|---|---|---|---|---|
PipelineScheduler | 27 | 20 | 02/17/2016 08:40:01 | 2016-02-17 08:40:01.0000000 | 2016-02-17 08:39:01.0000000 |
PipelineScheduler | 27 | 22 | 02/17/2016 08:41:01 | 2016-02-17 08:41:00.0000000 | 2016-02-17 08:40:01.0000000 |
Mode Regex menggunakan bendera regex
Untuk mendapatkan resourceName dan totalSlices, gunakan kueri berikut:
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=11, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=44, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse-where kind = regex EventText with * "RESOURCENAME=" resourceName "," * "totalSlices=" totalSlices: long "," *
| project resourceName, totalSlices
Hasil
resourceName | totalSlices |
---|---|
parse-where
dengan bendera regex yang tidak peka huruf besar/kecil
Dalam kueri di atas, mode defaultnya adalah peka huruf besar/kecil, sehingga string berhasil diurai. Tidak ada hasil yang diperoleh.
Untuk mendapatkan hasil yang diperlukan, jalankan parse-where
dengan bendera regex yang tidak peka huruf besar/kecil (i
).
Hanya tiga string yang akan berhasil diurai, sehingga hasilnya adalah tiga catatan (beberapa totalSlices menyimpan bilangan bulat yang tidak valid).
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=11, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=44, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse-where kind = regex flags=i EventText with * "RESOURCENAME=" resourceName "," * "totalSlices=" totalSlices: long "," *
| project resourceName, totalSlices
Hasil
resourceName | totalSlices |
---|---|
PipelineScheduler | 27 |
PipelineScheduler | 27 |
PipelineScheduler | 27 |