このトピックでは、データ変換エンジンの起動エラーの原因とトラブルシューティング方法について説明します。
データ変換タスクの最初のステップは、データ変換エンジンの起動です。 データ変換エンジンによる内部セキュリティ監査でログ変換のドメイン固有言語 (DSL) ルールが失敗すると、このステップでエラーが発生する可能性があります。

エラーの影響
変換エンジンの起動プロセス中に不正な LOG DSL ルールが検出されると、次のエラーメッセージが返されます。
{
"errorMessage": "ETL config doesn't pass security check, detail: XXXXXX"
}
注 エラーログは、データ変換診断レポートの例外の詳細、または
internal-etl-log
Logstore にあります。
- 変換エンジンの起動フェーズ中にエラーが発生した場合、データ変換タスクは、エンジンの起動が成功するか手動で停止されるまで再試行を続けます。
- 変換ルールの変更後に再試行が成功した場合、データ変換タスクは、ログの損失や重複したログの生成をすることなく、正常に機能します。
一般的なエラーとトラブルシューティング方法
- 基本構文が無効な場合。
コンパイルされた変換ルールが LOG 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 DSL のすべての演算は、LOG DSL の関数を使用して完了する必要があります。 数値演算やサイズ比較などの演算は、
op_*
関数を使用して完了させなければなりません。+ - * / > <
演算子はこれらの演算には使用できません。- エラーログ :
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: <class `_ast.BinOp`> " }
- トラブルシューティング方法 :
LOG DSL ルールを確認し、数値演算やサイズ比較などのすべての演算が、無効な演算子ではなく LOG DSL の関数を使用して完了されていることを確認してください。
- 例 :
e_set("b", v("a") - 10) # Error e_set("b", op_sub(v("a"), 10)) # Correct e_set("b", v("a") >= v("c")) # Error e_set("b", op_ge(v("a"), v("c"))) # Correct
- エラーログ :
- 関数でパラメーターの型を渡すときにエラーが発生したか、または呼び出された関数が存在しない場合。
関数に渡されたパラメーターの型が、関数が受け取ったパラメーターの型と異なる場合、または呼び出された関数が存在しない場合、エラーが発生します。
- エラーログ :
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid call in detected: function_name" }
- トラブルシューティング方法 :
- 呼び出された関数が存在し、関数名が正しいかどうかを確認します。 関数が存在し、名前が正しい場合は、関数に渡されたパラメーターの型が正しいかどうかを確認してください。
- エラーログの
traceback
情報を元にエラー関数を見つけます。 次の図に示すように、dt_totimestamp
関数にエラーがあります。 関数は LOG DSL に存在するため、正しいパラメーター型がdt_totimestamp
関数に渡されているか確認する必要があります。
- 例 :
# Error example e_set("time1", "2019-06-03 2:41:26") e_set("time2", dt_totimestamp(v("time1"))) # Correct example e_set("time1", "2019-06-03 2:41:26") e_set("time2", dt_totimestamp(dt_parse(v("time1")))) # Correct example e_set("time1", "2019-06-03 2:41:26") e_set("time2", dt_parsetimestamp(v("time1")))
dt_totimestamp
関数が受け取るパラメーター型は datetime オブジェクトですが、コード内のv("time1")
は文字列です。 不正なパラメーター型が関数に渡されると、エラーが発生します。- エラーを修正するには、パラメーター型を
dt_totimestamp
関数に渡す前にdt_parse
関数を使用して文字列を datetime オブジェクトに変換します。dt_parsetimestamp
関数を使用して、受け取った文字列をdt_totimestamp
関数に置き換えることもできます。
- エラーログ :
- 式関数がグローバルに呼び出される場合。
LOG DSL 構文は、グローバル演算関数と式関数の 2 種類の関数をサポートしています。 データ変換プロセスでは、グローバル演算関数のみをグローバルに呼び出すことができます。 式関数がグローバルに呼び出されると、エラーが発生します。
- エラーログ :
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: <class '_ast.Expr'>" }
- トラブルシューティング方法 :
データ変換プロセスで式関数がグローバルに呼び出されているかどうかを確認します。
- 例 :
# Error example op_add(v("a"), v("b")) str_lower(v("name")) # Correct example e_set("add", op_add(v("a"), v("b"))) e_set("lower", str_lower(v("name")))
- エラーログ :
- パラメーターに変数値が割り当てられている場合。
LOG DSL 構文は、変数を使用した値の割り当てをサポートしていません。 変数値は、ステートレスモードでのみ渡すことができます。
- エラーログ :
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid assign detected: variable_name" }
- トラブルシューティング方法 :
- LOG DSL ルールが変数を値として使用しているかどうかを確認します。
- エラーログの
traceback
情報を元にエラーを特定します。
- 例 :
# Error example sum_value = op_add(v("a"), v("b")) e_set("sum", sum_value) # Correct example e_set("sum", op_add(v("a"), v("b")))
- エラーログ :