Consulta de datos de Timestream para InfluxDB 3 - Amazon Timestream

Para obtener capacidades similares a las de Amazon Timestream, considere Amazon Timestream LiveAnalytics para InfluxDB. Ofrece una ingesta de datos simplificada y tiempos de respuesta a las consultas en milisegundos de un solo dígito para realizar análisis en tiempo real. Obtenga más información aquí.

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.

Consulta de datos de Timestream para InfluxDB 3

Amazon Timestream para InfluxDB 3 proporciona varias API y protocolos de consulta para recuperar los datos de serie temporal. La plataforma admite los lenguajes de consulta SQL e InfluxQL a través de los protocolos HTTP y Flight (gRPC), lo que ofrece flexibilidad para diferentes casos de uso y preferencias del cliente.

Descripción general de los métodos de consulta

InfluxDB 3 admite los siguientes métodos de consulta:

  • API de HTTP nativa de la versión 3: consultas SQL e InfluxQL a través de puntos de conexión REST.

  • CLI de influxdb3: interfaz de línea de comandos para consultas interactivas.

  • Protocolo Flight+gRPC: protocolo binario de alto rendimiento para bibliotecas del cliente.

  • API de compatibilidad v1: consultas antiguas de InfluxQL para obtener compatibilidad con versiones anteriores.

Uso de la API de consultas HTTP de la versión 3

La versión 3 de la API proporciona puntos finales dedicados para las consultas de SQL e InfluxQL y admite los métodos GET y POST.

Consultas de SQL (/api/v3/query_sql)

Ejemplo de solicitud GET:

curl --get "https://your-cluster-endpoint:8086/api/v3/query_sql" \ --header "Authorization: Bearer YOUR_TOKEN" \ --data-urlencode "db=DATABASE_NAME" \ --data-urlencode "q=SELECT * FROM home WHERE time >= now() - INTERVAL '1 day'"

Ejemplo de solicitud POST (para consultas complejas):

curl "https://your-cluster-endpoint:8086/api/v3/query_sql" \ --header "Authorization: Bearer YOUR_TOKEN" \ --json '{ "db": "DATABASE_NAME", "q": "SELECT * FROM home WHERE room = '\''Kitchen'\'' AND temp > 20", "format": "jsonl" }'

Consultas InfluxQL (/api/v3/query_influxql)

Para las consultas de InfluxQL, haga lo siguiente:

curl --get "https://your-cluster-endpoint:8086/api/v3/query_influxql" \ --header "Authorization: Bearer YOUR_TOKEN" \ --data-urlencode "db=DATABASE_NAME" \ --data-urlencode "q=SELECT mean(temp) FROM home WHERE time >= now() - 1d GROUP BY room"

Parámetros de consulta

Puede utilizar los siguientes parámetros de consultas:

Parámetro Descripción Obligatorio
db Nombre de base de datos
q Cadena de consultas (SQL o InfluxQL)
format Formato de respuestas (json, jsonl, csv, pretty, parquet) No (predeterminado: json)
params Parámetros para consultas parametrizadas No

Uso de la CLI de Influxdb3

La interfaz de la línea de comandos (CLI) de InfluxDB 3 se invoca con el comando influxdb3. Proporciona una forma interactiva de consultar sus datos con soporte para múltiples formatos de salida.

A continuación, se presenta una consulta básica:

influxdb3 query \ --host "your-cluster-endpoint:8086" \ --token "YOUR_TOKEN" \ --database "DATABASE_NAME" \ "SELECT * FROM home WHERE time >= now() - INTERVAL '1 day'"

A continuación, se muestra una consulta con diferentes formatos de salida:

# JSON output influxdb3 query \ --database "DATABASE_NAME" \ --format json \ "SELECT * FROM home LIMIT 10" # CSV output influxdb3 query \ --database "DATABASE_NAME" \ --format csv \ "SELECT * FROM home LIMIT 10" # Parquet file output influxdb3 query \ --database "DATABASE_NAME" \ --format parquet \ --output results.parquet \ "SELECT * FROM home"

Se admiten los siguientes formatos de salida:

  • Claridad (predeterminado): formato tabular legible por humanos.

  • json: matriz JSON estándar.

  • jsonl: líneas JSON (aptas para transmisión).

  • csv: valores separados por comas.

  • parquet: formato binario en columnas (requiere la salida del archivo).

Uso de la API de compatibilidad con la versión 1

Para las consultas antiguas de InfluxQL, utilice el punto de conexión /query:

