Interrogation de données depuis Timestream pour InfluxDB 3 - Amazon Timestream

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/csv en-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.