Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Conceptos de consultas programadas
Cadena de consulta: se trata de la consulta cuyo resultado está calculando previamente y almacenando en otra tabla Timestream for. LiveAnalytics Puede definir una consulta programada utilizando toda la SQL superficie de Timestream LiveAnalytics, lo que le proporciona la flexibilidad de escribir consultas con expresiones de tabla comunes, consultas anidadas, funciones de ventana o cualquier tipo de funciones agregadas y escalares compatibles con Timestream para el lenguaje de consultas. LiveAnalytics
Expresión de programación: le permite especificar cuándo se ejecutarán las instancias de consulta programadas. Puede especificar las expresiones mediante una expresión cron (como ejecutar a las 8 de la mañana UTC todos los días) o una expresión de frecuencia (como ejecutar cada 10 minutos).
Configuración de destino: le permite especificar cómo asignar el resultado de una consulta programada a la tabla de destino, donde se almacenarán los resultados de esta consulta programada.
Configuración de notificaciones: Timestream for ejecuta LiveAnalytics automáticamente instancias de una consulta programada en función de la expresión de la programación. Recibirá una notificación por cada consulta de este tipo que se ejecute en un SNS tema que configure al crear una consulta programada. Esta notificación especifica si la instancia se ejecutó correctamente o si se detectó algún error. Además, proporciona información como los bytes medidos, los datos escritos en la tabla de destino, la hora de la próxima invocación, etc.
El siguiente es un ejemplo de este tipo de mensaje de notificación.
{ "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 } } }
En este mensaje de notificación, bytesMetered
están los bytes que la consulta escaneó en la tabla de origen y dataWrites son los bytes escritos en la tabla de destino.
nota
Si consume estas notificaciones mediante programación, tenga en cuenta que podrían añadirse nuevos campos al mensaje de notificación en el futuro.
Ubicación del informe de errores: las consultas programadas se ejecutan y almacenan datos de forma asíncrona en la tabla de destino. Si una instancia encuentra algún error (por ejemplo, datos no válidos que no se pudieron almacenar), los registros que detectaron errores se escriben en un informe de errores en la ubicación del informe de errores que especifiques al crear una consulta programada. Debe especificar el depósito y el prefijo de S3 para la ubicación. Timestream for LiveAnalytics añade el nombre de la consulta programada y la hora de invocación a este prefijo para ayudarle a identificar los errores asociados a una instancia específica de una consulta programada.
Etiquetado: si lo desea, puede especificar etiquetas que puede asociar a una consulta programada. Para obtener más información, consulte Etiquetar Timestream for Resources. LiveAnalytics
Ejemplo
En el siguiente ejemplo, se calcula un agregado simple mediante una consulta programada:
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
- En este ejemplo, observará que la consulta acepta un parámetro con un nombre especial@scheduled_runtime
. Se trata de un parámetro especial (del tipo Timestamp) que el servicio establece al invocar una instancia específica de una consulta programada, de forma que se puede controlar de forma determinista el intervalo de tiempo durante el que una instancia específica de una consulta programada analiza los datos de la tabla de origen. Puede usarlo @scheduled_runtime
en su consulta en cualquier ubicación en la que se espere un tipo de marca de tiempo.
Considera un ejemplo en el que estableces una expresión de programación: cron (0/5 * * *? *) donde la consulta programada se ejecutará en los minutos 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55 de cada hora. Para la instancia que se activa el 01/12/2021 a las 00:05:00, el parámetro @scheduled_runtime se inicializa con este valor, de forma que la instancia funciona en este momento con datos comprendidos en el intervalo del 30 de diciembre de 2021 a las 23:55:00 al 31 de diciembre de 2021 a las 00:06:00.
Instancias con intervalos de tiempo superpuestos: como verá en este ejemplo, dos instancias posteriores de una consulta programada pueden superponerse en sus intervalos de tiempo. Esto es algo que puede controlar en función de sus requisitos, los predicados de tiempo que especifique y la expresión del cronograma. En este caso, esta superposición permite que estos cálculos actualicen los agregados en función de cualquier dato cuya llegada se haya retrasado ligeramente (hasta 10 minutos en este ejemplo). La ejecución de la consulta iniciada el 01/12/2021 a las 00:00:00 cubrirá el intervalo de tiempo de las 23:50:00 del 2021-11-30 a las 00:01:00 y la ejecución de la consulta que se desencadena el 01/12/2021 a las 00:05:00 cubrirá el intervalo comprendido entre el 2021-11-30 23:55:00 y el 2021-12-01 00:06:00.
Para garantizar la exactitud y asegurarse de que los agregados almacenados en la tabla de destino coinciden con los agregados calculados a partir de la tabla de origen, Timestream for LiveAnalytics garantiza que el cálculo de 2021-12-01 00:05:00 se realice solo después de que se haya completado el cálculo de 2021-12-01 00:00:00. Los resultados de estos últimos cálculos pueden actualizar cualquier agregado previamente materializado si se genera un valor más nuevo. Internamente, Timestream LiveAnalytics utiliza versiones de registro, en las que a los registros generados por las últimas instancias de una consulta programada se les asigna un número de versión superior. Por lo tanto, los agregados calculados por la invocación el 01/12/2021 a las 00:05:00 pueden actualizar los agregados calculados por la invocación el 01/12/2021 a las 00:00:00, suponiendo que haya datos más recientes disponibles en la tabla de origen.
Activadores automáticos frente a activadores manuales: después de crear una consulta programada, Timestream for ejecutará automáticamente las instancias según la programación especificada. LiveAnalytics Estos activadores automáticos son gestionados en su totalidad por el servicio.
Sin embargo, puede haber situaciones en las que desee iniciar manualmente algunas instancias de una consulta programada. Por ejemplo, si una instancia específica falló en la ejecución de una consulta, si los datos llegaron tarde o si hubo actualizaciones en la tabla de origen tras la ejecución programada automática, o si desea actualizar la tabla de destino para intervalos de tiempo que no están cubiertos por las ejecuciones de consultas automatizadas (por ejemplo, para los intervalos de tiempo anteriores a la creación de una consulta programada).
Puede usar el ExecuteScheduledQuery API para iniciar manualmente una instancia específica de una consulta programada pasando el InvocationTime parámetro, que es un valor que se usa para el parámetro @scheduled_runtime. A continuación se indican algunas consideraciones importantes a la hora de utilizar el ExecuteScheduledQuery API:
-
Si va a activar varias de estas invocaciones, debe asegurarse de que estas invocaciones no generen resultados en intervalos de tiempo superpuestos. Si no puede garantizar que los intervalos de tiempo no se superpongan, asegúrese de que estas ejecuciones de consultas se inicien secuencialmente una tras otra. Si inicias simultáneamente varias ejecuciones de consultas que se superponen en sus intervalos de tiempo, puedes ver errores desencadenantes y, por lo tanto, conflictos de versiones en los informes de errores de estas ejecuciones de consultas.
-
Puedes iniciar las invocaciones con cualquier valor de marca temporal para @scheduled_runtime. Por lo tanto, es su responsabilidad establecer los valores de manera adecuada para que los intervalos de tiempo adecuados se actualicen en la tabla de destino correspondiente a los rangos en los que se actualizaron los datos en la tabla de origen.