Bagikan melalui


operator parse-kv

Berlaku untuk: ✅Microsoft Fabric

Mengekstrak informasi terstruktur dari ekspresi string dan mewakili informasi dalam formulir kunci/nilai.

Mode ekstraksi berikut didukung:

Sintaks

Pemisah yang ditentukan

T|parse-kvExpressionas(KeysList)with(pair_delimiter=PairDelimiter,kv_delimiter= KvDelimiter [,quote=QuoteChars ... [,escape= EscapeChar ...]] Aku akan menemuinya.,greedy=true)

Pemisah yang tidak ditentukan

T|parse-kv Expressionas(KeysList)with( [quote=QuoteChars ... [,escape= EscapeChar ...]])

Regex

T|parse-kv Expressionas( KeysList)with(regex= RegexPattern))

Pelajari selengkapnya tentang konvensi sintaksis.

Parameter

Nama Tipe Wajib Deskripsi
Expression string ✔️ Ekspresi untuk mengekstrak nilai kunci.
KeysList string ✔️ Daftar nama kunci yang dipisahkan koma dan jenis data nilainya. Urutan kunci tidak harus cocok dengan urutan munculnya dalam teks.
PairDelimiter string Pemisah yang memisahkan pasangan nilai kunci satu sama lain.
KvDelimiter string Pemisah yang memisahkan kunci dari nilai.
QuoteChars string String satu atau dua karakter harfiah yang mewakili tanda kutip pembuka dan penutupan bahwa nama kunci atau nilai yang diekstrak dapat dibungkus. Parameter dapat diulang untuk menentukan sekumpulan tanda kutip pembuka/penutupan terpisah.
EscapeChar string String satu karakter harfiah yang menjelaskan karakter yang dapat digunakan untuk melarikan diri dari karakter khusus dalam nilai yang dikutip. Parameter dapat diulang jika beberapa karakter escape digunakan.
RegexPattern string Ekspresi reguler yang berisi dua grup pengambilan persis. Grup pertama mewakili nama kunci, dan grup kedua mewakili nilai kunci.

Mengembalikan

Ekspresi tabular input asli T, diperluas dengan kolom per kunci yang ditentukan untuk diekstrak.

Catatan

  • Jika kunci tidak muncul dalam rekaman, nilai kolom yang sesuai adalah null atau string kosong, tergantung pada jenis kolom.
  • Hanya kunci yang tercantum dalam operator yang diekstrak.
  • Tampilan pertama kunci diekstrak, dan nilai berikutnya diabaikan.
  • Saat Anda mengekstrak kunci dan nilai, spasi putih di depan dan di belakang diabaikan.

Contoh

Contoh di bagian ini memperlihatkan cara menggunakan sintaks untuk membantu Anda memulai.

Ekstraksi dengan pemisah yang terdefinisi dengan baik

Dalam kueri ini, kunci dan nilai dipisahkan oleh pemisah yang ditentukan dengan baik. Delimeter ini adalah karakter koma dan titik dua.

print str="ThreadId:458745723, Machine:Node001, Text: The service is up, Level: Info"
| parse-kv str as (Text: string, ThreadId:long, Machine: string) with (pair_delimiter=',', kv_delimiter=':')
| project-away str

Hasil

Teks ThreadId Mesin
Layanan sudah habis 458745723 Node001

Ekstraksi dengan kutipan nilai

Terkadang nama kunci atau nilai dibungkus dalam tanda kutip, yang memungkinkan nilai itu sendiri berisi karakter pemisah. Contoh berikut menunjukkan bagaimana quote argumen digunakan untuk mengekstrak nilai tersebut.

print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure="connection aborted" "event time"=2021-01-01T10:00:54'
| parse-kv str as (['event time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='"')
| project-away str

Hasil

waktu kejadian src dst byte kegagalan
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 koneksi dibatalkan

Kueri ini menggunakan tanda kutip pembuka dan penutupan yang berbeda:

print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure=(connection aborted) (event time)=(2021-01-01 10:00:54)'
| parse-kv str as (['event time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='()')
| project-away str

Hasil

waktu kejadian src dst byte kegagalan
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 koneksi dibatalkan

Nilai itu sendiri mungkin berisi karakter kutipan yang lolos dengan benar, seperti yang ditunjukkan contoh berikut:

print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure="the remote host sent \\"bye!\\"" time=2021-01-01T10:00:54'
| parse-kv str as (['time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='"', escape='\\')
| project-away str

Hasil

waktu src dst byte kegagalan
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 host jarak jauh mengirim "bye!"

Ekstraksi dalam mode serakah

Ada kasus ketika nilai yang tidak dikutip mungkin berisi pemisah pasangan. Dalam hal ini, gunakan greedy mode untuk menunjukkan kepada operator untuk memindai hingga tampilan kunci berikutnya (atau akhir string) saat mencari nilai berakhir.

Contoh berikut membandingkan cara kerja operator dan tanpa greedy mode yang ditentukan:

print str='name=John Doe phone=555 5555 city=New York'
| parse-kv str as (name:string, phone:string, city:string) with (pair_delimiter=' ', kv_delimiter='=')
| project-away str

Hasil

nama telepon kota
John 555 Baru
print str='name=John Doe phone=555 5555 city=New York'
| parse-kv str as (name:string, phone:string, city:string) with (pair_delimiter=' ', kv_delimiter='=', greedy=true)
| project-away str

Hasil

nama telepon kota
John Doe 555 5555 New York

Ekstraksi tanpa pemisah yang terdefinisi dengan baik

Dalam contoh berikut, setiap karakter non-infanumerik dianggap sebagai pemisah yang valid:

print str="2021-01-01T10:00:34 [INFO] ThreadId:458745723, Machine:Node001, Text: Started"
| parse-kv str as (Text: string, ThreadId:long, Machine: string)
| project-away str

Hasil

Teks ThreadId Mesin
Dimulai 458745723 Node001

Nilai yang mengutip dan melarikan diri diizinkan dalam mode ini seperti yang ditunjukkan dalam contoh berikut:

print str="2021-01-01T10:00:34 [INFO] ThreadId:458745723, Machine:Node001, Text: 'The service \\' is up'"
| parse-kv str as (Text: string, ThreadId:long, Machine: string) with (quote="'", escape='\\')
| project-away str

Hasil

Teks ThreadId Mesin
Layanan ' sudah habis 458745723 Node001

Ekstraksi menggunakan regex

Ketika tidak ada pemisah yang mendefinisikan struktur teks yang cukup, ekstraksi berbasis ekspresi reguler dapat berguna.

print str=@'["referer url: https://hostname.com/redirect?dest=/?h=1234", "request url: https://hostname.com/?h=1234", "advertiser id: 24fefbca-cf27-4d62-a623-249c2ad30c73"]'
| parse-kv str as (['referer url']:string, ['request url']:string, ['advertiser id']: guid) with (regex=@'"([\w ]+)\s*:\s*([^"]*)"')
| project-away str

Hasil

url perujuk url permintaan id pengiklan
https://hostname.com/redirect?dest=/?h=1234 https://hostname.com/?h=1234 24fefbca-cf27-4d62-a623-249c2ad30c73