全部产品
Search
文档中心

Simple Log Service:Bagaimana cara memperbaiki kesalahan terkait aturan transformasi data?

更新时间:Jul 06, 2025

Artikel ini menjelaskan penyebab kesalahan yang terkait dengan aturan transformasi data dan menyediakan solusi untuk menanganinya.

Setelah mesin transformasi data membaca data dari Logstore sumber, proses transformasi peristiwa log dimulai.Errors related to data transformation rules

  • Selama transformasi, kesalahan logika dapat terjadi jika aturan transformasi tidak berlaku untuk semua peristiwa log.

  • Kesalahan juga dapat muncul selama pemuatan atau pembaruan data dari sumber eksternal seperti ApsaraDB RDS atau Logstores.

Artikel ini menjelaskan cara menyelesaikan kesalahan logika. Untuk informasi tentang penyelesaian kesalahan pemuatan sumber daya, lihat Bagaimana cara memperbaiki kesalahan penarikan data?.

Dampak kesalahan

Selama transformasi, peristiwa log yang bertentangan dengan aturan transformasi menghasilkan kesalahan. Kesalahan dikategorikan sebagai WARNING atau ERROR, yang diidentifikasi oleh bidang logging.levelname.

  • Untuk kesalahan tingkat ERROR, peristiwa log yang relevan dibuang. Proses transformasi dilanjutkan tanpa percobaan ulang, dan hasil transformasi tidak mencakup peristiwa log tersebut.

  • Untuk kesalahan tingkat WARNING, data tidak ditransformasikan dalam bahasa domain-spesifik (DSL) saat ini. Sebagai contoh, jika peristiwa log tidak sesuai dengan ekspresi reguler yang ditentukan, langkah berikutnya akan dijalankan.

Solusi

  • Periksa bidang logging.levelname pada log kesalahan untuk menentukan tingkat kesalahan.

  • Periksa bidang message untuk menemukan lokasi peristiwa log kesalahan. Untuk detail lebih lanjut, lihat Lihat log kesalahan.

  • Periksa bidang reason pada log kesalahan untuk mengidentifikasi penyebab kesalahan.

Tambahkan logika untuk mentransformasi peristiwa log kesalahan berdasarkan penyebabnya. Anda dapat menggunakan fungsi kontrol proses seperti e_if dan e_switch untuk mengidentifikasi dan menyelesaikan kesalahan.Error log

Contoh penanganan kesalahan

Peristiwa log berisi nilai abnormal

Pembagian dengan nol

# Nilai bidang b pada beberapa peristiwa log adalah 0. Nilai ini digunakan sebagai pembagi operasi numerik dan menyebabkan kesalahan.
e_set("c", op_div_floor(v("a"), v("b")))
  • Log kesalahan:

    {
      "reason": "kesalahan saat memanggil : floordiv\nDetail: pembagian integer atau modulo dengan nol", 
    }
  • Metode pemecahan masalah:

    Periksa apakah nilai bidang b adalah 0 dalam log kesalahan. Jika nilai bidang b adalah 0, nilai ini digunakan sebagai pembagi operasi numerik dan menyebabkan kesalahan.

  • Solusi:

    Kesalahan hanya terjadi ketika nilai bidang b adalah 0. Dalam hal ini, gunakan fungsi e_if untuk menangkap bidang b yang nilainya 0.

    e_if_else(op_eq(v("b"), "0"), e_set("c", v("a")), e_set("c", op_div_floor(v("a"), v("b")))

Timestamp tidak valid

# Nilai bidang a pada beberapa peristiwa log adalah timestamp yang tidak valid, yang menyebabkan kesalahan.
e_set("b", dt_fromtimestamp(v("a")))
  • Log kesalahan:

    {
      "reason": "kesalahan saat memanggil : int\nDetail: literal tidak valid untuk int() dengan basis 10: 'nilai tidak valid'", 
    }
  • Metode pemecahan masalah:

    Periksa apakah nilai bidang a adalah timestamp yang valid (string numerik).

  • Solusi:

    Tambahkan logika untuk memeriksa apakah nilai bidang a adalah timestamp yang valid. Jika tidak, ekspor peristiwa log ke target2.

    e_if_else(str_isdigit(v("a"))), e_set("b", dt_fromtimestamp(v("a"))), e_output("target2"))

Tipe data tidak dikonversi sebelum operasi numerik

Aturan transformasi sampel:

e_set("a", 10)
e_set("b", 10)
e_set("c", op_mul(v("a"), v("b")))
  • Log kesalahan:

    {
      "reason": "kesalahan saat memanggil : mul\nDetail: tidak bisa mengalikan urutan dengan non-int tipe' str'", 
    }
  • Penyebab kesalahan:

    Nilai semua bidang dalam peristiwa log disimpan sebagai string selama proses transformasi DSL. Pada aturan transformasi sampel sebelumnya, nilai v("a") dan v("b") adalah string. Jika langsung diteruskan ke fungsi op_mul, kesalahan akan terjadi.

  • Metode pemecahan masalah:

    Periksa aturan DSL untuk memastikan tipe data dikonversi sebelum operasi numerik.

  • Solusi:

    Gunakan fungsi ct_int untuk mengonversi nilai dari tipe string ke tipe integer, lalu teruskan ke fungsi op_mul.

    e_set("a", 10)
    e_set("b", 10)
    e_set("c", op_mul(c_int(v("a")), c_int(v("b"))))