A falha na inicialização do mecanismo de transformação de dados geralmente indica que suas regras SLS DSL contêm erros reprovados na verificação de segurança. Este tópico descreve os erros de inicialização mais comuns e como corrigi-los.
O mecanismo de transformação de dados executa uma verificação de segurança nas regras SLS DSL no início de cada tarefa. Se a verificação falhar, o mecanismo não inicia.
Log de erros
Ao detectar um erro durante a inicialização, o mecanismo retorna uma mensagem no seguinte formato:
{
"errorMessage": "ETL config doesn't pass security check, detail: XXXXXX"
}
Visualize o log de erros na seção de detalhes da exceção do relatório de diagnóstico de transformação de dados ou no Logstore internal-etl-log.
Se ocorrer um erro de inicialização, a tarefa será repetida continuamente até obter sucesso ou até você interrompê-la manualmente.
Após a correção da regra de processamento, a tarefa terá êxito na próxima tentativa e retomará a operação normal. Nenhum log é perdido ou duplicado.
Solucionar erros comuns
-
Erro básico de sintaxe.
Esse erro ocorre quando uma regra de processamento viola a gramática SLS DSL — por exemplo, parênteses incompatíveis ou dois pontos (
:) usados no lugar de vírgula (,).-
Log de erros
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid syntax" } { "errorMessage": "ETL config doesn't pass security check, detail: unexpected EOF while parsing" } -
Solução de problemas
Use as informações de
tracebackno log de erros para localizar exatamente o erro de sintaxe. Por exemplo, o erro a seguir ocorre ao usare_set("test": v("status"))em vez dee_set("test", v("status")).__source__: 172.20.3.124 __tag__:__job_name__: etl-preview-1563260078-834525 __tag__:__schedule_type__: DryRun __topic__: event_id : transform_data:init:fail logging : {"processName": "MainProcess", "threadName": "MainThread", "thread": "140462572971840", "funcName": "transform_data", "process": "1", "module": "logclient_operator", "levelname": "ERROR"} message : ETL config doesn't pass security check, detail: invalid syntax (<unknown>, line 5) Traceback (most recent call last): File "/usr/local/python-etl/aliyunlogetl_common/core/restrict_config_parser.py", line 100, in security_check_config RestrictConfigParser().parse(code) File "/usr/local/python-etl/aliyunlogetl_common/core/restrict_config_parser.py", line 88, in parse self.visit(ast.parse(code)) File "/usr/local/lib/python3.7/ast.py", line 35, in parse return compile(source, filename, mode, PyCF_ONLY_AST) File "<unknown>", line 5 TRANSFORM_ANY_1563260645 = e_set("test": v("status")) SyntaxError: invalid syntax reason : ETL config doesn't pass security check, detail: invalid syntax (<unknown>, line 5)
-
-
Uso inválido de operador.
A SLS DSL exige funções integradas — como aquelas com prefixo
op_*— para todas as operações, incluindo cálculos numéricos e comparações. O uso direto de operadores padrão não é permitido.-
Log de erros
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: <class `_ast.BinOp`> " } -
Solução de problemas
Revise suas regras de processamento SLS DSL e substitua qualquer uso direto de operador pelas funções integradas equivalentes.
-
Exemplos
e_set("b", v("a") - 10) # Incorrect example e_set("b", op_sub(v("a"), 10)) # Correct example e_set("b", v("a") >= v("c")) # Incorrect example e_set("b", op_ge(v("a"), v("c"))) # Correct example
-
-
Tipo de parâmetro incorreto ou chamada de função inexistente.
Esse erro ocorre quando o tipo de dados de um argumento não corresponde ao tipo de parâmetro esperado pela função ou ao chamar uma função inexistente.
-
Log de erros
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid call in detected: function_name" } -
Solução de problemas
Verifique se a função existe e se o nome está escrito corretamente. Caso o nome esteja correto, confirme se os argumentos possuem os tipos de dados adequados.
-
Use as informações de
tracebackdo log de erros para identificar a função que causou a falha. Por exemplo, se o erro for originado na funçãodt_totimestamp, confirme primeiro se ela existe. Em seguida, revise a regra ondedt_totimestampé chamada para garantir a passagem dos tipos de parâmetros corretos.File "/usr/local/lib/python3.7/ast.py", line 262, in visit return visitor(node) File "/usr/local/python-etl/aliyunlogetl_common/core/restrict_config_parser.py", line 50, in visit_Call raise InvalidETLConfig("invalid call id detected: {}".format(node.func.id)) aliyunlogetl_common.core.restrict_config_parser.InvalidETLConfig: invalid call id detected: dt_totimestamp reason : ETL config doesn't pass security check, detail: invalid call id detected: dt_totimestamp
-
Exemplos
A função
dt_totimestampespera um objeto datetime. Neste caso,v("time1")retorna uma string, causando um erro de incompatibilidade de tipo.Para corrigir, use
dt_parsepara converter a string em um objeto datetime antes de passá-la paradt_totimestamp. Como alternativa, utilizedt_parsetimestamp, que aceita argumentos do tipo string diretamente.# Incorrect 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")))
-
-
Chamada de função de expressão como operação global.
A SLS DSL fornece dois tipos de funções: operações globais e funções de expressão. Apenas operações globais podem ser chamadas como etapas independentes em uma regra de processamento. Chamar uma função de expressão diretamente como operação global causa erro.
-
Log de erros
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: <class '_ast.Expr'>" } -
Solução de problemas
Verifique suas regras de processamento para garantir que nenhuma função de expressão seja chamada como operação global independente. Envolva-as em uma função de operação global, como
e_set. -
Exemplos
# Incorrect 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")))
-
-
Atribuição de variável inválida.
A SLS DSL não suporta atribuição de variáveis. Passe valores entre funções sem estado (stateless).
-
Log de erros
{ "errorMessage": "ETL config doesn't pass security check, detail: invalid assign detected: variable_name" } -
Solução de problemas
Verifique se há alguma atribuição de variável nas suas regras de processamento SLS DSL.
Use as informações de
tracebackno log de erros para localizar a linha onde o erro ocorre.
-
Exemplos
# Incorrect 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")))
-