Interrogazione dei dati da Timestream per InfluxDB 3 - Amazon Timestream

Per funzionalità simili a Amazon Timestream for, prendi in considerazione Amazon Timestream LiveAnalytics per InfluxDB. Offre un'acquisizione semplificata dei dati e tempi di risposta alle query di una sola cifra di millisecondi per analisi in tempo reale. Scopri di più qui.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Interrogazione dei dati da Timestream per InfluxDB 3

Amazon Timestream per InfluxDB 3 fornisce più APIs query e protocolli per recuperare i dati delle serie temporali. La piattaforma supporta i linguaggi di query SQL e InfluxQL tramite i protocolli HTTP e Flight (gRPC), offrendo flessibilità per diversi casi d'uso e preferenze dei client.

Panoramica dei metodi di interrogazione

InfluxDB 3 supporta i seguenti metodi di interrogazione:

  • API HTTP v3 nativa: query SQL e InfluxQL tramite endpoint REST.

  • influxdb3 CLI — Interfaccia a riga di comando per query interattive.

  • Protocollo Flight+GRPC — Protocollo binario ad alte prestazioni per le librerie client.

  • API di compatibilità v1: query InfluxQL precedenti per la compatibilità con le versioni precedenti.

Utilizzo dell'API di query HTTP v3

L'API v3 fornisce endpoint dedicati per le query SQL e InfluxQL con supporto per i metodi GET e POST.

/api/v3/query_sqlInterrogazioni SQL ()

Esempio di richiesta 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'"

Esempio di richiesta POST (per query complesse):

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" }'

Query InfluxQL () /api/v3/query_influxql

Per le query InfluxQL, procedi come segue:

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"

Parametri di query

È possibile utilizzare i seguenti parametri di interrogazione:

Parameter Descrizione Campo obbligatorio
db Nome del database
q Stringa di query (SQL o InfluxQL)
format Formato di risposta (json, jsonl, csv, pretty, parquet) No (impostazione predefinita: json)
params Parametri per le interrogazioni con parametri No

Utilizzo della CLI Influxdb3

L'interfaccia a riga di comando (CLI) di InfluxDB 3 viene richiamata con il comando. influxdb3 Fornisce un modo interattivo per interrogare i dati con il supporto per più formati di output.

Di seguito viene mostrata una query di base:

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

Di seguito viene mostrata un'interrogazione con diversi formati di output:

# 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"

