O Simple Log Service oferece o recurso SQL Agendado. Com ele, você pode analisar dados automaticamente em horários programados e agregar dados para armazenamento. Também é possível usar o recurso para projetar e filtrar dados. Este tópico descreve as informações de contexto, os recursos, os termos, os cenários de agendamento e execução, e as notas de uso do SQL Agendado.
Informações de contexto
Dados relacionados ao tempo, como logs e métricas, podem acumular volumes excessivamente grandes. Por exemplo, se 10 milhões de registros de dados são gerados por dia, um total de aproximadamente 3,6 bilhões de registros se acumula por ano. A retenção de dados a longo prazo exige grande capacidade de armazenamento. Reduzir o período de retenção para diminuir o armazenamento necessário pode reduzir os custos, mas pode resultar na perda de dados valiosos. Além disso, grandes volumes de dados podem deteriorar o desempenho das análises.
O armazenamento e a análise de dados têm os seguintes requisitos:
A maioria das métricas é sensível ao tempo. Dados históricos podem ter precisão em minutos ou horas, mas os dados novos precisam de precisão maior.
Usuários de dados, como especialistas em operações de dados e cientistas de dados, precisam armazenar os dados completos para análise.
O processamento de dados completos e o tempo de resposta rápido precisam ser equilibrados durante a análise de dados.
Para atender a esses requisitos, o Simple Log Service oferece o recurso SQL Agendado. Com ele, você pode compactar dados históricos de alta precisão em dados de baixa precisão e armazená-los por longo prazo. Após ativar o recurso SQL Agendado, você pode alterar o período de retenção de dados de um logstore ou Metricstore de origem para um valor menor, como 15 dias, conforme suas necessidades de negócio, e alterar o período de retenção de dados de um logstore ou Metricstore de destino para permanente. Isso ajuda a reduzir a latência ao analisar dados de longa duração e diminuir os custos de armazenamento.
Recursos
O SQL Agendado oferece suporte à sintaxe SQL-92 e à sintaxe de instruções de consulta do Simple Log Service. Os jobs de SQL Agendado são executados periodicamente com base em regras de agendamento e gravam os resultados em logstores ou Metricstores de destino.
Análise de dados agendada: escreva instruções SQL ou instruções de consulta conforme suas necessidades de negócio para realizar análises de dados agendadas e armazenar os resultados nos logstores ou Metricstores de destino.
Agregação global: agregue dados completos e detalhados para armazenamento. Esse processo envolve compactação com perda de dados. O tamanho do armazenamento e a precisão dos dados após a compactação devem atender aos requisitos. Exemplos:
Se você agregar 3,6 bilhões de registros de dados para armazenamento com precisão em segundos, um total de 31,5 milhões de registros serão armazenados, e o tamanho do armazenamento será 0,875% dos dados completos.
Se você agregar 3,6 bilhões de registros de dados para armazenamento com precisão em minutos, um total de 525.000 registros serão armazenados, e o tamanho do armazenamento será 0,015% dos dados completos.
Projeção e filtragem: filtre dados brutos por campo com base em condições específicas e armazene os dados obtidos nos logstores ou Metricstores de destino.
Você também pode projetar e filtrar dados usando o recurso de transformação de dados, que utiliza a sintaxe Domain Specific Language (DSL). A sintaxe DSL oferece capacidades de extração, transformação e carga (ETL) superiores à sintaxe SQL. Para mais informações, consulte Como funciona.
Termos
Job: cada tarefa de SQL Agendado corresponde a um job. Um job inclui informações como configurações de cálculo e agendamento.
Instância: um job de SQL Agendado gera instâncias com base nas configurações de agendamento. Cada instância realiza o cálculo SQL nos dados brutos e grava os resultados no logstore ou Metricstore de destino.
ID da instância: o identificador exclusivo de uma instância.
Hora de criação: o momento em que uma instância é criada. Na maioria dos casos, uma instância é criada com base nas regras de agendamento que você configura. Se dados históricos precisam ser processados ou se há latência a ser compensada, a instância é criada imediatamente.
Hora de início: o momento em que uma instância começa a ser executada. Se um job é repetido, a hora de início é o momento em que a última instância do job começa a ser executada.
Hora de término: o momento em que uma instância para de ser executada. Se um job é repetido, a hora de término é o momento em que a última instância do job para de ser executada.
Horário agendado: o horário para o qual um job está programado. O horário agendado de uma instância é gerado com base nas regras de agendamento do job, independentemente de a instância anterior ter expirado, sido atrasada ou executada para processar dados históricos.
Na maioria dos casos, o horário agendado de instâncias geradas sucessivamente é consecutivo, e as instâncias sucessivas podem processar um conjunto de dados completo.
Janela de tempo SQL: o intervalo de tempo dos dados analisados quando um job de SQL Agendado é executado. O Simple Log Service não analisa dados fora desse intervalo durante a execução do job. Uma janela de tempo SQL é um intervalo fechado à esquerda e aberto à direita, calculado com base no horário agendado de uma instância. A janela de tempo SQL é independente da hora de criação e da hora de início de uma instância. Por exemplo, se o horário agendado de uma instância é 2021/01/01 10:00:00 e a expressão da janela de tempo SQL é [@m - 10m, @m), a janela de tempo SQL da instância é [2021/01/01 09:50:00, 2021/01/01 10:00:00).
Status: o status de uma instância de SQL Agendado. Uma instância pode estar nos estados RUNNING, STARTING, SUCCEEDED ou FAILED.
Execução com atraso: um parâmetro que você pode configurar para um job de SQL Agendado. Se você definir o parâmetro como N, a instância começará a ser executada N segundos após o horário agendado. Isso ajuda a evitar resultados de cálculo imprecisos causados por latência de dados. Se não for necessário atrasar a execução de uma instância, defina o parâmetro Delay Task como 0 Seconds.
Por exemplo, se você definir o parâmetro Specify Scheduling Interval como Hourly e o parâmetro Delay Task como 30 Seconds, 24 instâncias serão geradas por dia. Se o horário agendado de uma instância é 2021/4/6 12:00:00, a hora de início da instância é 2021/4/6 12:00:30.
Cenários de agendamento e execução
Cada job pode gerar múltiplas instâncias. Apenas uma instância de um job pode estar no estado RUNNING por vez, independentemente de o job ser normalmente agendado ou de uma instância ser repetida devido a uma exceção. Múltiplas instâncias não podem ser executadas ao mesmo tempo. Os exemplos a seguir ilustram os cenários típicos de agendamento e execução:
Cenário 1: Executar uma instância com atraso
O horário agendado de uma instância é gerado antecipadamente com base nas regras de agendamento do job, independentemente de a instância ter atraso na execução. Se uma instância está atrasada, as instâncias subsequentes também podem ser atrasadas. No entanto, o atraso pode ser gradualmente compensado ao executar as instâncias subsequentes em maior velocidade, até que uma instância seja executada no horário previsto.

