Topik ini menjelaskan penyebab error startup pada mesin transformasi data dan cara mengatasinya.
Langkah pertama dalam tugas transformasi data adalah memulai mesin transformasi data. Error startup terjadi ketika aturan SLS DSL yang Anda tulis gagal dalam pemeriksaan keamanan internal mesin. 
Log error
Jika mesin mendeteksi aturan SLS DSL yang tidak valid selama startup, mesin akan mengembalikan error seperti berikut:
{
"errorMessage": "ETL config doesn't pass security check, detail: XXXXXX"
}Anda dapat melihat log error di detail pengecualian Laporan diagnostik transformasi data atau di LogStore internal-etl-log.
Jika terjadi error selama startup mesin, tugas transformasi data akan mencoba ulang secara otomatis hingga berhasil atau Anda menghentikannya secara manual.
Setelah Anda memperbaiki aturan transformasi dan percobaan ulang berhasil, tugas akan melanjutkan operasi normal tanpa kehilangan atau duplikasi log.
Mengatasi error umum
Error sintaks dasar
Aturan SLS DSL Anda melanggar aturan sintaks, misalnya dengan menggunakan tanda kurung yang tidak seimbang atau menulis koma (,) sebagai titik dua (:).
Log error
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid syntax" } { "errorMessage": "ETL config doesn't pass security check, detail: unexpected EOF while parsing" } ...Metode pemecahan masalah
Gunakan informasi
tracebackdalam log error untuk menemukan lokasi pasti error sintaks tersebut. Misalnya, Anda menulise_set("test", v("status"))sebagaie_set("test": v("status")), seperti yang ditunjukkan pada gambar berikut.
Penggunaan operator yang tidak valid
Semua operasi dalam SLS DSL harus menggunakan fungsi bawaan. Gunakan fungsi op_* untuk operasi aritmetika dan perbandingan; jangan gunakan operator mentah.
Log error
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: <class `_ast.BinOp`> " }Metode pemecahan masalah
Tinjau aturan SLS DSL Anda dan pastikan semua operasi—termasuk aritmetika dan perbandingan—menggunakan fungsi SLS DSL.
Contoh
e_set("b", v("a") - 10) # Invalid e_set("b", op_sub(v("a"), 10)) # Valid e_set("b", v("a") >= v("c")) # Invalid e_set("b", op_ge(v("a"), v("c"))) # Valid
Tipe parameter fungsi yang salah atau pemanggilan fungsi yang tidak terdefinisi
Error terjadi jika Anda memberikan parameter dengan tipe yang salah ke suatu fungsi atau memanggil fungsi yang tidak ada.
Log error
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid call in detected: function_name" }Metode pemecahan masalah
Pastikan terlebih dahulu bahwa fungsi tersebut tersedia dan nama fungsinya dieja dengan benar. Jika fungsi tersebut ada dan namanya benar, verifikasi bahwa Anda memberikan parameter dengan tipe yang sesuai.
Gunakan informasi
tracebackdalam log error untuk mengidentifikasi fungsi yang gagal. Misalnya, jika dt_totimestamp gagal, pastikan fungsi tersebut tersedia, lalu periksa apakah tipe parameter yang diberikan sesuai.
Contoh
Fungsi dt_totimestamp mengharapkan objek datetime. Dalam contoh ini,
v("time1")berupa string, sehingga menyebabkan error.Perbaiki dengan mengonversi string menjadi objek datetime menggunakan dt_parse sebelum memanggil dt_totimestamp, atau gunakan dt_parsetimestamp yang menerima string secara langsung.
# Invalid e_set("time1", "2019-06-03 2:41:26") e_set("time2", dt_totimestamp(v("time1"))) # Valid e_set("time1", "2019-06-03 2:41:26") e_set("time2", dt_totimestamp(dt_parse(v("time1")))) # Valid e_set("time1", "2019-06-03 2:41:26") e_set("time2", dt_parsetimestamp(v("time1")))
Pemanggilan fungsi ekspresi dalam operasi global
SLS DSL mendukung dua jenis fungsi: fungsi operasi global dan fungsi ekspresi. Hanya fungsi operasi global yang dapat digunakan sebagai langkah mandiri dalam aturan transformasi. Memanggil fungsi ekspresi secara langsung akan menyebabkan error.
Log error
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: <class '_ast.Expr'>" }Metode pemecahan masalah
Periksa apakah Anda memanggil fungsi ekspresi secara langsung sebagai langkah transformasi.
Contoh
# Invalid op_add(v("a"), v("b")) str_lower(v("name")) # Valid e_set("add", op_add(v("a"), v("b"))) e_set("lower", str_lower(v("name")))
Penugasan variabel yang tidak valid
SLS DSL tidak mendukung penugasan variabel. Sebagai gantinya, kirimkan nilai secara tanpa status (stateless).
Log error
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid assign detected: variable_name" }Metode pemecahan masalah
Periksa aturan SLS DSL Anda untuk penugasan variabel.
Identifikasi sumber error dari
tracebackdalam log error.
Contoh
# Invalid sum_value = op_add(v("a"), v("b")) e_set("sum", sum_value) # Valid e_set("sum", op_add(v("a"), v("b")))