Sono supportati i seguenti formati di output:

  • pretty (impostazione predefinita) — Formato tabulare leggibile dall'uomo.

  • json — Array JSON standard.

  • jsonl — JSON Lines (ottimizzato per lo streaming).

  • csv — Valori separati da virgole.

  • parquet — Formato binario colonnare (richiede l'output del file).

Utilizzo dell'API di compatibilità v1

Per le query InfluxQL precedenti, usa l'endpoint: /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"

Opzioni di autenticazione per l'API HTTP Query v3

  • Token al portatore: Authorization: Bearer TOKEN

  • Autenticazione di base: --user "any:TOKEN"

  • Parametro di interrogazione: ?p=TOKEN

Formati di risposta per l'API HTTP Query v3

  • JSON (impostazione predefinita)

  • CSV (con Accept: application/csv intestazione)

Esempi di query SQL

Di seguito viene illustrata una query di 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

Di seguito vengono illustrate le interrogazioni di aggregazione:

-- 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

Di seguito vengono illustrate le funzionalità SQL avanzate:

-- 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

Di seguito sono riportati esempi di query 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

Di seguito viene illustrato come interrogare le tabelle di sistema per comprendere la struttura del database e monitorare le prestazioni:

-- 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

Procedure ottimali per le prestazioni delle query

  • Usa filtri temporali: includi sempre filtri per intervallo di tempo per limitare i dati scansionati.

  • Sfrutta gli indici: progetta le query per utilizzare i filtri dei tag in modo efficace.

  • Scegli il formato di output appropriato:

    • Usa jsonl per lo streaming di risultati di grandi dimensioni.

    • Usa parquet per l'esportazione e l'analisi dei dati.

    • Usa csv per la compatibilità con i fogli di calcolo.

  • Ottimizza le aggregazioni: utilizza DATE_BIN per il raggruppamento basato sul tempo.

  • Usa le interrogazioni con parametri: previene gli attacchi di iniezione e migliora la riusabilità.

  • Monitora le prestazioni delle query: controlla la tabella system.queries per le query lente.

Supporto per le interrogazioni nella libreria client

Le librerie client InfluxDB 3 utilizzano il protocollo Flight+gRPC per prestazioni ottimali. Il seguente codice Python ne mostra un esempio.

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" )

Confronta le funzionalità di interrogazione SQL e InfluxQL

La tabella seguente confronta le funzionalità di query SQL e InfluxQL:

Funzionalità SQL InfluxQL
Si unisce Supportato Non supportato
Funzioni finestra Supporto completo Limitato
Sottointerrogazioni Supportato Non supportato
Funzioni temporali DATE_BIN, INTERVAL Raggruppamento di time()
Interrogazioni con parametri Supporto nativo Non supportato
Riempimento delle date_bin_gapfill() Funzione fill()

Comprendendo queste funzionalità di interrogazione e scegliendo il metodo appropriato per il vostro caso d'uso, potete recuperare e analizzare in modo efficiente i dati delle serie temporali da Timestream for InfluxDB 3.

Vantaggi SQL:

  • Implementazione SQL completa con supporto per query complesse.

  • Support per i join, i sindacati e le funzioni delle finestre.

  • Sintassi familiare per utenti con background SQL.

  • Funzionalità analitiche più estese.

Vantaggi di InfluxQL:

  • Progettato specificamente per dati di serie temporali.

  • Sintassi più semplice per le operazioni comuni relative alle serie temporali.

  • Compatibilità con le versioni precedenti per gli utenti che migrano da InfluxDB v1.

  • Funzioni specializzate in serie temporali.

Funzionalità di ottimizzazione delle query

InfluxDB 3 offre diverse funzionalità di ottimizzazione per migliorare le prestazioni delle query per casi d'uso specifici. Queste funzionalità sfruttano la memorizzazione nella cache in memoria e le strategie di indicizzazione personalizzate per fornire tempi di risposta inferiori al millisecondo per i modelli di dati a cui si accede di frequente.

Last Value Cache (LVC)

La Last Value Cache (LVC) memorizza i valori N più recenti per campi specifici in memoria, consentendo tempi di risposta inferiori a 10 ms per le query che richiedono i punti dati più recenti. Questa funzionalità è disponibile nelle edizioni Core ed Enterprise.

Come funziona LVC

LVC mantiene una tabella in memoria dei valori più recenti per ogni combinazione unica di colonne chiave (in genere tag). Ad esempio, con i dati dei sensori:

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 cache memorizza:

stanza muro temperatura umidità co time
cucina est 22.7 36,5 26 2025-01-26H 20:00:00 Z
cucina est 22.7 36,0 9 2025-01-26 ORE 17:00:00 Z
Cucina est 22.7 36,2 3 2025-01-26H 15:00:00 Z
Cucina est 22.7 36,1 0 2025-01-26H 10:00:00 Z
Soggiorno nord 22.2 36,4 17 2025-01-26 ORE 20:00:00 Z
... ... ... ... ... ...

Crea un LVC

Utilizzate il seguente comando per creare 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

Interroga l'LVC

Utilizzate il seguente comando per interrogare 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'

Le migliori pratiche LVC

  • Gestisci la cardinalità: includi solo i tag essenziali come colonne chiave per ridurre al minimo l'utilizzo della memoria.

  • Ottimizza il conteggio dei valori: equilibrio tra le esigenze di interrogazione e il consumo di memoria.

  • Considerate TTL: impostazione appropriata time-to-live per le voci della cache.

  • Memoria del monitor: dimensione della cache = (key_column_cardinality × count × value_columns).

Distinct Value Cache (DVC)

La Distinct Value Cache (DVC) mantiene valori univoci per colonne di memoria specifiche, accelerando i tempi di risposta delle query sui metadati a meno di 30 ms. Disponibile nelle edizioni Core ed Enterprise.

Come funziona DVC

Il DVC memorizza tutte le combinazioni uniche di valori per colonne specifiche, perfette per le query che devono elencare i valori dei tag o i metadati disponibili.

Esempio di cache per i dati sulla posizione:

paese contea città
Austria Salisburgo Salisburgo
Austria Vienna Vienna
Belgio Anversa Anversa
Belgio Fiandre occidentali Bruges
Repubblica Ceca Praga Praga

Crea un DVD

Utilizzate il seguente comando per creare 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

Interroga il DVC

Utilizzate il seguente comando per interrogare 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')

Le migliori pratiche DVC

  • Imposta i limiti di cardinalità: definisci le combinazioni di valori univoci massime per controllare la memoria.

  • Configura Max Age: rimuove automaticamente i valori obsoleti.

  • Cache Strategic Columns: concentrati sulle colonne utilizzate di frequente nelle query sui metadati.

  • Monitora la dimensione della cache: una cardinalità maggiore significa che è necessaria più memoria.

Gli indici di file sono disponibili solo in Enterprise

Disponibile solo in Enterprise Edition. Gli indici di file consentono di personalizzare il modo in cui i dati vengono indicizzati nello storage, migliorando in modo significativo le prestazioni delle query a serie singola.

Indicizzazione predefinita e personalizzata

Indicizzazione predefinita: indici InfluxDB su tutti i tag più il tempo. 

Indicizzazione personalizzata: indicizza solo le colonne pertinenti alle tue domande.

Esempio di ottimizzazione:

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)

