es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo encuentro la cantidad de entradas en un intervalo de tiempo? MySQL y Grafana.

Quiero calcular la cantidad de datos utilizados por mis máquinas. Están reportando la suma de sus datos cada minuto. He elaborado una consulta que me da la diferencia entre la última entrada y un retraso de aproximadamente 24 h, pero como la cantidad de sistemas cambiará, esta tasa cambiará.

SELECT
time AS “time”,
machine_id,
ABS ( utilisation – LAG(utilisation,2160) OVER ( PARTITION BY machine_id ORDER BY time)) as DataUsed
FROM hardware
WHERE
$__unixEpochFilter(time) AND
component = ‘network’
ORDER BY time

Necesito reemplazar 2160 con el recuento de entradas en $__interval, que está definido por el panel de control de Grafana.

SELECT
$__unixEpochGroupAlias(time,$__interval),
count(utilisation) AS “count”
FROM hardware
WHERE
$__unixEpochFilter(time) AND
component = ‘network’
GROUP BY 1
ORDER BY $__unixEpochGroup(time,$__interval)

Estoy un poco perdido ya que la consulta anterior no me da realmente el número de entradas durante el lapso de tiempo que pensé que daría.

Así es como se almacenan los datos.

https://i.stack.imgur.com/e8KeQ.png

Consulta A

SELECT
time AS “time”,
machine_id,
utilisation – LAG(utilisation,88) OVER ( PARTITION BY machine_id ORDER BY time) as DataUsed
FROM hardware
WHERE
$__unixEpochFilter(time) AND
component = ‘network’
ORDER BY time

Consulta B

SELECT
machine_id,
count(utilisation) AS N
FROM hardware
WHERE
$__unixEpochFilter(time) AND
component = ‘network’
GROUP BY machine_id

View post on imgur.com

Tags:  

Answer

  1. Avatar for davy.ai

    Para calcular la cantidad de datos utilizados por sus máquinas, puede utilizar la siguiente consulta que tiene en cuenta la cantidad de entradas durante el $__interval.

    SELECT
      time AS "time",
      machine_id,
      utilisation - LAG(utilisation, count(utilisation) OVER (PARTITION BY machine_id ORDER BY time)) OVER (PARTITION BY machine_id ORDER BY time) as DataUsed
    FROM hardware
    WHERE
      $__unixEpochFilter(time) AND
      component = 'network'
    ORDER BY time
    

    Esta consulta utiliza una función de ventana con la cantidad de entradas durante el intervalo especificado por $__interval para reemplazar el valor estático de 2160 en la consulta original. La función count se utiliza para contar el número de entradas para cada machine_id dentro del conjunto de agrupación especificado por la función de ventana de partición. Esto asegura que el cálculo de lag se realiza en el número correcto de entradas.

    Además, puede utilizar la siguiente consulta para verificar si la cantidad de entradas durante el intervalo especificado por $__interval es correcta.

    SELECT
      $__unixEpochGroupAlias(time,$__interval),
      count(utilisation) AS "count"
    FROM hardware
    WHERE
      $__unixEpochFilter(time) AND
      component = 'network'
    GROUP BY 1
    ORDER BY $__unixEpochGroup(time,$__interval)
    

    Esta consulta utiliza las macros $__unixEpochGroupAlias y $__unixEpochGroup para agrupar los resultados por el intervalo especificado por $__interval. La función count se utiliza para contar el número de entradas de utilización dentro de cada conjunto de agrupación.

Comments are closed.