# Lenguaje de consultas en InfluxDB

Uno de los componentes clave de InfluxDB es su lenguaje de consultas, que permite extraer, transformar y analizar datos de manera eficiente. En InfluxDB 2.x, el lenguaje principal es **Flux**, aunque también se puede utilizar **InfluxQL** para compatibilidad y ciertos casos de uso.

## **¿Qué es InfluxQL?**

InfluxQL es un lenguaje de consulta similar a SQL, diseñado específicamente para trabajar con datos de series temporales en InfluxDB. Su sintaxis resulta familiar para usuarios con experiencia en SQL, permitiendo seleccionar, filtrar, agregar y transformar datos temporales de manera eficiente.

## **¿Qué es Flux?**

Flux es un lenguaje de scripting funcional creado por InfluxData para abordar limitaciones de InfluxQL y ofrecer capacidades analíticas avanzadas. Es el motor de consulta principal en InfluxDB 2.x y permite realizar transformaciones complejas, trabajar con múltiples fuentes de datos y crear funciones personalizadas.

## **Comparación General** <a href="#undefined" id="undefined"></a>

| Característica                | InfluxQL                          | Flux                                                  |
| ----------------------------- | --------------------------------- | ----------------------------------------------------- |
| Sintaxis                      | Similar a SQL                     | Funcional, basada en pipes \|>                        |
| Versión principal InfluxDB    | 1.x y 3.x                         | 2.x (principal), 1.8+ (opcional)                      |
| Complejidad de aprendizaje    | Baja (familiar para usuarios SQL) | Media/Alta (requiere conocer paradigma funcional)     |
| Capacidades analíticas        | Limitadas a operaciones básicas   | Avanzadas: joins, windowing, funciones personalizadas |
| Fuentes de datos              | Solo InfluxDB                     | Múltiples (CSV, PostgreSQL, MySQL, BigTable, etc.)    |
| Agrupamiento                  | Solo por tags o por tiempo        | Por cualquier columna                                 |
| Ventanas temporales avanzadas | No (solo intervalos fijos)        | Sí (meses, años, rolling windows)                     |
| Integración con SCADA         | Sí, pero limitada a InfluxDB      | Sí, y permite enriquecer datos con fuentes externas   |

### **Sintaxis y Paradigma** <a href="#undefined" id="undefined"></a>

#### **InfluxQL**

* Inspirado en SQL.
* Ejemplo de consulta:

  <pre class="language-sql" data-title="sql" data-overflow="wrap"><code class="lang-sql">SELECT mean("value") FROM "mediciones_sensores" WHERE time > now() - 24h GROUP BY time(1h)
  </code></pre>
* Fácil de aprender para quienes conocen SQL.
* Orientado a operaciones directas sobre datos temporales.

#### **Flux**

* Basado en programación funcional y uso de pipes.
* Ejemplo de consulta:

  <pre data-title="text" data-overflow="wrap"><code>from(bucket: "example-bucket")
    |> range(start: -24h)
    |> filter(fn: (r) => r._measurement == "mediciones_sensores")
    |> aggregateWindow(every: 1h, fn: mean)
  </code></pre>
* Permite encadenar transformaciones y aplicar funciones complejas.

### **Capacidades Analíticas y de Transformación** <a href="#undefined" id="undefined"></a>

#### **InfluxQL**

* Soporta agregaciones básicas (mean, sum, count, etc.).
* Permite filtrado por tiempo y etiquetas.
* No soporta joins entre series ni funciones personalizadas.
* Limitado a la estructura interna de InfluxDB.

#### **Flux**

* Permite agregaciones avanzadas, windowing flexible (incluyendo meses y años), joins entre series y entre diferentes fuentes de datos.
* Soporta creación de funciones definidas por el usuario.
* Puede manipular y transformar datos de forma mucho más sofisticada.

### **Fuentes de Datos y Enriquecimiento** <a href="#undefined" id="undefined"></a>

* **InfluxQL** solo puede consultar datos almacenados en InfluxDB.
* **Flux** puede consultar y combinar datos de InfluxDB, archivos CSV, bases de datos SQL externas (PostgreSQL, MySQL, etc.), Google BigTable y más, lo que permite enriquecer los resultados de consulta con información externa.

### **Agrupamiento y Ventanas de Tiempo** <a href="#undefined" id="undefined"></a>

* **InfluxQL** solo permite agrupar por etiquetas (tags) o por intervalos de tiempo fijos (por ejemplo, cada 10 minutos).
* **Flux** permite agrupar por cualquier columna, incluso por valores de field, y soporta ventanas de tiempo dinámicas como meses (`1mo`) y años (`1y`), lo que es imposible en InfluxQL.

### **Ejemplo Comparativo de Consultas** <a href="#undefined" id="undefined"></a>

#### **Calcular la media de temperatura en las últimas 24 horas**

{% tabs %}
{% tab title="InfluxQL" %}
{% code title="sql" overflow="wrap" %}

```sql
SELECT mean("value") FROM "temperature" WHERE time > now() - 24h GROUP BY time(1h)
```

{% endcode %}
{% endtab %}

{% tab title="Flux" %}
{% code title="text" overflow="wrap" %}

```
from(bucket: "example-bucket")
  |> range(start: -24h)
  |> filter(fn: (r) => r._measurement == "temperature")
  |> aggregateWindow(every: 1h, fn: mean)
```

{% endcode %}
{% endtab %}
{% endtabs %}

## **¿Cuándo usar cada uno?** <a href="#undefined" id="undefined"></a>

* **InfluxQL**: Si necesitas rapidez, simplicidad y solo requieres consultar datos dentro de InfluxDB.
* **Flux**: Si necesitas análisis avanzados, combinar datos de varias fuentes, crear funciones personalizadas o trabajar con ventanas de tiempo complejas.


---

# 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-2/guion-de-la-sesion/documentacion/lenguaje-de-consultas-en-influxdb.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.
