operator parse-kv
Berlaku untuk: ✅Microsoft Fabric✅✅
Mengekstrak informasi terstruktur dari ekspresi string dan mewakili informasi dalam formulir kunci/nilai.
Mode ekstraksi berikut didukung:
- pembatas yang ditentukan: Ekstraksi berdasarkan pemisah tertentu yang menentukan bagaimana kunci/nilai dan pasangan dipisahkan satu sama lain.
- pembatas yang tidak ditentukan: Ekstraksi tanpa perlu menentukan pemisah. Setiap karakter non-nufanumerik dianggap sebagai pemisah.
- Regex: Ekstraksi berdasarkan ekspresi reguler.
Sintaks
Pemisah yang ditentukan
T|
parse-kv
Expressionas
(
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 |