Em tarefas agendadas, os formatos de hora padrão retornados por parâmetros de agendamento podem não atender a requisitos de negócios complexos, como obter o fim de um mês, um trimestre ou um deslocamento de tempo personalizado. Aplique funções do mecanismo aos valores de retorno para produzir o formato de hora necessário. Converta os valores diretamente em um nó de computação ou pré-processe-os em um nó assignment.
Cenários de negócios
No desenvolvimento de dados e em processos de ETL, o agendamento costuma depender de dimensões de tempo específicas. Exemplos incluem o fechamento mensal com base em um período financeiro, como o último dia do mês anterior, e a sincronização incremental de dados em janelas de horas ou minutos. Por padrão, os parâmetros de agendamento retornam formatos de hora padrão e não geram diretamente esses formatos de tempo complexos e não padrão. Portanto, os valores de retorno exigem processamento adicional.
Soluções
Há duas formas principais de processar adicionalmente os parâmetros de agendamento: processá-los diretamente em um nó com suporte a funções, como o ODPS SQL, ou pré-processá-los em um nó assignment e passar os resultados para os nós downstream. Escolha a abordagem com base na capacidade do nó de destino de executar transformações de função em seu código.
Processamento direto: em nós com suporte a funções, como o ODPS SQL, use funções do mecanismo diretamente no código para converter os valores de retorno dos parâmetros de agendamento.
Processamento indireto: se o nó de destino, como alguns nós de sincronização offline, não puder executar transformações de função em seu código, adicione um assignment node upstream. O nó assignment executa a conversão e passa a saída como um parâmetro de contexto para os nós downstream.
Procedimento
Nos cenários a seguir, considere que a instância da tarefa está agendada com CYCTIME = 20250727000500.
Cenário 1: Processar valores de retorno diretamente em um nó SQL
Um nó ODPS SQL pode usar funções do MaxCompute SQL diretamente nas instruções SQL para processar os parâmetros de agendamento. Para outros nós SQL, use as funções compatíveis com os respectivos mecanismos.
Obter o último dia do mês anterior
Obtenha o último dia do mês anterior no formato yyyymmdd. Esse formato é comumente usado para partições mensais ou fechamentos.
-
Configuração do parâmetro: configure um parâmetro de agendamento para obter o ano e o mês da tarefa agendada atual.
last_month=$[yyyy-mm] -
Lógica de processamento: no código ODPS SQL, primeiro construa o primeiro dia do mês atual. Em seguida, use
DATEADDpara subtrair um dia e obter o último dia do mês anterior. UseREPLACEpara remover os separadores.SELECT REPLACE(DATEADD(date'${last_month}-01',-1,'dd'),'-',''); Exemplo:
last_monthé2025-07. Após o processamento, o resultado é20250630.
Obter o trimestre atual
Calcule o trimestre (1, 2, 3 ou 4) a partir do mês da tarefa agendada.
-
Configuração do parâmetro: configure um parâmetro de agendamento para obter o mês.
month=$[mm] -
Lógica de processamento: no código ODPS SQL, divida o mês por 3 e arredonde para cima para determinar o trimestre.
SELECT CEIL(CAST('${month}' AS INT)/3); Exemplo:
monthé07. Após o processamento, o resultado é3.
Obter cada componente de tempo 15 minutos antes do horário agendado
Para fatiar dados em um horário preciso, obtenha um horário com um deslocamento arbitrário em relação ao horário agendado.
-
Configuração do parâmetro: use o deslocamento aritmético
-15/24/60nos parâmetros de agendamento para obter o ano, o mês, o dia, a hora e o minuto de 15 minutos antes.year=$[yyyy-15/24/60]month=$[yyyymm-15/24/60]day=$[yyyymmdd-15/24/60]hour=$[hh24-15/24/60]mi=$[mi-15/24/60] -
Lógica de processamento: referencie esses parâmetros calculados diretamente no SQL.
select 'year=${year} month=${month} day=${day} hour=${hour} mi=${mi}'; Exemplo: após o cálculo cruzar a virada do dia, o resultado é
year=2025 month=202507 day=20250726 hour=23 mi=50.
Cenário 2: Gerar um intervalo de tempo para sincronização incremental
Gere parâmetros de tempo para uma tarefa de sincronização offline que exija um intervalo especificado. Considere que o formato de tempo é yyyymmddhh24miss e que o intervalo é aberto à esquerda e fechado à direita.
Intervalo de agendamento: Um dia
Obtenha o intervalo entre ontem às 00:00:00 e hoje às 00:00:00.
-
Configuração do parâmetro: obtenha as datas de ontem e de hoje separadamente.
beginDateTime=$[yyyymmdd-1]endDateTime=$[yyyymmdd] -
Lógica de processamento: concatene strings na condição WHERE do filtro de dados para adicionar os componentes de hora, minuto e segundo.
event_time > '${beginDateTime}000000' AND event_time <= '${endDateTime}000000' Exemplo: o resultado começa em
20250726000000e termina em20250727000000.
Intervalo de agendamento: Uma hora
Obtenha o intervalo entre a hora anterior às 00:00 e a hora atual às 00:00.
-
Configuração do parâmetro: use operações aritméticas para obter a hora anterior e a hora atual.
beginDateTime=$[yyyymmddhh24-1/24]endDateTime=$[yyyymmddhh24] -
Lógica de processamento: concatene strings na condição WHERE do filtro de dados para adicionar os componentes de minuto e segundo.
event_time >= '${beginDateTime}0000' AND event_time < '${endDateTime}0000' Exemplo: o resultado começa em
20250726230000e termina em20250727000000.
Cenário 3: Pré-processar parâmetros para nós downstream com um nó assignment
Se o nó de destino, como alguns nós de sincronização offline, não puder usar funções para processar os parâmetros de agendamento diretamente, faça o pré-processamento em um nó assignment. Por exemplo, se uma tarefa de sincronização offline precisar de um campo timestamp para sincronização incremental, siga estas etapas:
Crie um assignment node.
No nó assignment, use uma função do mecanismo, como
unix_timestamp, para converter um parâmetro de agendamento padrão, como$[yyyymmddhh24miss], para o formato timestamp.Use a saída do nó assignment, o timestamp convertido, como parâmetro de entrada do nó de sincronização offline downstream. Para obter informações sobre os parâmetros de entrada e saída, consulte: Configure and use node context parameters.