Topik ini menjelaskan penyebab kesalahan startup yang terkait dengan mesin transformasi data serta metode untuk menangani kesalahan tersebut.
Sebelum Simple Log Service menjalankan tugas transformasi data berdasarkan aturan transformasi, mesin transformasi data harus dijalankan terlebih dahulu. Jika aturan bahasa domain-spesifik (DSL) gagal dalam pemeriksaan keamanan pada mesin transformasi data, kesalahan dapat terjadi pada langkah ini. 
Log kesalahan
Jika aturan DSL Simple Log Service yang tidak valid terdeteksi selama proses startup mesin transformasi, pesan kesalahan berikut akan dikembalikan:
{
"errorMessage": "Konfigurasi ETL tidak lolos pemeriksaan keamanan, detail: XXXXXX"
}Anda dapat melihat log kesalahan di detail pengecualian laporan diagnostik untuk transformasi data atau di Logstore internal-etl-log.
Jika terjadi kesalahan selama fase startup mesin transformasi, Simple Log Service akan mencoba kembali tugas transformasi data hingga percobaan berhasil atau hingga Anda secara manual menghentikan percobaan ulang.
Setelah Anda memodifikasi aturan transformasi data dan percobaan ulang berhasil, mesin transformasi data akan bekerja sesuai harapan tanpa ada data yang hilang atau diduplikasi.
Troubleshoot kesalahan umum
Sintaks Dasar Tidak Valid
Aturan transformasi data yang dikompilasi tidak sesuai dengan sintaks DSL Simple Log Service. Sebagai contoh, aturan tersebut berisi tanda kurung () yang tidak berpasangan atau tanda koma (,) salah ditulis sebagai titik dua (:).
Log Kesalahan
{ "errorMessage": "Konfigurasi ETL tidak lolos pemeriksaan keamanan, detail: sintaks tidak valid" } { "errorMessage": "Konfigurasi ETL tidak lolos pemeriksaan keamanan, detail: EOF tak terduga saat parsing" } ...Metode Troubleshooting
Lokasikan kesalahan sintaksis spesifik berdasarkan informasi
tracebackdi log kesalahan terkait. Sebagai contoh,e_set("test", v("status"))salah ditulis sebagaie_set("test": v("status")), seperti yang ditunjukkan pada gambar berikut.
Operator yang Tidak Valid Digunakan
Semua operasi dalam DSL Simple Log Service harus ditentukan menggunakan fungsi yang didukung oleh DSL Simple Log Service. Sebagai contoh, operasi numerik atau perbandingan ukuran harus ditentukan menggunakan fungsi op_*. Anda tidak dapat hanya menggunakan operator.
Log Kesalahan
{ "errorMessage": "Konfigurasi ETL tidak lolos pemeriksaan keamanan, detail: jenis tidak valid terdeteksi: <class `_ast.BinOp`>" }Metode Troubleshooting
Periksa aturan DSL Simple Log Service. Pastikan semua operasi seperti operasi numerik dan perbandingan ukuran ditentukan menggunakan fungsi yang didukung oleh DSL Simple Log Service.
Contoh
e_set("b", v("a") - 10) # Contoh tidak valid e_set("b", op_sub(v("a"), 10)) # Contoh valid e_set("b", v("a") >= v("c")) # Contoh tidak valid e_set("b", op_ge(v("a"), v("c"))) # Contoh valid
Tipe Parameter yang Diteruskan ke Fungsi Tidak Valid atau Fungsi yang Dipanggil Tidak Ada
Jika tipe parameter yang diteruskan ke suatu fungsi berbeda dari tipe parameter yang diterima oleh fungsi atau jika fungsi yang dipanggil tidak ada, kesalahan akan terjadi.
Log Kesalahan
{ "errorMessage": "Konfigurasi ETL tidak lolos pemeriksaan keamanan, detail: panggilan tidak valid terdeteksi: function_name" }Metode Troubleshooting
Periksa apakah fungsi yang dipanggil ada dan nama fungsinya benar. Jika fungsi ada dan namanya valid, periksa apakah tipe parameter yang diteruskan ke fungsi valid.
Lokasikan fungsi kesalahan berdasarkan informasi
tracebackdi log kesalahan terkait. Sebagai contoh, jika log kesalahan yang dikembalikan menunjukkan bahwa fungsi dt_totimestamp tidak valid, Anda harus memeriksa apakah fungsi tersebut ada, lalu periksa apakah tipe parameter yang diteruskan ke fungsi dt_totimestamp valid.
Contoh
Tipe parameter yang diterima oleh fungsi dt_totimestamp adalah objek datetime, sedangkan
v("time1")dalam kode adalah string. Kesalahan terjadi karena tipe parameter yang diteruskan ke fungsi tidak valid.Untuk memperbaiki kesalahan, gunakan fungsi dt_parse untuk mengonversi string menjadi objek datetime sebelum parameter diteruskan ke fungsi dt_totimestamp. Anda juga dapat menggunakan fungsi dt_parsetimestamp yang dapat menerima string alih-alih fungsi dt_totimestamp.
# Contoh tidak valid e_set("time1", "2019-06-03 2:41:26") e_set("time2", dt_totimestamp(v("time1"))) # Contoh valid e_set("time1", "2019-06-03 2:41:26") e_set("time2", dt_totimestamp(dt_parse(v("time1")))) # Contoh valid e_set("time1", "2019-06-03 2:41:26") e_set("time2", dt_parsetimestamp(v("time1")))
Fungsi Ekspresi Dipanggil Secara Global
Sintaks DSL Simple Log Service mendukung dua jenis fungsi: fungsi operasi global dan fungsi ekspresi. Hanya fungsi operasi global yang dapat dipanggil secara global dalam proses transformasi data. Jika fungsi ekspresi dipanggil secara global, kesalahan akan terjadi.
Log Kesalahan
{ "errorMessage": "Konfigurasi ETL tidak lolos pemeriksaan keamanan, detail: jenis tidak valid terdeteksi: <class '_ast.Expr'>" }Metode Troubleshooting
Periksa apakah fungsi ekspresi dipanggil secara global dalam proses transformasi data.
Contoh
# Contoh tidak valid op_add(v("a"), v("b")) str_lower(v("name")) # Contoh valid e_set("add", op_add(v("a"), v("b"))) e_set("lower", str_lower(v("name")))
Parameter Ditentukan Menggunakan Nilai Variabel
Sintaks DSL Simple Log Service tidak mendukung penugasan nilai menggunakan variabel. Nilai variabel hanya dapat dilewatkan dalam mode tanpa status.
Log Kesalahan
{ "errorMessage": "Konfigurasi ETL tidak lolos pemeriksaan keamanan, detail: penugasan tidak valid terdeteksi: variable_name" }Metode Troubleshooting
Periksa apakah variabel digunakan untuk menetapkan nilai dalam aturan DSL Simple Log Service.
Lokasikan kesalahan berdasarkan informasi
tracebackdi log kesalahan terkait.
Contoh
# Contoh tidak valid sum_value = op_add(v("a"), v("b")) e_set("sum", sum_value) # Contoh valid e_set("sum", op_add(v("a"), v("b")))