# Repaso sesión 2

### **1. Diferencias entre InfluxQL y Flux**

* **InfluxQL**: Lenguaje de consulta similar a SQL, usado principalmente en InfluxDB 1.x. Es ideal para consultas básicas y rápidas sobre series temporales, pero tiene limitaciones en funciones avanzadas y manipulación de datos complejos.
* **Flux**: Lenguaje de scripting más potente y flexible, introducido en InfluxDB 2.x. Permite consultas avanzadas, transformaciones complejas, uso de joins, manejo de datos de múltiples fuentes y mejor control de agregaciones y conversiones de tiempo.

***

### **2. Introducción a InfluxQL**

* **SELECT**: Extrae datos de una medición.
  * Ejemplo: `SELECT temperatura FROM ambiente`
* **WHERE**: Filtra datos según condiciones.
  * Ejemplo: `SELECT temperatura FROM ambiente WHERE sensor_id='sensor0'`
* **ORDER BY**: Ordena los resultados.
  * Ejemplo: `SELECT temperatura FROM ambiente ORDER BY time DESC`
* **LIMIT**: Restringe la cantidad de resultados.
  * Ejemplo: `SELECT temperatura FROM ambiente LIMIT 10`

***

### **3. Filtrado de Datos por Tiempo y Etiquetas**

* Filtrar por tiempo: `SELECT temperatura FROM ambiente WHERE time > now() - 1h`
* Filtrar por etiquetas: `SELECT temperatura FROM ambiente WHERE sensor_id='sensor01' AND ubicacion='ubicacionA0'`

***

### **4. Uso de GROUP BY time() para Agregaciones Temporales**

* Permite agrupar datos en intervalos de tiempo definidos.
  * Ejemplo: `SELECT mean(temperatura) FROM ambiente WHERE time > now() - 1d GROUP BY time(10m)`
* Útil para obtener promedios, máximos, mínimos, etc.

***

### **5. Flux para Consultas Avanzadas**

* Flux permite:
  * Consultas multi-bucket.
  * Transformaciones avanzadas.
  * Uso de joins y operaciones matemáticas complejas.
* Ejemplo básico:

  <pre data-title="flux" data-overflow="wrap"><code>from(bucket: "mediciones_sensores")
    |> range(start: -1h)
    |> filter(fn: (r) => r._measurement == "ambiente")
    |> mean()
  </code></pre>

***

### **6. Uso de JOINS en Flux para Combinar Series de Datos**

* Flux soporta joins para unir datos de diferentes mediciones o buckets.
* Ejemplo:

  <pre data-title="text" data-overflow="wrap"><code>ambiente = from(bucket: "mediciones_sensores")
      |> range(start: -1h)
      |> filter(fn: (r) => r._measurement == "ambiente")
      
  energia = from(bucket: "mediciones_sensores")
      |> range(start: -1h)
      |> filter(fn: (r) => r._measurement == "energia")
      
  join(
      tables: {amb: ambiente, ene: energia},
      on: ["_time", "sensor_id"]
  )
  </code></pre>
* Útil para análisis correlacionados entre variables.

***

### **7. Consultas Básicas y Avanzadas**

* **Básicas (InfluxQL):** `SELECT max(temperatura) FROM ambiente WHERE time > now() - 1h`
* **Avanzadas (Flux):**
  * Agregaciones, joins, conversiones y cálculos personalizados.
  * Ejemplo:

    <pre data-title="text" data-overflow="wrap"><code>from(bucket: "mediciones_sensores")
      |> range(start: -1d)
      |> filter(fn: (r) => r._measurement == "ambiente")
      |> aggregateWindow(every: 5m, fn: mean)
      |> yield(name: "promedio_5m")
    </code></pre>

***

### **8. Casos de Uso: Alarmas Activas en el Último Minuto**

* **InfluxQL:** `SELECT * FROM alarmas WHERE estado='activa' AND time > now() - 1m`
* **Flux:**

  <pre data-title="text" data-overflow="wrap"><code>from(bucket: "alarmas")
    |> range(start: -1m)
    |> filter(fn: (r) => r.estado == "activa")
  </code></pre>

***

### **9. Diagnóstico de Problemas en Queries de Datos Masivos**

* Utilizar filtros de tiempo y etiquetas específicas.
* En Flux, limitar el uso de joins y operaciones costosas sobre grandes volúmenes.
* Optimizar el uso de `aggregateWindow`, `limit` y `filter` para reducir la carga.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://darioaplicano.gitbook.io/influxdb2.x/sesion-3/guion-de-la-sesion/documentacion/repaso-sesion-2.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
