全部产品
Search
文档中心

Simple Log Service:Petunjuk untuk mengekstraksi data semi-terstruktur

更新时间:Aug 19, 2025

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.

Penting
  • 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 VARCHAR dan nilainya tidak boleh null. Jika tidak, operasi ekstraksi tidak dilakukan.

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, method
    • 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'

parse-csv

Mengekstrak data dalam format CSV dari bidang tertentu.

Penting
  • 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 output.

  • False: Pencocokan non-ketat. Kebijakan pencocokan maksimum digunakan.

    • Jika jumlah nilai lebih besar dari jumlah bidang, nilai tambahan tidak di-output.

    • Jika jumlah bidang lebih besar dari jumlah nilai, string kosong di-output untuk bidang tambahan.

  • True: Pencocokan ketat. Tidak ada bidang yang di-output.

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 VARCHAR dan nilainya tidak boleh null. Jika tidak, operasi ekstraksi tidak dilakukan.

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, z
    • Data 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, host
    • Data 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, req
    • Data 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.

Penting
  • 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.

  • Tipe adalah JSON.

  • Tipe adalah VARCHAR, dan nilainya adalah string JSON yang valid.

Contoh

  • Contoh 1: Ekstrak semua pasangan kunci-nilai dari bidang y.

    • Pernyataan SPL

      * | parse-json y
    • Data 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' content
    • Data 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' y
    • Data 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.

Penting
  • 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.

  • Nonaktif: Menghentikan pencocokan nilai bidang ketika delim ditemui.

  • Aktif: Mencocokkan semua konten sebelum pasangan kunci-nilai berikutnya sebagai nilai bidang.

field

Bidang

Ya

Nama bidang sumber untuk diurai.

  1. Jika bidang ini tidak ada dalam entri data atau nilainya null, entri tersebut tidak diproses.

  2. Jika tidak ada pasangan kunci-nilai yang cocok dalam konten data, entri tersebut tidak diproses.

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.

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 delim.

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 VARCHAR dan nilainya tidak boleh null. Jika tidak, operasi ekstraksi tidak dilakukan.

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'