Cenário 2: Agendar um job de SQL Agendado a partir de um ponto histórico no tempo
Ao criar um job de SQL Agendado, você pode configurar regras de agendamento para permitir que o job processe dados históricos. Quando o job é agendado para o ponto histórico de início, uma instância é gerada para processar os dados históricos. Em seguida, mais instâncias são geradas para processar os dados históricos. As instâncias são executadas em sequência até que uma instância seja executada no horário previsto.

Cenário 3: Agendar um job de SQL Agendado dentro de um período especificado
Se você quiser agendar um job para processar logs dentro de um período, especifique esse período para o agendamento. Se você especificar a hora de término do agendamento, o job não gerará instâncias após a execução da última instância. O horário agendado da última instância não pode ser igual nem posterior à hora de término do agendamento.

Cenário 4: Modificar configurações de agendamento
Após modificar as configurações de agendamento de um job, ele gera uma instância com base nas novas configurações. Para garantir a continuidade das janelas de tempo SQL entre as instâncias, você pode modificar a janela de tempo SQL e a frequência de agendamento nas configurações de agendamento.

Cenário 5: Repetir uma instância com falha
Na maioria dos casos, um job de SQL Agendado gera instâncias em ordem cronológica com base no horário agendado. Se uma instância falhar devido a permissões insuficientes, logstore ou Metricstore de origem inexistente, logstore ou Metricstore de destino inexistente, ou sintaxe SQL inválida, o sistema permite que a instância seja repetida automaticamente. Se o número de tentativas exceder o limite superior que você especificou ou se a instância for repetida por um período que exceda o tempo máximo especificado, a instância para de tentar e entra no estado FAILED. A próxima instância começa a ser executada.
Você pode configurar alertas para instâncias com falha e repeti-las manualmente. É possível visualizar e repetir as instâncias geradas nos últimos sete dias. Após a execução das instâncias, o sistema altera o status delas para SUCCEEDED ou FAILED com base nos resultados das tentativas. Para mais informações, consulte Repetir uma instância de um job de SQL Agendado.
Notas de uso
Ao usar o recurso SQL Agendado, recomendamos que você equilibre a pontualidade e a precisão dos dados conforme suas necessidades de negócio.
Quando os dados são enviados ao Simple Log Service, pode haver latência. Nesse caso, os dados de uma janela de tempo SQL podem não estar completamente enviados ao Simple Log Service quando uma instância está em execução. Para evitar esse problema, recomendamos que você configure os parâmetros Delay Task e SQL Time Window com base na latência de coleta de dados e na latência máxima de visualização de resultados permitida pelo seu negócio. Além disso, recomendamos que você especifique valores ligeiramente anteriores aos valores teóricos para garantir que as instâncias sejam executadas conforme o esperado.
Para garantir a precisão dos resultados de processamento em caso de dados fora de ordem enviados, recomendamos que você especifique janelas de tempo SQL em nível de minuto ou hora para os jobs.