# InfluxQL

InfluxQL está optimizado para las particularidades de los datos temporales: su estructura, operaciones y funciones están orientadas a la gestión eficiente de datos con marca de tiempo, como los que se generan en entornos industriales, IoT y SCADA.

## **Estructura de Datos en InfluxDB** <a href="#undefined" id="undefined"></a>

Antes de consultar, es fundamental entender cómo se organizan los datos:

* **Measurement**: Equivalente a una tabla.
* **Tags**: Etiquetas indexadas para búsquedas rápidas.
* **Fields**: Valores medidos, no indexados, pueden ser numéricos, string, booleanos, datetime
* **Time**: Marca de tiempo obligatoria para cada punto de datos.

> **Ejemplo de punto de datos:**
>
> {% code title="text" overflow="wrap" %}
>
> ```
> temperature,location=oficina,device=sensor1 value=23.5 1622470420000000000
> ```
>
> {% endcode %}

## **InfluxQL vs SQL: Similitudes y Diferencias** <a href="#undefined" id="undefined"></a>

| Característica       | InfluxQL                                    | SQL estándar               |
| -------------------- | ------------------------------------------- | -------------------------- |
| Inspiración          | Sintaxis similar a SQL                      | SQL tradicional            |
| Enfoque              | Series temporales                           | Datos relacionales         |
| Índice principal     | Siempre el tiempo                           | Definido por el usuario    |
| Funciones agregadas  | 16 funciones agregadas                      | 41 funciones agregadas     |
| Funciones de ventana | No soportadas                               | Sí, ampliamente soportadas |
| JOINS                | No soportados                               | Sí                         |
| UNIONS               | No soportados                               | Sí                         |
| Funciones de fecha   | 3 funciones                                 | 22 funciones               |
| Flexibilidad         | Limitada a operaciones de series temporales | Muy flexible               |
| Uso en InfluxDB      | Todas las versiones OSS y Cloud             | Solo en InfluxDB 3.0 Cloud |

InfluxQL es más limitado que SQL en cuanto a funciones avanzadas (como joins, window functions o manipulación de arrays), pero es más directo para consultas típicas de series temporales. SQL, por su parte, ofrece mucha más potencia y flexibilidad, pero puede ser excesivo o innecesario para casos simples de series temporales.

## **InfluxQL: El Lenguaje SQL-Like** <a href="#undefined" id="undefined"></a>

InfluxQL es conocido como un lenguaje "SQL-like" porque su sintaxis y estructura están inspiradas en SQL

### **Sintaxis Básica**

* **SELECT**: Selección de campos.
* **WHERE**: Filtros por tiempo y etiquetas.
* **GROUP BY**: Agrupaciones por tiempo o etiquetas.
* **ORDER BY, LIMIT**: Orden (Limitado al campo time) y límites de resultados.

#### **Ejemplo:**

{% code title="sql" overflow="wrap" %}

```sql
SELECT mean(value) FROM temperature
WHERE time >= now() - 1h AND location = 'oficina'
GROUP BY time(10m)
```

{% endcode %}

### **Funciones Comunes**

* `mean()`, `sum()`, `min()`, `max()`, `count()`
* `derivative()`, `difference()`
* `fill(previous)` para rellenar huecos en series temporales

### **Consultas Continuas (Continuous Queries)**

Permiten ejecutar consultas automáticamente a intervalos definidos, muy útiles para downsampling y agregaciones periódicas.

### **Exploración de Esquema y Metadatos** <a href="#undefined" id="undefined"></a>

InfluxQL permite explorar la estructura de la base de datos:

* `SHOW MEASUREMENTS` — Lista todas las measurements.
* `SHOW TAG KEYS FROM <measurement>` — Muestra las etiquetas disponibles.
* `SHOW FIELD KEYS FROM <measurement>` — Muestra los campos medidos.
* `SHOW SERIES` — Lista las series únicas (combinación de tags y measurement).

### **Gestión de Bases de Datos y Políticas de Retención** <a href="#undefined" id="undefined"></a>

* `CREATE DATABASE <nombre>`
* `DROP DATABASE <nombre>`
* `CREATE RETENTION POLICY <nombre> ON <db> DURATION 30d REPLICATION 1 DEFAULT`
* `DROP RETENTION POLICY <nombre> ON <db>`

Las políticas de retención determinan cuánto tiempo se conservan los datos, algo fundamental en aplicaciones industriales y SCADA.

## **Ejemplo Práctico: Consulta de Alarmas Activas** <a href="#undefined" id="undefined"></a>

Supón que tienes una measurement llamada `alarmas` con tags `zona` y `tipo` y un field `estado`. Para consultar las alarmas activas en la última hora:

{% code title="sql" overflow="wrap" fullWidth="false" %}

```sql
SELECT * FROM alarmas WHERE estado = 'activa' AND time > now() - 1h
```

{% endcode %}

Para obtener el conteo de alarmas activas por zona en el último día:

{% code title="sql" overflow="wrap" %}

```sql
SELECT COUNT(estado) FROM alarmas WHERE estado = 'activa' AND time > now() - 1d GROUP BY zona
```

{% endcode %}


---

# 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/influxql.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.