curl --get "https://your-cluster-endpoint:8086/query" \ --header "Authorization: Bearer YOUR_TOKEN" \ --data-urlencode "db=DATABASE_NAME" \ --data-urlencode "q=SELECT * FROM home" \ --data-urlencode "epoch=ms"

Opciones de autenticación para la API de consulta HTTP de la versión 3

  • Token de portador: Authorization: Bearer TOKEN

  • Autenticación básica: --user "any:TOKEN"

  • Parámetro de consulta: ?p=TOKEN

Formatos de respuesta para la API de consulta HTTP de la versión 3

  • JSON (predeterminado)

  • CSV (con encabezado Accept: application/csv)

Ejemplos de consultas SQL

A continuación, se presenta una consulta básica:

-- Select specific fields with time filter SELECT temp, humidity, room FROM home WHERE time >= now() - INTERVAL '7 days' AND room = 'Kitchen' ORDER BY time DESC -- Show all tables in database SHOW TABLES -- Show columns in a table SHOW COLUMNS FROM home

A continuación, se muestran las consultas de agregación:

-- Aggregate by tags SELECT room, AVG(temp) as avg_temp, MAX(humidity) as max_humidity FROM home WHERE time >= now() - INTERVAL '24 hours' GROUP BY room -- Time-based aggregation using DATE_BIN SELECT DATE_BIN(INTERVAL '1 hour', time) as time, AVG(temp) as avg_temp, COUNT(*) as reading_count FROM home GROUP BY 1 ORDER BY time DESC

A continuación, se muestran las características avanzadas de SQL:

-- Parameterized queries (via API) SELECT * FROM home WHERE room = $room AND temp > $min_temp AND time >= $start_time -- Gap filling with interpolation SELECT date_bin_gapfill(INTERVAL '5 minutes', time) as time, room, interpolate(avg(temp)) as temp FROM home WHERE time >= '2025-01-01T00:00:00Z' AND time <= '2025-01-01T12:00:00Z' GROUP BY 1, room -- Type casting SELECT temp::INTEGER as temp_int, CAST(humidity AS VARCHAR) as humidity_str FROM home

A continuación, se muestran ejemplos de consultas de InfluxQL:

-- Basic query with time filter SELECT * FROM home WHERE time >= now() - 1d -- Aggregation with GROUP BY time SELECT MEAN(temp), MAX(humidity) FROM home WHERE time >= now() - 7d GROUP BY time(1h), room -- Using selector functions SELECT FIRST(temp), LAST(temp) FROM home WHERE time >= now() - 1h GROUP BY room

A continuación, se muestra cómo consultar las tablas del sistema para comprender la estructura de la base de datos y supervisar el rendimiento:

-- View all tables with schema information SELECT * FROM information_schema.tables -- View column details for a specific table SELECT * FROM information_schema.columns WHERE table_name = 'home' -- Monitor recent queries SELECT * FROM system.queries ORDER BY issue_time DESC LIMIT 10 -- Check cache configurations SELECT * FROM system.last_caches SELECT * FROM system.distinct_caches

Prácticas recomendadas de rendimiento de consultas

  • Utilice filtros de tiempo: incluya siempre filtros de intervalo de tiempo para limitar los datos escaneados.

  • Aproveche los índices: diseñe consultas para utilizar los filtros de etiquetas de forma eficaz.

  • Elija el formato de salida adecuado:

    • Utilice jsonl para transmitir resultados de gran tamaño.

    • Utilice parquet para la exportación y el análisis de datos.

    • Utilice csv para la compatibilidad con las hojas de cálculo.

  • Optimice las agregaciones: use DATE_BIN para la agrupación basada en el tiempo.

  • Utilice consultas parametrizadas: evite los ataques de inyección y mejore la reutilización.

  • Supervise el rendimiento de las consultas: consulte la tabla system.queries para ver si las consultas son lentas.

Soporte para consultas en la biblioteca del cliente

Las bibliotecas cliente de InfluxDB 3 utilizan el protocolo Flight+gRPC para un rendimiento óptimo. El siguiente código de Python muestra un ejemplo de esto.

from influxdb3 import InfluxDBClient3 client = InfluxDBClient3( host="your-cluster-endpoint:8086", token="YOUR_TOKEN", database="DATABASE_NAME" ) # SQL query sql_result = client.query("SELECT * FROM home WHERE room = 'Kitchen'") # InfluxQL query influxql_result = client.query( "SELECT MEAN(temp) FROM home WHERE time >= now() - 1h GROUP BY room", language="influxql" )

