Pour des fonctionnalités similaires à celles d'Amazon Timestream pour, pensez à Amazon Timestream LiveAnalytics pour InfluxDB. Il permet une ingestion simplifiée des données et des temps de réponse aux requêtes à un chiffre en millisecondes pour des analyses en temps réel. Pour en savoir plus, cliquez ici.
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Interrogation de données depuis Timestream pour InfluxDB 3
Amazon Timestream pour InfluxDB 3 fournit plusieurs APIs requêtes et protocoles pour récupérer les données de vos séries chronologiques. La plate-forme prend en charge les langages de requête SQL et InfluxQL via les protocoles HTTP et Flight (gRPC), offrant ainsi une flexibilité adaptée aux différents cas d'utilisation et aux préférences des clients.
Vue d'ensemble des méthodes de requête
InfluxDB 3 prend en charge les méthodes de requête suivantes :
-
API HTTP v3 native : requêtes SQL et InfluxQL via des points de terminaison REST.
-
CLI influxdb3 — Interface de ligne de commande pour les requêtes interactives.
-
Protocole Flight+GRPC — Protocole binaire performant pour les bibliothèques clientes.
-
API de compatibilité v1 — requêtes InfluxQL héritées pour la rétrocompatibilité.
Utilisation de l'API de requête HTTP v3
L'API v3 fournit des points de terminaison dédiés pour les requêtes SQL et InfluxQL avec prise en charge des méthodes GET et POST.
Requêtes SQL (/api/v3/query_sql)
Exemple de requête 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'"
Exemple de requête POST (pour les requêtes complexes) :
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" }'
Requêtes InfluxQL () /api/v3/query_influxql
Pour les requêtes InfluxQL, procédez comme suit :
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"
Paramètres Query (Requête)
Vous pouvez utiliser les paramètres de requête suivants :
| Paramètre | Description | Obligatoire |
|---|---|---|
db
|
Nom de base de données | Oui |
q
|
Chaîne de requête (SQL ou InfluxQL) | Oui |
format
|
Format de réponse (json, jsonl, csv, pretty, parquet) | Non (par défaut : json) |
params
|
Paramètres pour les requêtes paramétrées | Non |
Utilisation de la CLI Influxdb3
L'interface de ligne de commande (CLI) InfluxDB 3 est invoquée avec la commande. influxdb3 Il fournit un moyen interactif d'interroger vos données en prenant en charge plusieurs formats de sortie.
Voici une requête de base :
influxdb3 query \ --host "your-cluster-endpoint:8086" \ --token "YOUR_TOKEN" \ --database "DATABASE_NAME" \ "SELECT * FROM home WHERE time >= now() - INTERVAL '1 day'"
Ce qui suit montre une requête avec différents formats de sortie :
# 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"
Les formats de sortie suivants sont pris en charge :
-
pretty (par défaut) — Format tabulaire lisible par l'homme.
-
json — Tableau JSON standard.
-
jsonl — Lignes JSON (adaptées au streaming).
-
csv — Valeurs séparées par des virgules.
-
parquet — Format colonnaire binaire (nécessite une sortie de fichier).
Utilisation de l'API de compatibilité v1
Pour les requêtes InfluxQL héritées, utilisez le /query point de terminaison :
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"
Options d'authentification pour l'API de requête HTTP v3
-
Jeton au porteur :
Authorization: Bearer TOKEN -
Authentification de base :
--user "any:TOKEN" -
Paramètre de requête :
?p=TOKEN
Formats de réponse pour l'API de requête HTTP v3
-
JSON (par défaut)
-
CSV (avec
Accept: application/csven-tête)
Exemples de requêtes SQL
Voici une requête de base :
-- 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
Les requêtes d'agrégation sont présentées ci-dessous :
-- 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
Les fonctionnalités SQL avancées sont présentées ci-dessous :
-- 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
Voici des exemples de requêtes 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
Voici comment interroger les tables système pour comprendre la structure de votre base de données et contrôler les performances :
-- 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
Bonnes pratiques en matière de performances des requêtes
-
Utiliser des filtres temporels : incluez toujours des filtres temporels pour limiter les données numérisées.
-
Tirez parti des index : concevez des requêtes pour utiliser efficacement les filtres de balises.
-
Choisissez le format de sortie approprié :
-
Utilisez jsonl pour diffuser des résultats volumineux.
-
Utilisez le parquet pour l'exportation et l'analyse des données.
-
Utilisez le format CSV pour la compatibilité avec les feuilles de calcul.
-
-
Optimisez les agrégations : utilisez DATE_BIN pour le regroupement basé sur le temps.
-
Utilisez des requêtes paramétrées : empêchez les attaques par injection et améliorez la réutilisation.
-
Surveiller les performances des requêtes : vérifiez si les requêtes sont lentes dans la table system.queries.
Support des requêtes dans la bibliothèque cliente
Les bibliothèques clientes InfluxDB 3 utilisent le protocole Flight+gRPC pour des performances optimales. Le code Python suivant en montre un exemple.
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" )
Comparez les fonctionnalités de requête SQL et InfluxQL
Le tableau suivant compare les fonctionnalités de requête SQL et InfluxQL :
| Fonctionnalité | SQL | InfluxQL |
|---|---|---|
| Jointures | Pris en charge | Non pris en charge |
| Fonctions de fenêtrage | Support complet | Limité |
| Sous-requêtes | Pris en charge | Non pris en charge |
| Fonctions temporelles |
DATE_BIN, INTERVAL
|
Regroupement d'time() |
| Requêtes paramétrées | Support natif | Non pris en charge |
| Combler les lacunes |
date_bin_gapfill()
|
Fonction fill() |
En comprenant ces fonctionnalités de requête et en choisissant la méthode appropriée à votre cas d'utilisation, vous pouvez récupérer et analyser efficacement vos données de séries chronologiques à partir de Timestream pour InfluxDB 3.
Avantages du SQL :
-
Implémentation SQL complète avec prise en charge des requêtes complexes.
-
Support pour les jointures, les unions et les fonctions de fenêtre.
-
Syntaxe familière pour les utilisateurs ayant une expérience SQL.
-
Capacités d'analyse plus étendues.
Avantages d'InfluxQL :
-
Conçu spécifiquement pour les données de séries chronologiques.
-
Syntaxe simplifiée pour les opérations de séries chronologiques courantes.
-
Rétrocompatibilité pour les utilisateurs migrant depuis InfluxDB v1.
-
Fonctions de séries chronologiques spécialisées.
Fonctionnalités d'optimisation des requêtes
InfluxDB 3 propose plusieurs fonctionnalités d'optimisation pour améliorer les performances des requêtes pour des cas d'utilisation spécifiques. Ces fonctionnalités tirent parti de la mise en cache en mémoire et de stratégies d'indexation personnalisées pour fournir des temps de réponse inférieurs à la milliseconde pour les modèles de données fréquemment consultés.
Cache de dernière valeur (LVC)
Le Last Value Cache (LVC) stocke les N valeurs les plus récentes pour les champs spécifiés en mémoire, ce qui permet des temps de réponse inférieurs à 10 ms pour les requêtes nécessitant les derniers points de données. Cette fonctionnalité est disponible dans les éditions Core et Enterprise.
Comment fonctionne LVC
Le LVC conserve une table en mémoire des valeurs les plus récentes pour chaque combinaison unique de colonnes clés (généralement des balises). Par exemple, avec les données des capteurs :
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)
Le cache stocke :
| chambre | mur | température | humidité | co | time |
|---|---|---|---|---|---|
| Cuisine | est | 22,7 | 36,5 | 26 | 2025-01-26T 20:00:00 Z |
| Cuisine | est | 22,7 | 36,0 | 9 | 2025-01-26T 17:00:00 Z |
| Cuisine | est | 22,7 | 36,2 | 3 | 2025-01-26T 15:00:00 Z |
| Cuisine | est | 22,7 | 36,1 | 0 | 2025-01-26T 10:00:00 Z |
| Salon | nord | 22,2 | 36,4 | 17 | 2025-01-26T 20:00:00 Z |
| ... | ... | ... | ... | ... | ... |
Création d'un LVC
Utilisez la commande suivante pour créer un LVC :
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
Interrogez le LVC
Utilisez la commande suivante pour interroger un LVC :
-- Query the last cached values SELECT * FROM last_cache('home', 'homeLastCache') -- Filter specific series SELECT * FROM last_cache('home', 'homeLastCache') WHERE room = 'Kitchen'
Bonnes pratiques en matière de PVC
-
Gérez la cardinalité : incluez uniquement les balises essentielles en tant que colonnes clés afin de minimiser l'utilisation de la mémoire.
-
Optimisation du nombre de valeurs : équilibre entre les besoins des requêtes et la consommation de mémoire.
-
Envisagez le TTL : définissez un paramètre approprié time-to-live pour les entrées du cache.
-
Mémoire du moniteur : taille du cache = (key_column_cardinality × count × value_columns).
Cache à valeurs distinctes (DVC)
Le Distinct Value Cache (DVC) conserve des valeurs uniques pour des colonnes spécifiques en mémoire, accélérant ainsi les requêtes de métadonnées à des temps de réponse inférieurs à 30 ms. Disponible dans les éditions Core et Enterprise.
Comment fonctionne le DVC
Le DVC stocke toutes les combinaisons uniques de valeurs pour des colonnes spécifiées, ce qui est parfait pour les requêtes qui doivent répertorier les valeurs de balises ou les métadonnées disponibles.
Exemple de cache pour les données de localisation :
| pays | comté | ville |
|---|---|---|
| Autriche | Salzbourg | Salzbourg |
| Autriche | Vienne | Vienne |
| Belgique | Anvers | Anvers |
| Belgique | Flandre-Occidentale | Bruges |
| République tchèque | Prague | Prague |
Création d'un DVC
Utilisez la commande suivante pour créer 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
Interrogez le DVC
Utilisez la commande suivante pour interroger 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')
Meilleures pratiques en matière de DVC
-
Définissez les limites de cardinalité : définissez le maximum de combinaisons de valeurs uniques pour contrôler la mémoire.
-
Configurer l'âge maximum : supprimez automatiquement les valeurs périmées.
-
Mettre en cache les colonnes stratégiques : concentrez-vous sur les colonnes fréquemment utilisées dans les requêtes de métadonnées.
-
Taille du cache du moniteur : une cardinalité plus élevée signifie que davantage de mémoire est requise.
Les index de fichiers ne sont disponibles que dans Enterprise
Disponible uniquement dans l'édition Enterprise. Les index de fichiers permettent de personnaliser la manière dont les données sont indexées dans le stockage, ce qui améliore considérablement les performances des requêtes portant sur une seule série.
Indexation par défaut ou personnalisée
Indexation par défaut : InfluxDB indexe toutes les balises plus le temps.
Indexation personnalisée : indexez uniquement sur les colonnes pertinentes pour vos requêtes.
Exemple d'optimisation :
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)
Ce qui suit montre comment créer un index de fichiers personnalisé
influxdb3 create file_index \ --database DATABASE_NAME \ --token YOUR_TOKEN \ --table wind_data \ country,state_province,city
Voici comment supprimer un index de fichiers :
influxdb3 delete file_index \ --database DATABASE_NAME \ --token YOUR_TOKEN \ --table wind_data
Considérations relatives aux index de fichiers
-
Compaction requise : les index sont créés lors du compactage des données (gen2+).
-
Colonnes de chaîne uniquement : peuvent indexer à la fois les balises et les champs de chaîne.
-
Analyse du modèle de requête : analysez votre charge de travail avant de créer des index personnalisés.
-
Optimisation pour une seule série : particulièrement utile pour les requêtes ciblant des séries spécifiques.
Gestion des informations du cache
Affichez les configurations du cache et les statistiques à l'aide des tables système :
-- 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
Stratégie d'optimisation des performances
Choisissez les bonnes fonctionnalités d'optimisation en fonction de vos modèles de requêtes :
| Modèle de requête | Fonctionnalité recommandée | Performances attendues |
|---|---|---|
| Dernières valeurs par série | Cache de dernière valeur | <10 ms |
| Valeurs de balise disponibles | Cache à valeur distincte | <30 ms |
| Requêtes portant sur une seule série | Index de fichiers (Enterprise) | Amélioration significative |
| Agrégations par plages temporelles | Indices standard | Performances de référence |
Considérations relatives à la mémoire et aux ressources
Formule de mémoire cache :
-
LVC : mémoire = key_cardinality × value_count × value_columns × data_size
-
DVC : mémoire = combinaisons distinctes × nombre de colonnes × taille des données
Bonnes pratiques :
-
Commencez avec de petits caches et surveillez l'utilisation de la mémoire
-
Utiliser les paramètres TTL pour limiter la croissance du cache
-
Ne mettez en cache que les données fréquemment demandées
-
Surveillez les taux de réussite du cache via les tables système
-
Pour les entreprises : combinez les caches avec des index de fichiers personnalisés pour des performances optimales
En tirant parti de ces fonctionnalités d'optimisation de manière appropriée, vous pouvez améliorer considérablement les performances pour des modèles de requêtes spécifiques tout en gérant efficacement la consommation de ressources.