operator parse-where

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]] expressionwith* (stringConstantcolumnName [:columnType]) *...

Pelajari selengkapnya tentang konvensi sintaksis.

Parameter

Nama Jenis Diperlukan 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 \nbaru, dan i untuk tidak peka huruf besar/kecil. Bendera lainnya dapat ditemukan di Bendera.
ekspresi 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 setelah string kolom.
  • Pola penguraian ini dapat dimulai dengan ColumnName, selain StringConstant.
  • Jika ekspresi yang diurai tidak berjenis string, ekspresi tersebut akan dikonversi ke jenis string.

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 bernomor yang diambil 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

Output

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

Output

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

Output

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

Output

resourceName totalSlices
PipelineScheduler 27
PipelineScheduler 27
PipelineScheduler 27