Compare las capacidades de consulta de SQL e InfluxQL

En la siguiente tabla, se comparan las capacidades de consulta de SQL e InfluxQL:

Característica SQL InfluxQL
Uniones Compatible No admitido
Funciones de ventana Soporte pleno Limitado
Subconsultas Compatible No admitido
Funciones de tiempo DATE_BIN, INTERVAL time()Agrupación de
Consultas parametrizadas Soporte nativo No admitido
Relleno de discontinuidades date_bin_gapfill() fill()Función de

Al comprender estas capacidades de consulta y elegir el método adecuado para su caso de uso, podrá recuperar y analizar de manera eficiente sus datos de serie temporal de Timestream para InfluxDB 3.

Ventajas de SQL:

  • Implementación de SQL con todas las funciones y soporte para consultas complejas.

  • Soporte para uniones, sindicatos y funciones de ventanilla.

  • Sintaxis familiar para usuarios con experiencia en SQL.

  • Capacidades analíticas más amplias.

Ventajas de InfluxQL:

  • Diseñado específicamente para datos de serie temporal.

  • Sintaxis más sencilla para operaciones de serie temporal habituales.

  • Compatibilidad con versiones anteriores para los usuarios que migran desde la versión 1 de InfluxDB.

  • Funciones de serie temporal especializadas.

Características de optimización de las consultas

InfluxDB 3 ofrece varias funciones de optimización para mejorar el rendimiento de las consultas en casos de uso específicos. Estas funciones aprovechan el almacenamiento en caché en memoria y las estrategias de indexación personalizadas para ofrecer tiempos de respuesta inferiores a un milisegundo para los patrones de datos a los que se accede con frecuencia.

Caché de último valor (LVC)

La caché de último valor (LVC) almacena los valores N más recientes de campos específicos en la memoria, lo que permite tiempos de respuesta inferiores a 10 ms para las consultas que necesitan los puntos de datos más recientes. Esta característica está disponible en las ediciones Core y Enterprise.

Cómo funciona LVC

El LVC mantiene una tabla en memoria con los valores más recientes para cada combinación única de columnas clave (generalmente etiquetas). Por ejemplo, con los datos de los sensores:

Table: home ├── Tags: room, wall └── Fields: temp, humidity, co LVC Configuration: - Key columns: room, wall - Value columns: temp, humidity, co - Count: 4 (last 4 values)

La memoria caché almacena:

sala pared temp humedad co hora
Cocina Este 22,7 36,5 26 2025-01-26T20:00:00Z
Cocina Este 22,7 36,0 9 2025-01-26T17:00:00Z
Cocina Este 22,7 36,2 3 2025-01-26T15:00:00Z
Cocina Este 22,7 36,1 0 2025-01-26T10:00:00Z
Sala de estar Norte 22,2 36,4 17 2025-01-26T20:00:00Z
... ... ... ... ... ...

Cree un LCV

Utilice el siguiente comando para crear un LCV:

influxdb3 create last_cache \ --database DATABASE_NAME \ --token YOUR_TOKEN \ --table home \ --key-columns room,wall \ --value-columns temp,hum,co \ --count 5 \ --ttl 30mins \ homeLastCache

Consulte el LVC

Utilice el siguiente comando para consultar un LCV:

-- Query the last cached values SELECT * FROM last_cache('home', 'homeLastCache') -- Filter specific series SELECT * FROM last_cache('home', 'homeLastCache') WHERE room = 'Kitchen'

Prácticas recomendadas de LVC

  • Administre la cardinalidad: incluya únicamente las etiquetas esenciales como columnas clave para minimizar el uso de memoria.

  • Optimice el recuento de valores: equilibre las necesidades de consulta y el consumo de memoria.

  • Considere el TTL: establezca el tiempo de vida adecuado para las entradas de caché.

  • Memoria del supervisor: tamaño de la caché = (key_column_cardinality × count × value_columns).

Caché de valores distintos (DVC)

La caché de valores distintos (DVC) mantiene valores únicos para columnas específicas de la memoria, lo que acelera las consultas de metadatos hasta tiempos de respuesta inferiores a 30 ms. Disponible en las ediciones Core y Enterprise.

Cómo funciona DVC

El DVC almacena todas las combinaciones únicas de valores para columnas específicas, lo que es perfecto para las consultas que necesitan enumerar los valores de etiquetas o los metadatos disponibles.

