Topik ini menjelaskan cara menggunakan petunjuk untuk mengekstraksi data semi-terstruktur serta memberikan contoh relevan.
parse-regexp
Mengekstrak informasi dari bidang tertentu yang sesuai dengan grup ekspresi reguler.
Tipe data hasil ekstraksi adalah VARCHAR. Jika nama bidang hasil ekstraksi sama dengan bidang dalam data masukan, lihat Penyimpanan Nilai dan Penimpaan untuk kebijakan penyimpanan nilai.
Operasi tidak dapat dilakukan pada bidang waktu __time__ dan __time_ns_part__. Untuk informasi lebih lanjut, lihat Bidang Waktu.
Sintaksis
| parse-regexp <field>, <pattern> as <output>, ...Parameter
Parameter | Tipe | Diperlukan | Deskripsi |
field | Bidang | Ya | Nama bidang sumber untuk diekstraksi. Data masukan harus berisi bidang ini. Bidang tersebut harus bertipe |
pattern | Regexp | Ya | Ekspresi reguler. Sintaksis RE2 didukung. |
output | Bidang | Tidak | Nama bidang yang digunakan untuk menyimpan hasil ekstraksi. |
Contoh
Contoh 1: Lakukan pencocokan eksploratif secara berurutan.
Pernyataan SPL
* | parse-regexp content, '(\S+)' as ip -- Menghasilkan bidang ip: 10.0.0.0. | parse-regexp content, '\S+\s+(\w+)' as method -- Menghasilkan bidang method: GET.Data Masukan
content: '10.0.0.0 GET /index.html 15824 0.043'Keluaran
content: '10.0.0.0 GET /index.html 15824 0.043' ip: '10.0.0.0' method: 'GET'
Contoh 2: Lakukan pencocokan pola penuh menggunakan penangkapan ekspresi reguler tanpa nama.
Pernyataan SPL
* | parse-regexp content, '(\S+)\s+(\w+)' as ip, methodData Masukan
content: '10.0.0.0 GET /index.html 15824 0.043'Keluaran
content: '10.0.0.0 GET /index.html 15824 0.043' ip: '10.0.0.0' method: 'GET'
parse-csv
Mengekstrak data dalam format CSV dari bidang tertentu.
Tipe data hasil ekstraksi adalah VARCHAR. Jika nama bidang hasil ekstraksi sama dengan bidang dalam data masukan, lihat Penyimpanan Nilai dan Penimpaan untuk kebijakan penyimpanan nilai.
Operasi tidak dapat dilakukan pada bidang waktu __time__ dan __time_ns_part__. Untuk informasi lebih lanjut, lihat Bidang Waktu.
Sintaksis
| parse-csv -delim=<delim> -quote=<quote> -strict <field> as <output>, ...Parameter
Parameter | Tipe | Diperlukan | Deskripsi |
delim | String | Tidak | Karakter pemisah untuk konten data. Bisa satu hingga tiga karakter ASCII yang valid. Anda dapat menggunakan karakter escape untuk mewakili karakter khusus. Misalnya, \t mewakili karakter tab, \11 mewakili karakter ASCII dengan nomor ordinal oktal 11, dan \x09 mewakili karakter ASCII dengan nomor ordinal heksadesimal 09. Anda juga dapat menggunakan pemisah multi-karakter, seperti Nilai default adalah koma (,). |
quote | Char | Tidak | Karakter kutipan untuk konten data. Ini adalah karakter ASCII tunggal yang valid yang digunakan ketika konten data mengandung pemisah. Contohnya termasuk tanda kutip ganda ("), tanda kutip tunggal ('), dan karakter tak terlihat (0x01). Secara default, tidak ada karakter kutip yang digunakan. Penting Parameter ini hanya berlaku ketika parameter delim adalah karakter tunggal. Nilai parameter ini tidak boleh sama dengan nilai parameter delim. |
strict | Bool | Tidak | Menentukan apakah akan mengaktifkan pencocokan ketat ketika jumlah nilai dalam konten data tidak sesuai dengan jumlah bidang yang ditentukan dalam
Fitur ini dinonaktifkan secara default. Untuk mengaktifkannya, tambahkan parameter ini. |
field | Bidang | Ya | Nama bidang sumber untuk diurai. Konten data harus mencakup bidang ini. Bidang tersebut harus bertipe |
output | Bidang | Ya | Nama bidang yang digunakan untuk menyimpan konten data yang diurai. |
Contoh
Contoh 1: Pencocokan data sederhana.
Pernyataan SPL
* | parse-csv content as x, y, zData Masukan
content: 'a,b,c'Keluaran
content: 'a,b,c' x: 'a' y: 'b' z: 'c'
Contoh 2: Gunakan tanda kutip ganda (") sebagai karakter kutipan default untuk mencocokkan konten yang mengandung karakter khusus.
Pernyataan SPL
* | parse-csv content as ip, time, hostData Masukan
content: '192.168.0.100,"10/Jun/2019:11:32:16,127 +0800",example.aliyundoc.com'Keluaran
content: '192.168.0.100,"10/Jun/2019:11:32:16,127 +0800",example.aliyundoc.com' ip: '192.168.0.100' time: '10/Jun/2019:11:32:16,127 +0800' host: 'example.aliyundoc.com'
Contoh 3: Gunakan pemisah multi-karakter.
Pernyataan SPL
* | parse-csv -delim='||' content as time, ip, reqData Masukan
content: '05/May/2022:13:30:28||127.0.0.1||POST /put?a=1&b=2'Keluaran
content: '05/May/2022:13:30:28||127.0.0.1||POST /put?a=1&b=2' time: '05/May/2022:13:30:28' ip: '127.0.0.1' req: 'POST /put?a=1&b=2'
parse-json
Mengekstrak pasangan kunci-nilai lapisan pertama dari bidang tertentu dalam format JSON.
Tipe data hasil ekstraksi adalah VARCHAR. Jika nama bidang hasil ekstraksi sama dengan bidang dalam data masukan, lihat Penyimpanan Nilai dan Penimpaan untuk kebijakan penyimpanan nilai.
Operasi tidak dapat dilakukan pada bidang waktu __time__ dan __time_ns_part__. Untuk informasi lebih lanjut, lihat Bidang Waktu.
Sintaksis
| parse-json -mode=<mode> -path=<path> -prefix=<prefix> <field>Parameter
Parameter | Tipe | Diperlukan | Deskripsi |
mode | String | Tidak | Menentukan mode nilai untuk hasil jika bidang baru memiliki nama yang sama dengan bidang dalam data masukan. Nilai default adalah overwrite. |
path | JSONPath | Tidak | Menentukan jalur JSON dalam konten bidang untuk menemukan konten yang akan diekstraksi. Nilai default adalah string kosong, yang menunjukkan bahwa seluruh konten bidang yang ditentukan diekstraksi langsung. |
prefix | String | Tidak | Awalan untuk bidang hasil setelah struktur JSON diperluas. Nilai default adalah string kosong. |
field | Bidang | Ya | Nama bidang sumber untuk diurai. Data masukan harus mencakup bidang ini, nilainya tidak boleh null, dan salah satu dari kondisi berikut harus dipenuhi. Jika tidak, operasi ekstraksi tidak dilakukan.
|
Contoh
Contoh 1: Ekstrak semua pasangan kunci-nilai dari bidang y.
Pernyataan SPL
* | parse-json yData Masukan
x: '0' y: '{"a": 1, "b": 2}'Keluaran
x: '0' y: '{"a": 1, "b": 2}' a: '1' b: '2'
Contoh 2: Ekstrak nilai dari kunci body dari bidang content, lalu ekstrak semua pasangan kunci-nilainya.
Pernyataan SPL
* | parse-json -path='$.body' contentData Masukan
content: '{"body": {"a": 1, "b": 2}}'Keluaran
content: '{"body": {"a": 1, "b": 2}}' a: '1' b: '2'
Contoh 3: Atur mode keluaran nilai bidang ke preserve untuk mempertahankan nilai asli bidang yang ada.
Pernyataan SPL
* | parse-json -mode='preserve' yData Masukan
a: 'xyz' x: '0' y: '{"a": 1, "b": 2}'Keluaran
x: '0' y: '{"a": 1, "b": 2}' a: 'xyz' b: '2'
parse-kv
Mengekstrak pasangan kunci-nilai dari bidang tertentu.
Tipe data hasil ekstraksi adalah VARCHAR. Jika nama bidang hasil ekstraksi sama dengan bidang dalam data masukan, lihat Penyimpanan Nilai dan Penimpaan untuk kebijakan penyimpanan nilai.
Operasi tidak dapat dilakukan pada bidang waktu __time__ dan __time_ns_part__. Untuk informasi lebih lanjut, lihat Bidang Waktu.
Sintaksis
Ekstraksi berdasarkan pemisah
Mengekstrak pasangan kunci-nilai berdasarkan pemisah yang ditentukan.
| parse-kv -mode=<mode> -prefix=<prefix> -greedy <field>, <delim>, <kv-sep>Ekstraksi berdasarkan ekspresi reguler
Mengekstrak pasangan kunci-nilai berdasarkan ekspresi reguler yang ditentukan.
| parse-kv -regexp -mode=<mode> -prefix=<prefix> <field>, <pattern>Parameter
Ekstraksi berdasarkan pemisah
Parameter | Tipe | Diperlukan | Deskripsi |
mode | String | Tidak | Jika bidang tujuan yang sesuai sudah ada dalam data masukan, Anda dapat memilih mode penimpaan data. Nilai default adalah overwrite. Untuk informasi lebih lanjut, lihat Pemeriksaan ekstraksi bidang dan mode penimpaan. |
prefix | String | Tidak | Awalan untuk nama bidang keluaran yang berisi hasil ekstraksi. Nilai default adalah string kosong. |
greedy | Bool | Tidak | Mengaktifkan pencocokan serakah untuk nilai bidang.
|
field | Bidang | Ya | Nama bidang sumber untuk diurai.
|
delim | Char | Ya | Karakter pemisah antara pasangan kunci-nilai yang berbeda. Bisa satu hingga lima karakter ASCII yang valid, seperti Anda tidak dapat menentukan substring dari |
kv-sep | Char | Ya | Karakter yang menghubungkan kunci dan nilai dalam pasangan kunci-nilai. Bisa satu hingga lima karakter ASCII yang valid, seperti Anda tidak dapat menentukan substring dari |
Ekstraksi berdasarkan ekspresi reguler
Parameter | Tipe | Diperlukan | Deskripsi |
regexp | Bool | Ya | Mengaktifkan mode ekstraksi ekspresi reguler. |
mode | String | Tidak | Jika bidang tujuan yang sesuai sudah ada dalam data masukan, Anda dapat memilih mode penimpaan data. Nilai default adalah overwrite. Untuk informasi lebih lanjut, lihat Pemeriksaan ekstraksi bidang dan mode penimpaan. |
prefix | String | Tidak | Awalan untuk nama bidang keluaran yang berisi hasil ekstraksi. Nilai default adalah string kosong. |
field | Bidang | Ya | Nama bidang sumber untuk diekstraksi. Data masukan harus mencakup bidang ini. Bidang tersebut harus bertipe |
pattern | RegExpr | Ya | Ekspresi reguler yang berisi dua grup penangkapan. Grup penangkapan pertama mengekstrak nama bidang, dan grup penangkapan kedua mengekstrak nilai bidang. Sintaksis RE2 didukung. |
Contoh
Contoh 1: Gunakan pemisah multi-karakter untuk mengekstrak label dari data metrik SLS sebagai bidang data.
Pernyataan SPL
* | parse-kv -prefix='__labels__.' __labels__, '|', '#$#'Data Masukan
__name__: 'net_in' __value__: '231461.57374215033' __time_nano__: '1717378679274117026' __labels__: 'cluster#$#sls-etl|hostname#$#iZbp17raa25u0xi4wifopeZ|interface#$#veth02cc91d2|ip#$#192.168.22.238'Data Keluaran
__name__: 'net_in' __value__: '231461.57374215033' __time_nano__: '1717378679274117026' __labels__: 'cluster#$#sls-etl|hostname#$#iZbp17raa25u0xi4wifopeZ|interface#$#veth02cc91d2|ip#$#192.168.22.238' __labels__.cluster: 'sls-etl' __labels__.hostname: 'iZbp17raa25u0xi4wifopeZ' __labels__.interface: 'veth02cc91d2' __labels__.ip: '192.168.22.238'
Contoh 2: Aktifkan mode pencocokan serakah untuk mengekstrak pasangan kunci-nilai dari log akses.
Pernyataan SPL
* | parse-kv -greedy content, ' ', '='Data Masukan
content: 'src=127.0.0.1 dst=192.168.0.0 bytes=125 msg=connection refused body=this is test time=2024-05-21T00:00:00'Data Keluaran
content: 'src=127.0.0.1 dst=192.168.0.0 bytes=125 msg=connection refused body=this is test time=2024-05-21T00:00:00' src: '127.0.0.1' dst: '192.168.0.0' bytes: '125' msg: 'connection refused' body: 'this is test' time: '2024-05-21T00:00:00'
Contoh 3: Gunakan mode ekstraksi ekspresi reguler untuk menangani pemisah pasangan kunci-nilai yang kompleks dan pemisah kunci-nilai.
Pernyataan SPL
* | parse-kv -regexp content, '([^&?]+)(?:=|:)([^&?]+)'Data Masukan
content: 'k1=v1&k2=v2?k3:v3' k1: 'xyz'Data Keluaran
content: 'k1=v1&k2=v2?k3:v3' k1: 'v1' k2: 'v2' k3: 'v3'
Contoh 4: Atur mode keluaran nilai bidang ke preserve untuk mempertahankan nilai asli bidang yang ada.
Pernyataan SPL
* | parse-kv -regexp -mode='preserve' content, '([^&?]+)(?:=|:)([^&?]+)'Data Masukan
content: 'k1=v1&k2=v2?k3:v3' k1: 'xyz'Keluaran
content: 'k1=v1&k2=v2?k3:v3' k1: 'xyz' k2: 'v2' k3: 'v3'