Este tópico responde a perguntas frequentes sobre parâmetros de agendamento.
-
Cenários típicos de parâmetros de agendamento
-
Perguntas frequentes sobre o teste de parâmetros de agendamento
-
Diferenças na atribuição de valores ao usar o execute
-
visualize e gerencie parâmetros de agendamento
Como obter a hora anterior com um parâmetro de agendamento quando o cálculo cruza o limite de um dia?
-
Problema
Se o formato da partição da tabela for day=yyyymmdd,hour=hh24, a tarefa lê dados da hora anterior. Os parâmetros $[yyyymmdd] $[hh24-1/24] funcionam, exceto à meia-noite, quando a hora passa a ser 23 do dia atual. Como contornar isso?
-
Solução
Altere a fórmula de cálculo. Defina datetime como $[yyyymmdd-1/24] e mantenha a fórmula de cálculo para hour como $[hh24-1/24].
Configuração
No código, defina
day=datetime, hour={hour},Atribua os parâmetros do nó como
datetime=[yyyymmdd-1/24],hour=[hh24-1/24]
Cenário em tempo real
Se uma instância for agendada para 2021-7-21 00:00:00, ao subtrair uma hora, o cálculo volta ao dia anterior. Nesse caso, $[yyyymmdd-1/24] é 20210720 e $[hh24-1/24] é 23.
Se uma instância for agendada para 2021-7-21 01:00:00, subtrair uma hora mantém o cálculo no dia atual. Assim, $[yyyymmdd-1/24] é 20210721 e $[hh24-1/24] é 00.
Como lidar com espaços em um formato de partição que contém ano, mês, dia, hora, minuto e segundo, como pt=yyyy-mm-dd hh24:mi:ss?
A atribuição de parâmetros de agendamento não aceita espaços.
Use duas variáveis personalizadas:
Ano, mês e dia: Parâmetro datetime=$[yyyy-mm-dd]
Hora, minuto e segundo: Parâmetro hour=$[hh24:mi:ss]
Após obter a data e a hora separadamente, concatene-as com um espaço no código como pt=${datetime} ${hour}. Por exemplo, use este SQL: select * from xc_demo_partition where dt='${key1} ${key2}';. Em Schedule > Parameters, configure key1=$[yyyymmdd] key2=$[hh24miss].
Um nó é agendado diariamente para as 20:00 e seu parâmetro usa o horário agendado ($cyctime ou $[yyyymmddhh24miss]). Uma falha upstream atrasa seu início até as 00:00 do dia seguinte. O parâmetro é resolvido para 20:00 ou 00:00?
O horário agendado é o momento esperado para a execução da instância. O horário de início real pode variar, por exemplo, devido à espera por recursos. O horário agendado é fixo e não se altera conforme o horário real de execução.
Os parâmetros de agendamento utilizam o horário agendado da instância. O sistema define seus valores resolvidos no momento da geração da instância, e eles não mudam conforme o horário real de execução. Em Operation Center > Periodic Instances, o painel Properties mostra Scheduled Time como o horário de execução esperado, como 2021-07-13 00:00:00. Compare isso com Start Time, por exemplo, 00:00:27. Em Data Development, configure Schedule > Parameters com var1=$bizdate var2=$cyctime var3=$[yyyymmdd] var4=$[yyyymmddhh24miss], e defina a fórmula de cálculo de Set the scheduling cycle como Day e a de and the scheduled run time como 00:00. No código, use select '${var1}' '${var2}'; para verificar os valores de data de negócios e horário agendado separadamente.
Como configurar parâmetros de tempo em um nó ODPS Spark?
Ao criar um nó ODPS Spark, edite e configure os parâmetros na página de edição. O sistema utiliza a ordem configurada.
Após definir as variáveis no código, clique em Schedule no lado direito do editor e atribua valores no painel de parâmetros. Para obter detalhes sobre os parâmetros de agendamento, consulte Formatos de parâmetros de agendamento. Por exemplo, insira Parameters no campo do nó ODPS Spark: $(var). Adicione uma linha à tabela de parâmetros com o nome do parâmetro var e o valor $bizdate. Clique em Scheduling Parameter Preview para verificar os valores resolvidos.
Como usar valores de parâmetros de agendamento em nós que não conseguem processá-los diretamente?
Alguns nós, como os de sincronização em lote, não conseguem usar diretamente o resultado de um parâmetro de agendamento e exigem uma conversão adicional. Configure um nó de atribuição upstream. Faça com que ele referencie o parâmetro de agendamento, converta o resultado e, em seguida, passe o valor final para o nó downstream por meio do contexto do nó.
Para configurar um nó de atribuição, consulte Nó de atribuição.
Para configurar o contexto do nó, consulte Configurar o contexto do nó.
Qual é a diferença entre obter uma data de uma função de data do MaxCompute e de um parâmetro de agendamento?
Uma função de data do MaxCompute retorna o horário da máquina que executa a tarefa de computação. A execução da mesma instância em horários diferentes pode produzir resultados distintos.
O sistema calcula o parâmetro de agendamento com base no horário agendado. O resultado permanece o mesmo, independentemente do horário em que a instância é executada.
Como testar parâmetros de agendamento no Data Development?
O sistema de agendamento substitui os parâmetros de agendamento automaticamente. Para testá-los no Data Development da mesma forma que o agendador os substituiria, execute um teste de fumaça do ambiente de desenvolvimento.
As tarefas do Data Integration não possuem o recurso de teste no ambiente de desenvolvimento. Para testar a substituição de parâmetros nessas tarefas, crie um nó SQL e teste os parâmetros de forma independente com um teste de fumaça do ambiente de desenvolvimento. Após confirmar que os resultados são os esperados, use os parâmetros no nó do Data Integration.
FAILED: ODPS-0130161:[1,84] Parse exception - invalid token '$' Problema
Causa: O parâmetro de agendamento não recebeu um valor ou a atribuição falhou.
Solução Solução:
Verifique se o parâmetro de agendamento possui um valor.
Verifique se o parâmetro configurado atende aos requisitos. Para obter detalhes, consulte Formatos de parâmetros de agendamento.
Após alterar as configurações do parâmetro, faça o commit e publique a tarefa. Em seguida, verifique o painel Properties da tarefa periódica no Operation Center de produção para confirmar a presença dos valores mais recentes.
params format error,please check your params(key=values)
Solução:
Verifique se a variável possui um valor.
Verifique se há espaços extras no parâmetro de agendamento.
Não combine ponto (.) com caracteres chineses no nome do nó.
Exemplo: time①=②$[yyyymmdd③hh24:mi:ss]time1=$[yyyymmdd]④time2=$[hh24:mi:ss] (①②③④ marcam os locais dos espaços).
Não coloque espaços ao redor do sinal de igual (=) em um parâmetro de agendamento; veja ① e ②.
O sistema não aceita espaços dentro de uma atribuição de parâmetro de agendamento; veja ③.
Separe dois parâmetros de agendamento com um único espaço; veja ④.
Quais são as diferenças na atribuição de valores entre execute, Advanced execute e um teste de fumaça do ambiente de desenvolvimento?
|
Operação |
Descrição |
|
execute |
Na primeira execução do nó, atribua manualmente uma constante à variável; o sistema salva esse primeiro valor. Se você alterar o código, a variável continuará usando o valor atribuído na primeira execução. |
|
Advanced execute |
Para uma execução avançada, atribua manualmente constantes às variáveis no código atual. Se alterar as variáveis no código, use o Advanced execute para atribuí-las novamente. Nota
Para alterar o grupo de recursos de execução da tarefa, use o Advanced execute. |
|
Teste de fumaça do ambiente de desenvolvimento |
Selecione manualmente uma data de negócios para simular o agendamento automático e obter os valores de parâmetro dessa data. |
No editor de código da página Data Development, use variáveis integradas, como ${bdp.system.cyctime}, ou variáveis personalizadas, como ${var1}. Atribua valores no painel Schedule > Parameters à direita, por exemplo, var1=$bizdate. O sistema substitui as variáveis automaticamente quando você usa o execute ou o Advanced execute. Para um teste de fumaça do ambiente de desenvolvimento, escolha uma data de negócios na barra de ferramentas superior para simular o agendamento.
Como visualizar a substituição de parâmetros de agendamento no ambiente de produção?
Após alterar um parâmetro de agendamento no Data Development, fazer o commit e publicar a tarefa, verifique o valor no painel Properties da tarefa periódica no Operation Center de produção. Se o valor não for o esperado, verifique o status de publicação da tarefa e o pacote de publicação para confirmar o sucesso da publicação. No painel Properties da instância periódica, visualize os valores de substituição de uma instância específica.
O sistema atualiza os parâmetros de execução de uma instância em tempo real para a configuração mais recente dos parâmetros da tarefa periódica de produção, independentemente de a instância ter sido executada.
Cenário em tempo real:
No dia atual, o parâmetro de agendamento time1 da instância periódica A1 do nó A tem o valor $bizdate. A instância foi executada com sucesso naquele dia, e o valor usado no código foi a data de negócios bizdate (valor específico).
Mais tarde naquele dia, o parâmetro time1 muda de $bizdate para $cyctime. O parâmetro de execução exibido para a instância daquele dia passa a ser o horário agendado cyctime (valor específico).
Se você reexecutar essa instância, ela usará a configuração mais recente: time1=$cyctime
Para visualizar os valores de substituição de parâmetros usados antes da alteração, verifique os logs. Para obter detalhes, consulte a pergunta frequente sobre como visualizar valores de substituição nos logs: Como visualizar os valores de parâmetros de agendamento usados por uma instância em seus logs?.
Na página Operation Center > Periodic Instances, selecione uma instância. No campo Execution Parameters do painel Properties, visualize os valores resolvidos reais, como var1=20210708233000 var2=20210709000000, e confirme se os valores foram atualizados conforme o esperado.
Como visualizar os valores de parâmetros de agendamento usados por uma instância em seus logs?
Encontre SKYNET_PARAVALUE no log.
07-09 00:00:19 INFO SKYNET_RERUN_MODE=1:
07-09 00:00:19 INFO SKYNET_FLOW_PARAVALUE=:
07-09 00:00:19 INFO SKYNET_ONDUTY=xxx:
07-09 00:00:19 INFO SKYNET_SYSTEMID=:
07-09 00:00:19 INFO CALC_ENGINE_IDENTIFIER=xxx:
07-09 00:00:19 INFO SKYNET_SOURCEID=xxx:
07-09 00:00:19 INFO SKYNET_PARAVALUE=var1=20210708233000 var2=20210709000000:
07-09 00:00:19 INFO SKYNET_TASKID=xxx:
07-09 00:00:19 INFO SKYNET_TENANT_ID=283789484710656:
07-09 00:00:19 INFO SKYNET_ID=700003341088:
07-09 00:00:19 INFO SKYNET_JOBID=700200619122:
07-09 00:00:19 INFO SKYNET_NODENAME=xc_partition_copy:
07-09 00:00:19 INFO SKYNET_CYCTYPE=0:
07-09 00:00:19 INFO SKYNET_DSC_JOB_VERSION=1:
07-09 00:00:19 INFO SKYNET_TASK_INPUT={}:
07-09 00:00:19 INFO SKYNET_FLOWNAME=ATCLOUD_FLOW:
07-09 00:00:19 INFO FILE_ID=700003341088:
Como definir um fuso horário para parâmetros de agendamento?
O sistema aceita o horário de verão para a geração de instâncias e os cálculos de partição de parâmetros, garantindo a execução correta das tarefas nos dias de transição. Por exemplo, no fuso horário do Pacífico dos EUA:
No dia em que o horário de verão começa, o sistema gera 23 instâncias. A subtração de 10 minutos de 03:00 resulta em 01:50. Uma tarefa agendada para as 02:00 nesse dia é executada como uma tarefa vazia.
No dia em que o horário de verão termina, o sistema gera 24 instâncias. A subtração de 10 minutos de 03:00 resulta em 02:50.
Para um nó diário, semanal ou mensal agendado no intervalo ignorado no dia em que o horário de verão começa, o sistema agenda a instância gerada para a meia-noite daquele dia.
Os parâmetros de agendamento são configurados e publicados para o nó, mas o valor retornado nunca muda
Verifique se um parâmetro de fluxo de trabalho com o mesmo nome está substituindo o parâmetro de agendamento. Para o procedimento, consulte Usar parâmetros de fluxo de trabalho.
Se existir esse parâmetro de fluxo de trabalho, exclua o parâmetro caso não esteja em uso. Se for necessário mantê-lo, renomeie o parâmetro de agendamento do nó.