Em tarefas agendadas, quando o formato de hora padrão retornado pelos parâmetros de agendamento não atende a necessidades de negócios complexas (como obter o último dia de um mês, de um trimestre ou aplicar um deslocamento de tempo personalizado), utilize funções do mecanismo para pós-processar os valores de retorno e gerar o formato de hora necessário. É possível transformar os valores diretamente em um nó de computação ou pré-processá-los com um nó de atribuição.
Cenário de negócios
No desenvolvimento de dados e em pipelines de ETL, o agendamento de tarefas frequentemente depende de dimensões temporais específicas — por exemplo, liquidação mensal baseada em um ciclo financeiro (último dia do mês anterior) ou sincronização incremental de dados baseada em janelas de tempo horárias ou no nível de minutos. Como os parâmetros de agendamento retornam um formato de hora padrão por definição e não produzem diretamente essas strings de tempo complexas e não padronizadas, é necessário pós-processar seus valores de retorno.
Visão geral da solução
Existem duas abordagens principais para o pós-processamento de parâmetros de agendamento: processá-los diretamente dentro de um nó que suporte execução de funções (como um nó ODPS SQL) ou pré-processá-los com um nó de atribuição e passar o resultado para os nós downstream. A escolha depende se o nó de destino suporta a execução de funções em seu código.
Direct Processing: Em nós que suportam execução de funções, como ODPS SQL, utilize funções do mecanismo dentro do código para transformar os valores de retorno dos parâmetros de agendamento.
Indirect Processing: Quando o nó de destino (por exemplo, certos nós de sincronização em lote) não suporta execução de funções em seu código, adicione um nó de atribuição upstream. O nó de atribuição realiza a transformação via função e passa sua saída para o nó downstream como um parâmetro de contexto.
Etapas de implementação
Em todos os cenários a seguir, considere que o horário agendado (CYCTIME) da instância da tarefa é 20250727000500.
Cenário 1: Processar valores de retorno diretamente em um nó SQL
Tomando o nó ODPS SQL como exemplo, esse tipo de nó permite usar funções MaxCompute SQL diretamente nas instruções SQL para processar parâmetros de agendamento. Para outros nós SQL, consulte os tipos de função suportados pelos respectivos mecanismos.
Obter o último dia do mês anterior
Obtenha o último dia do mês anterior no formato aaaammdd. Esse formato é comum para particionamento ou liquidação de dados mensais.
-
Configuração de parâmetros: Configure um parâmetro de agendamento para obter o ano e o mês do horário agendado 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 a função
DATEADDpara subtrair um dia e obter o último dia do mês anterior, e utilize a funçãoREPLACEpara remover o delimitador.SELECT REPLACE(DATEADD(date'${last_month}-01',-1,'dd'),'-',''); Exemplo: O valor do parâmetro
last_monthé2025-07. Após o processamento pela função, o valor de retorno é20250630.
Obter o trimestre atual
Calcule o trimestre (1, 2, 3 ou 4) ao qual pertence o mês do horário agendado.
-
Configuração de parâmetros: 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 calcular o trimestre.
SELECT CEIL(CAST('${month}' AS INT)/3); Exemplo: O valor do parâmetro
monthé07. Após o processamento pela função, o valor de retorno é3.
Obter componentes de tempo 15 minutos antes do horário agendado
Em cenários que exigem pontos temporais precisos para fatiamento de dados, obtenha qualquer deslocamento de tempo relativo ao horário agendado.
-
Configuração de parâmetros: Utilize a operação matemática
-15/24/60nos parâmetros de agendamento para obter diretamente o ano, mês, dia, hora e minuto correspondentes a 15 minutos antes do horário agendado.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 pré-calculados diretamente no SQL.
select 'year=${year} month=${month} day=${day} hour=${hour} mi=${mi}'; Exemplo: Após o cálculo que cruza o limite do dia, os valores de retorno são
year=2025 month=202507 day=20250726 hour=23 mi=50.
Cenário 2: Gerar intervalos de tempo para sincronização incremental
Gere parâmetros de tempo para tarefas de sincronização em lote que exigem um intervalo de tempo especificado. Considere que estes cenários requerem o formato de tempo yyyymmddhh24miss e um intervalo exclusivo à esquerda e inclusivo à direita.
Intervalo de agendamento de 1 dia
Obtenha o intervalo de tempo das 00:00:00 de ontem até as 00:00:00 de hoje.
-
Configuração de parâmetros: Obtenha as datas de ontem e de hoje separadamente.
beginDateTime=$[yyyymmdd-1]endDateTime=$[yyyymmdd] -
Lógica de processamento: Concatene strings na cláusula WHERE do filtro de dados para acrescentar as partes de hora, minuto e segundo.
event_time >= '${beginDateTime}000000' AND event_time < '${endDateTime}000000' Exemplo: Os valores de retorno são hora inicial
20250726000000e hora final20250727000000.
Intervalo de agendamento de 1 hora
Obtenha o intervalo de tempo dos 00:00 da hora anterior até os 00:00 da hora atual.
-
Configuração de parâmetros: Use operações matemáticas para obter a hora anterior e a hora atual.
beginDateTime=$[yyyymmddhh24-1/24]endDateTime=$[yyyymmddhh24] -
Lógica de processamento: Concatene strings na cláusula WHERE do filtro de dados para acrescentar as partes de minuto e segundo.
event_time >= '${beginDateTime}0000' AND event_time < '${endDateTime}0000' Exemplo: Os valores de retorno são hora inicial
20250726230000e hora final20250727000000.
Cenário 3: Pré-processar parâmetros para nós downstream usando um nó de atribuição
Quando o nó de destino (por exemplo, certos nós de sincronização em lote) não consegue usar funções diretamente para processar parâmetros de agendamento, utilize um nó de atribuição para o pré-processamento. Por exemplo, quando uma tarefa de sincronização em lote precisa usar uma coluna de timestamp para sincronização incremental, siga estas etapas:
Crie um nó de atribuição.
No nó de atribuição, utilize uma função do mecanismo (como
unix_timestamp) para converter um parâmetro de agendamento padrão (como$[yyyymmddhh24miss]) para o formato de timestamp.Passe a saída do nó de atribuição (o timestamp convertido) como parâmetro de entrada para o nó de sincronização em lote downstream. Para obter informações sobre como configurar parâmetros de entrada e saída, consulte Configurar parâmetros de entrada e saída.