Di seguito viene illustrato come creare un indice di file personalizzato

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

Di seguito viene illustrato come eliminare un indice di file:

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

Considerazioni sull'indice dei file

  • Compattazione richiesta: gli indici vengono creati durante la compattazione dei dati (gen2+).

  • Solo colonne di stringhe: può indicizzare sia i tag che i campi stringa.

  • Analisi del modello di query: analizza il carico di lavoro prima di creare indici personalizzati.

  • Ottimizzazione di singole serie: particolarmente utile per le query destinate a serie specifiche.

Gestione delle informazioni sulla cache

Visualizza le configurazioni e le statistiche della cache utilizzando le tabelle di 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

Strategia di ottimizzazione delle prestazioni

Scegli le funzionalità di ottimizzazione giuste in base ai tuoi modelli di query:

Modello di interrogazione Funzionalità consigliata Prestazioni previste
Ultimi valori per serie Cache degli ultimi valori <10 ms
Valori dei tag disponibili Distinct Value Cache <30 ms
Interrogazioni a serie singola Indici di file (Enterprise) Miglioramento significativo
Aggregazioni per intervalli di tempo Indici standard Prestazioni di base

Considerazioni sulla memoria e sulle risorse

Formula della memoria cache:

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

  • DVC: memoria = distinct_combination × column_count × data_size

Migliori pratiche:

  • Inizia con piccole cache e monitora l'utilizzo della memoria

  • Utilizza le impostazioni TTL per limitare la crescita della cache

  • Memorizza nella cache solo i dati richiesti di frequente

  • Monitora i tassi di accesso alla cache tramite le tabelle di sistema

  • Per le aziende: combina le cache con indici di file personalizzati per prestazioni ottimali

Sfruttando in modo appropriato queste funzionalità di ottimizzazione, è possibile ottenere significativi miglioramenti delle prestazioni per modelli di query specifici, gestendo al contempo il consumo di risorse in modo efficace.