As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Conceitos de consulta agendada
Cadeia de caracteres de consulta - Essa é a consulta cujo resultado você está pré-computando e armazenando em outro Timestream for table. LiveAnalytics Você pode definir uma consulta agendada usando toda a área de SQL superfície do Timestream for LiveAnalytics, que fornece a flexibilidade de escrever consultas com expressões de tabela comuns, consultas aninhadas, funções de janela ou qualquer tipo de função agregada e escalar compatível com o Timestream para linguagem de consulta. LiveAnalytics
Expressão de agendamento - permite que você especifique quando suas instâncias de consulta agendadas serão executadas. Você pode especificar as expressões usando uma expressão cron (como executar às 8h UTC todos os dias) ou uma expressão de taxa (como executar a cada 10 minutos).
Configuração de destino - Permite especificar como mapear o resultado de uma consulta agendada na tabela de destino em que os resultados dessa consulta agendada serão armazenados.
Configuração de notificação - Timestream para executar LiveAnalytics automaticamente instâncias de uma consulta agendada com base em sua expressão de agendamento. Você recebe uma notificação para cada consulta executada em um SNS tópico que você configura ao criar uma consulta agendada. Essa notificação especifica se a instância foi executada com sucesso ou se encontrou algum erro. Além disso, ele fornece informações como os bytes medidos, os dados gravados na tabela de destino, a hora da próxima invocação e assim por diante.
Veja a seguir um exemplo desse tipo de mensagem de notificação.
{ "type":"AUTO_TRIGGER_SUCCESS", "arn":"arn:aws:timestream:us-east-1:123456789012:scheduled-query/ PT1mPerMinutePerRegionMeasureCount-9376096f7309", "nextInvocationEpochSecond":1637302500, "scheduledQueryRunSummary": { "invocationEpochSecond":1637302440, "triggerTimeMillis":1637302445697, "runStatus":"AUTO_TRIGGER_SUCCESS", "executionStats": { "executionTimeInMillis":21669, "dataWrites":36864, "bytesMetered":13547036820, "recordsIngested":1200, "queryResultRows":1200 } } }
Nessa mensagem de notificação, bytesMetered
estão os bytes que a consulta examinou na tabela de origem e dataWrites os bytes gravados na tabela de destino.
nota
Se você estiver consumindo essas notificações programaticamente, saiba que novos campos poderão ser adicionados à mensagem de notificação no futuro.
Local do relatório de erros - as consultas agendadas são executadas e armazenadas de forma assíncrona na tabela de destino. Se uma instância encontrar algum erro (por exemplo, dados inválidos que não puderam ser armazenados), os registros que encontraram erros serão gravados em um relatório de erros no local do relatório de erros especificado na criação de uma consulta agendada. Você especifica o bucket e o prefixo do S3 para o local. Timestream for LiveAnalytics acrescenta o nome da consulta agendada e a hora da invocação a esse prefixo para ajudá-lo a identificar os erros associados a uma instância específica de uma consulta agendada.
Marcação - opcionalmente, você pode especificar tags que podem ser associadas a uma consulta agendada. Para obter mais detalhes, consulte Como marcar o Timestream para recursos. LiveAnalytics
Exemplo
No exemplo a seguir, você calcula um agregado simples usando uma consulta agendada:
SELECT region, bin(time, 1m) as minute, SUM(CASE WHEN measure_name = 'metrics' THEN 20 ELSE 5 END) as numDataPoints FROM raw_data.devops WHERE time BETWEEN @scheduled_runtime - 10m AND @scheduled_runtime + 1m GROUP BY bin(time, 1m), region
@scheduled_runtime parameter
- Neste exemplo, você notará que a consulta aceita um parâmetro com nome especial@scheduled_runtime
. Esse é um parâmetro especial (do tipo Timestamp) que o serviço define ao invocar uma instância específica de uma consulta agendada para que você possa controlar deterministicamente o intervalo de tempo durante o qual uma instância específica de uma consulta agendada analisa os dados na tabela de origem. Você pode usar @scheduled_runtime
em sua consulta em qualquer local em que um tipo de carimbo de data/hora seja esperado.
Considere um exemplo em que você define uma expressão de cronograma: cron (0/5 * * *? *) onde a consulta agendada será executada no minuto 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55 de cada hora. Para a instância que é acionada em 01/12/2021 00:05:00, o parâmetro @scheduled_runtime é inicializado com esse valor, de forma que a instância neste momento opere com dados no intervalo 2021-11-30 23:55:00 a 2021-12-01 00:06:00.
Instâncias com intervalos de tempo sobrepostos - Como você verá neste exemplo, duas instâncias subsequentes de uma consulta agendada podem se sobrepor em seus intervalos de tempo. Isso é algo que você pode controlar com base em seus requisitos, nos predicados de tempo que você especifica e na expressão do cronograma. Nesse caso, essa sobreposição permite que esses cálculos atualizem os agregados com base em qualquer dado cuja chegada tenha sido um pouco atrasada, até 10 minutos neste exemplo. A execução da consulta acionada em 2021-12-01 00:00:00 cobrirá o intervalo de tempo 2021-11-30 23:50:00 a 2021-12-30 00:01:00 e a execução da consulta acionada em 2021-12-01 00:05:00 cobrirá o intervalo 2021-11-30 23:55:00 a 2021-12-01 00:06:00.
Para garantir a exatidão e garantir que os agregados armazenados na tabela de destino correspondam aos agregados calculados a partir da tabela de origem, o Timestream for LiveAnalytics garante que o cálculo em 01/12/2021 00:05:00 seja executado somente após a conclusão do cálculo em 01/12/2021 00:00:00. Os resultados dos últimos cálculos podem atualizar qualquer agregado materializado anteriormente se um valor mais novo for gerado. Internamente, o Timestream for LiveAnalytics usa versões de registro em que os registros gerados pelas últimas instâncias de uma consulta agendada receberão um número de versão maior. Portanto, os agregados calculados pela invocação em 01/12/2021 00:05:00 podem atualizar os agregados calculados pela invocação em 01/12/2021 00:00:00, supondo que dados mais recentes estejam disponíveis na tabela de origem.
Acionadores automáticos versus acionadores manuais - Depois que uma consulta agendada for criada, o Timestream for LiveAnalytics executará automaticamente as instâncias com base na programação especificada. Esses gatilhos automatizados são gerenciados inteiramente pelo serviço.
No entanto, pode haver cenários em que talvez você queira iniciar manualmente algumas instâncias de uma consulta agendada. Os exemplos incluem se uma instância específica falhou na execução de uma consulta, se houve chegada tardia de dados ou atualizações na tabela de origem após a execução automática do agendamento ou se você quiser atualizar a tabela de destino para intervalos de tempo que não são cobertos por execuções de consultas automatizadas (por exemplo, para intervalos de tempo antes da criação de uma consulta agendada).
Você pode usar o ExecuteScheduledQuery API para iniciar manualmente uma instância específica de uma consulta agendada passando o InvocationTime parâmetro, que é um valor usado para o parâmetro @scheduled_runtime. A seguir estão algumas considerações importantes ao usar o ExecuteScheduledQuery API:
-
Se você estiver acionando várias dessas invocações, precisará garantir que essas invocações não gerem resultados em intervalos de tempo sobrepostos. Se você não puder garantir intervalos de tempo não sobrepostos, certifique-se de que essas execuções de consulta sejam iniciadas sequencialmente uma após a outra. Se você iniciar simultaneamente várias execuções de consulta que se sobrepõem em seus intervalos de tempo, poderá ver falhas de gatilho nas quais poderá ver conflitos de versão nos relatórios de erro dessas execuções de consulta.
-
Você pode iniciar as invocações com qualquer valor de timestamp para @scheduled_runtime. Portanto, é sua responsabilidade definir adequadamente os valores para que os intervalos de tempo apropriados sejam atualizados na tabela de destino correspondente aos intervalos em que os dados foram atualizados na tabela de origem.