

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](https://docs.aws.amazon.com//timestream/latest/developerguide/timestream-for-influxdb.html) 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
<a name="querying-data-from-influxdb-3"></a>

 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
<a name="query-methods-overview"></a>

 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
<a name="using-the-v3-http-query-api"></a>

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

#### `/api/v3/query_sql`Interrogazioni SQL ()
<a name="sql-queries-apiv3query_sql"></a>

 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`
<a name="influxql-queries-apiv3query_influxql"></a>

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
<a name="query-parameters"></a>

È possibile utilizzare i seguenti parametri di interrogazione:


|  **Parameter**  |  **Descrizione**  |  **Campo obbligatorio**  | 
| --- | --- | --- | 
|  db  |  Nome del database  |  Sì  | 
|  q  |  Stringa di query (SQL o InfluxQL)  |  Sì  | 
|  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
<a name="using-the-influxdb3-cli"></a>

 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
<a name="using-the-v1-compatibility-api"></a>

 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
<a name="authentication-options"></a>
+  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
<a name="response-formats"></a>
+  JSON (impostazione predefinita) 
+  CSV (con `Accept: application/csv` intestazione) 

## Esempi di query SQL
<a name="sql-query-examples"></a>

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
<a name="query-performance-best-practices"></a>
+  **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
<a name="client-library-query-support"></a>

 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
<a name="query-language-comparison"></a>

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


|  **Funzionalità**  |  **SQL**  |  **InfluxQL**  | 
| --- | --- | --- | 
|  Si unisce  |  Supportata  |  Non supportata  | 
|  Funzioni finestra  |  Supporto completo  |  Limitato  | 
|  Sottointerrogazioni  |  Supportata  |  Non supportata  | 
|  Funzioni temporali  |  DATE\_BIN, INTERVAL  |  Raggruppamento di time()  | 
|  Interrogazioni con parametri  |  Supporto nativo  |  Non supportata  | 
|  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
<a name="query-optimization-features"></a>

 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)
<a name="last-value-cache-lvc"></a>

 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
<a name="how-lvc-works"></a>

 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
<a name="creating-an-lvc"></a>

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
<a name="querying-the-lvc"></a>

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
<a name="lvc-best-practices"></a>
+  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)
<a name="distinct-value-cache-dvc"></a>

 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
<a name="how-dvc-works"></a>

 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
<a name="creating-a-dvc"></a>

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
<a name="querying-the-dvc"></a>

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
<a name="dvc-best-practices"></a>
+  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
<a name="file-indexes-enterprise-only"></a>

 **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
<a name="default-vs.-custom-indexing"></a>

 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
<a name="file-index-considerations"></a>
+  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
<a name="managing-cache-information"></a>

 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
<a name="performance-optimization-strategy"></a>

 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
<a name="memory-and-resource-considerations"></a>

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