このトピックでは、データ変換エンジンに関連する起動エラーの原因について説明します。 このトピックでは、これらのエラーのトラブルシューティングに使用できるメソッドも提供します。
Log Serviceがデータ変換ルールに基づいてデータ変換タスクを実行する前に、データ変換エンジンを最初に起動する必要があります。 ドメイン固有言語 (DSL) ルールがデータ変換エンジンのセキュリティチェックに失敗した場合、このステップでエラーが発生する可能性があります。 
エラーログ
変換エンジンの起動プロセス中に無効なLog Service DSLルールが検出された場合、次のエラーメッセージが返されます。
{
"errorMessage": "ETL config doesn't pass security check, detail: XXXXXX"
}エラーログは、データ変換の診断レポートの例外詳細またはinternal-etl-log Logstoreで表示できます。
変換エンジンの起動フェーズ中にエラーが発生した場合、Log Serviceは、再試行が成功するまで、または手動で再試行を停止するまで、データ変換タスクを再試行します。
データ変換ルールを修正し、再試行が成功した後、データ変換エンジンは期待通りに動作します。データの取りこぼしや重複はありません。
一般的なエラーのトラブルシューティング
基本構文が無効です。
コンパイルされたデータ変換ルールは、ログサービスDSLの構文に準拠していません。たとえば、ルールにペアのない括弧 () が含まれているか、コンマ (,) が誤ってコロン (:) として記述されています。
エラーログ
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid syntax" } { "errorMessage": "ETL config doesn't pass security check, detail: unexpected EOF while parsing" } ...対処方法
関連するエラーログの
traceback情報をもとに、特定のシンタックスエラーを特定することができます。たとえば、次の図に示すように、e_set("test", v("status"))がe_set("test": v("status"))と誤って書き込まれます。
無効な演算子が使用されます。
Log Service DSLのすべての操作は、Log Service DSLでサポートされている機能を使用して指定する必要があります。 たとえば、数値演算またはサイズ比較は、op_* 関数を使用して指定する必要があります。 演算子のみは使用できません。
エラーログ
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: <class `_ast.BinOp`> " }対処方法
Log Service DSLルールを確認します。 Log Service DSLでサポートされている機能を使用して、数値演算やサイズ比較などのすべての操作が指定されていることを確認してください。
例
e_set("b", v("a") - 10) # Invalid example e_set("b", op_sub(v("a"), 10)) # Valid example e_set("b", v("a") >= v("c")) # Invalid example e_set("b", op_ge(v("a"), v("c"))) # Valid example
関数に渡されるパラメーターの型が無効な場合、または呼び出された関数が存在しない場合、エラーが発生します。
関数に渡されるパラメータの型が、関数が受け取るパラメータの型と異なる場合、または呼び出された関数が存在しない場合、エラーが発生します。
エラーログ
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid call in detected: function_name" }対処方法
呼び出された関数が存在し、関数名が正しいかどうかを確認します。 関数が存在し、名前が有効な場合は、関数に渡されるパラメーターの型が有効かどうかを確認します。
関連するエラーログの
traceback情報をもとに、エラー関数を特定する。たとえば、返されたエラーログがdt_totimestamp関数が無効であることを示している場合、その関数が存在するかどうかを確認し、dt_totimestamp関数に渡されるパラメーターの型が有効であるかどうかを確認する必要があります。
例
dt_totimestamp関数が受け取るパラメータの型はdatetimeオブジェクトで、コード内の
v("time1")は文字列です。関数に渡されるパラメータの型が無効であるため、エラーが発生します。エラーを修正するには、dt_parse関数で文字列をdatetimeオブジェクトに変換してから、dt_totimestamp関数にパラメータを渡します。また、dt_totimestamp関数の代わりに文字列を受け取ることができるdt_parsetimestamp関数を使用することもできます。
# Invalid examples e_set("time1", "2019-06-03 2:41:26") e_set("time2", dt_totimestamp(v("time1"))) # Valid examples e_set("time1", "2019-06-03 2:41:26") e_set("time2", dt_totimestamp(dt_parse(v("time1")))) # Valid examples e_set("time1", "2019-06-03 2:41:26") e_set("time2", dt_parsetimestamp(v("time1")))
式関数はグローバルに呼び出されます。
Log Service DSL構文は、グローバル操作関数と式関数の2種類の関数をサポートしています。 データ変換プロセスでグローバルに呼び出すことができるのは、グローバル演算関数だけです。 式関数がグローバルに呼び出されると、エラーが発生します。
エラーログ
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: <class '_ast.Expr'>" }対処方法
式関数がデータ変換プロセスでグローバルに呼び出されるかどうかを確認します。
例
# Invalid examples op_add(v("a"), v("b")) str_lower(v("name")) # Valid examples e_set("add", op_add(v("a"), v("b"))) e_set("lower", str_lower(v("name")))
パラメータは変数値を使用して指定します。
Log Service DSL構文は、変数を使用した値の割り当てをサポートしていません。 変数値は、ステートレスモードでのみ渡すことができます。
エラーログ
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid assign detected: variable_name" }対処方法
Log Service DSLルールで値を割り当てるために変数が使用されているかどうかを確認します。
関連するエラーログの
トレースバック情報に基づいてエラーを見つけます。
例
# Invalid examples sum_value = op_add(v("a"), v("b")) e_set("sum", sum_value) # Valid example e_set("sum", op_add(v("a"), v("b")))