Ejemplo de caché para datos de ubicación:

país condado ciudad
Austria Salzburgo Salzburgo
Austria Viena Viena
Bélgica Amberes Amberes
Bélgica Flandes occidental Brujas
República Checa Praga Praga

Creación de un DVC

Utilice el siguiente comando para crear un DVC:

influxdb3 create distinct_cache \ --database DATABASE_NAME \ --token YOUR_TOKEN \ --table wind_data \ --columns country,county,city \ --max-cardinality 10000 \ --max-age 24h \ windDistinctCache

Consulte el DVC

Utilice el siguiente comando para consultar un DVC:

-- Get all distinct values SELECT * FROM distinct_cache('wind_data', 'windDistinctCache') -- Get distinct countries SELECT DISTINCT country FROM distinct_cache('wind_data', 'windDistinctCache')

Prácticas recomendadas de DVC

  • Defina los límites de cardinalidad: defina las combinaciones máximas de valores únicos para controlar la memoria.

  • Configure la edad máxima: elimine los valores obsoletos de forma automática.

  • Almacene en caché las columnas estratégicas: céntrese en las columnas que se utilizan con frecuencia en las consultas de metadatos.

  • Tamaño de la memoria caché del supervisor: una mayor cardinalidad significa que se necesita más memoria.

Los índices de archivos solo están disponibles en Enterprise

Disponible solo en la edición Enterprise. Los índices de archivos permiten personalizar la forma en que se indexan los datos en el almacenamiento, lo que mejora de forma considerable el rendimiento de las consultas de una sola serie.

Indexación predeterminada frente a indexación personalizada

Indexación predeterminada: InfluxDB indexa todas las etiquetas más el tiempo. 

Indexación personalizada: indexe solo las columnas relevantes para sus consultas.

Ejemplo de optimización:

Schema columns: country, state_province, county, city, postal_code Query patterns: Always filter by country, state_province, city Custom index: time, country, state_province, city (skip county, postal_code)

El siguiente ejemplo muestra cómo crear un índice de archivos personalizado

influxdb3 create file_index \ --database DATABASE_NAME \ --token YOUR_TOKEN \ --table wind_data \ country,state_province,city

En el siguiente ejemplo, se muestra cómo se elimina un índice de archivos:

influxdb3 delete file_index \ --database DATABASE_NAME \ --token YOUR_TOKEN \ --table wind_data

Consideraciones sobre el índice de archivos

  • Se requiere compactación: los índices se crean durante la compactación de datos (gen2+).

  • Solo columnas de cadenas: puede indexar tanto etiquetas como campos de cadenas.

  • Análisis de patrones de consulta: analice su carga de trabajo antes de crear índices personalizados.

  • Optimización de series únicas: más beneficiosa para consultas dirigidas a series específicas.

Administración de información de la caché

Vea las configuraciones y las estadísticas de la caché mediante tablas del sistema:

-- View Last Value Caches SELECT * FROM system.last_caches -- View Distinct Value Caches SELECT * FROM system.distinct_caches -- Check cache memory usage SELECT cache_name, table_name, key_columns, value_count, memory_size_bytes FROM system.last_caches

Estrategia de optimización de rendimiento

Elija las funciones de optimización adecuadas en función de sus patrones de consulta:

Patrón de consulta Características recomendadas Rendimiento previsto
Últimos valores por serie Caché de último valor <10 ms
Valores de etiqueta disponibles: Caché de valores distintos <30 ms
Consultas de una sola serie Índices de archivos (Enterprise) Mejora importante
Agregaciones por intervalos de tiempo Índices estándar Rendimiento de referencia

Consideraciones sobre la memoria y los recursos

Fórmula de memoria caché:

  • LVC: memoria = key_cardinality × value_count × value_columns × data_size

  • DVC: memoria = distinct_combinations × column_count × data_size

Prácticas recomendadas de:

  • Comience con cachés pequeñas y supervise el uso de la memoria

  • Usa la configuración TTL para limitar el crecimiento de la caché

  • Almacene en caché solo los datos consultados con frecuencia

  • Supervise las tasas de aciertos de la caché mediante tablas del sistema

  • Para Enterprise: combine las cachés con índices de archivos personalizados para obtener un rendimiento óptimo

Al aprovechar estas funciones de optimización de manera adecuada, puede lograr mejoras significativas en el rendimiento para patrones de consulta específicos y, al mismo tiempo, administrar el consumo de recursos de manera eficaz.