

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

# A cosa serve Amazon LiveAnalytics Timestream?
<a name="what-is-timestream"></a>

 Amazon Timestream LiveAnalytics for è un database di serie temporali veloce, scalabile, completamente gestito e creato appositamente che semplifica l'archiviazione e l'analisi di trilioni di punti di dati di serie temporali al giorno. Timestream for LiveAnalytics consente di risparmiare tempo e costi nella gestione del ciclo di vita dei dati delle serie temporali conservando i dati recenti in memoria e spostando i dati storici su un livello di storage a costi ottimizzati in base a politiche definite dall'utente. Il motore LiveAnalytics di query appositamente progettato da Timestream for consente di accedere e analizzare insieme dati recenti e storici, senza doverne specificare la posizione. Amazon Timestream LiveAnalytics for dispone di funzioni integrate di analisi delle serie temporali, che ti aiutano a identificare tendenze e modelli nei tuoi dati quasi in tempo reale. Timestream for LiveAnalytics è serverless e si ridimensiona automaticamente verso l'alto o verso il basso per regolare la capacità e le prestazioni. Poiché non è necessario gestire l'infrastruttura sottostante, è possibile concentrarsi sull'ottimizzazione e sullo sviluppo delle applicazioni.

 Timestream for si integra LiveAnalytics anche con i servizi di uso comune per la raccolta, la visualizzazione e l'apprendimento automatico dei dati. Puoi inviare dati ad Amazon Timestream LiveAnalytics per utilizzarli, Amazon Kinesis, AWS IoT Core Amazon MSK e Telegraf open source. Puoi visualizzare i dati utilizzando gli strumenti Quick, Grafana e di business intelligence tramite JDBC. Puoi anche utilizzare Amazon SageMaker AI con Timestream LiveAnalytics per l'apprendimento automatico. 

## Timestream per i vantaggi principali LiveAnalytics
<a name="what-is.features"></a>

 I vantaggi principali di Amazon Timestream LiveAnalytics for sono: 
+  *Senza server con auto-scaling: con* Amazon Timestream LiveAnalytics for, non ci sono server da gestire né capacità di provisioning. Man mano che le esigenze dell'applicazione cambiano, Timestream for si ridimensiona automaticamente per adattare la capacità. LiveAnalytics 
+  *Gestione del ciclo di vita dei dati:* Amazon Timestream semplifica il complesso processo di gestione del ciclo LiveAnalytics di vita dei dati. Offre lo storage su più livelli, con un archivio di memoria per i dati recenti e un archivio magnetico per i dati storici. Amazon Timestream automatizza il trasferimento dei dati dall'archivio di memoria all'archivio magnetico in base a politiche configurabili dall'utente. 
+  *Accesso semplificato ai dati:* con Amazon LiveAnalytics Timestream for, non è più necessario utilizzare strumenti diversi per accedere a dati recenti e storici. Il motore di query specifico di Amazon Timestream LiveAnalytics for accede e combina in modo trasparente i dati su più livelli di storage senza che sia necessario specificare la posizione dei dati. 
+  *Progettato appositamente per le serie temporali: puoi analizzare rapidamente i dati delle serie temporali* utilizzando SQL, con funzioni di serie temporali integrate per il livellamento, l'approssimazione e l'interpolazione. Timestream for supporta LiveAnalytics anche aggregati avanzati, funzioni di finestra e tipi di dati complessi come matrici e righe. 
+  *Sempre crittografato:* Amazon Timestream garantisce che LiveAnalytics i dati delle serie temporali siano sempre crittografati, sia a riposo che in transito. Amazon Timestream LiveAnalytics for consente inoltre di specificare AWS KMS una chiave gestita dal cliente (CMK) per crittografare i dati nell'archivio magnetico. 
+  *Alta disponibilità:* Amazon Timestream garantisce un'elevata disponibilità delle richieste di scrittura e lettura replicando automaticamente i dati e allocando le risorse su almeno 3 diverse zone di disponibilità all'interno di una singola regione. AWS Per ulteriori informazioni, consulta il contratto sul livello di servizio di [Timestream](https://aws.amazon.com/timestream/sla/). 
+  *Durabilità:* Amazon Timestream garantisce la durabilità dei dati replicando automaticamente i dati della memoria e dell'archivio magnetico in diverse zone di disponibilità all'interno di una singola regione. AWS Tutti i dati vengono scritti su disco prima di confermare che la richiesta di scrittura è completa. 

## Timestream per i casi d'uso LiveAnalytics
<a name="what-is.use-cases"></a>

 Alcuni esempi di un elenco crescente di casi d'uso di Timestream for includono: LiveAnalytics 
+ Monitoraggio delle metriche per migliorare le prestazioni e la disponibilità delle applicazioni.
+ Archiviazione e analisi della telemetria industriale per semplificare la gestione e la manutenzione delle apparecchiature.
+ Monitoraggio dell'interazione dell'utente con un'applicazione nel tempo.
+ Archiviazione e analisi dei dati dei sensori IoT.

## Guida introduttiva a Timestream per LiveAnalytics
<a name="what-is.getting-started"></a>

Consigliamo di iniziare leggendo le seguenti sezioni:
+ **[Tutorial](getting-started.db-w-sample-data.md)-** Per creare un database popolato con set di dati di esempio ed eseguire query di esempio.
+ **[Amazon LiveAnalytics Timestream per concetti](concepts.md)-** Per imparare i concetti essenziali di Timestream. LiveAnalytics 
+ **[Accesso a Timestream per LiveAnalytics](accessing.md)-** Per sapere come accedere a Timestream LiveAnalytics utilizzando la console o l'API. AWS CLI
+ **[QuoteQuote di default](ts-limits.md)-** Per informazioni sulle quote sul numero di Timestream per i LiveAnalytics componenti di cui è possibile fornire.

Per informazioni su come iniziare rapidamente a sviluppare applicazioni per Timestream for LiveAnalytics, consulta quanto segue:
+ [Usando il AWS SDKs](getting-started-sdks.md)
+ [Riferimento al linguaggio di interrogazione](reference.md)

# Amazon Timestream LiveAnalytics per la modifica della disponibilità
<a name="AmazonTimestreamForLiveAnalytics-availability-change"></a>

Dopo un'attenta valutazione, abbiamo deciso di chiudere l'accesso dei nuovi clienti ad Amazon Timestream LiveAnalytics a partire dal 20/06/25. Questa modifica non influirà sui carichi di lavoro dei clienti in esecuzione con Amazon Timestream for. LiveAnalytics I clienti esistenti con un conto di pagamento attivo che attualmente utilizzano il servizio possono continuare ad aggiungere nuovi utenti e account collegati a tale account di pagamento. AWS continua a investire in sicurezza, disponibilità e miglioramenti delle prestazioni per Amazon LiveAnalytics Timestream for. Consigliamo ai nuovi clienti di valutare [Amazon Timestream for](https://docs.aws.amazon.com//timestream/latest/developerguide/timestream-for-influxdb.html) InfluxDB come alternativa grazie alla sua funzionalità simile.

**Topics**
+ [Amazon Timestream LiveAnalytics per la modifica della disponibilità](timestream-availability-update.md)
+ [Guida alla migrazione](migration-guide.md)

# Amazon Timestream LiveAnalytics per la modifica della disponibilità
<a name="timestream-availability-update"></a>

Poiché le applicazioni in serie temporali hanno requisiti e caratteristiche unici, offriamo un ampio framework per aiutarti a valutare varie alternative prima di approfondire dettagli di implementazione specifici. Queste linee guida di alto livello fungono da base per il processo decisionale, con passaggi più dettagliati e implementazioni pratiche che verranno trattati nelle sezioni successive.

## Valutazione di servizi alternativi
<a name="alternative-services"></a>

**Il caso d'uso si adatta ad Amazon Timestream per InfluxDB**  
Ti consigliamo [Timestream for InfluxDB](https://docs.aws.amazon.com//timestream/latest/developerguide/timestream-for-influxdb.html), se il tuo Timestream for LiveAnalytics table ha meno di 10 milioni di cardinalità ([chiavi di serie](https://docs.influxdata.com/influxdb/v2/reference/key-concepts/data-elements/#series)), ovvero le combinazioni uniche di o se puoi ridurre la cardinalità della tabella a meno di [Amazon LiveAnalytics Timestream per concetti](concepts.md) 10 milioni. Timestream for InfluxDB ti dà accesso alle funzionalità della versione open source di InfluxDB. La scelta di questo percorso fornisce funzionalità di serie temporali esistenti come le funzioni di analisi delle serie temporali fornite da [Flux](https://docs.influxdata.com/influxdb/v2/query-data/flux/), le attività (equivalenti a[Query pianificate](scheduled-query.md)) e altre funzioni simili offerte da Timestream for. LiveAnalytics Timestream for InfluxDB fornisce anche [InfluxQL (un linguaggio di query simile a SQL) per interagire con InfluxDB](https://docs.influxdata.com/influxdb/v2/query-data/influxql/) per interrogare e analizzare i dati delle serie temporali.

**Preferisci usare SQL anziché InfluxQL**  
Consigliamo di implementare Amazon Aurora o RDS PostgreSQL. [Questi database offrono funzionalità SQL complete, fornendo al contempo efficaci funzionalità di gestione dei dati di serie temporali.](https://docs.aws.amazon.com//AmazonRDS/latest/UserGuide/PostgreSQL_Partitions.html) L'analisi delle serie temporali può essere implementata utilizzando le funzioni di database integrate, ove disponibili, oppure gestita a livello di applicazione.

**Richiedono l'inserimento di dati su larga scala (oltre 1 milione di record al secondo)**  
[Consigliamo di utilizzare Amazon DynamoDB o altri AWS database NoSQL.](https://aws.amazon.com/nosql/) Questi database possono essere selezionati in base alle esigenze applicative specifiche. L'analisi delle serie temporali può essere implementata utilizzando le funzioni di database integrate, ove disponibili, oppure gestita a livello di applicazione.

Prima di iniziare la migrazione dei dati verso il AWS servizio alternativo scelto, è fondamentale valutare diversi fattori chiave che influenzeranno in modo significativo la strategia di migrazione e il suo successo finale. Queste valutazioni aiuteranno a definire il vostro approccio, a identificare le potenziali sfide e a garantire una transizione più fluida durante il processo di migrazione.

**Considerazioni sulla selezione e la conservazione dei dati**

Valuta l'ambito della migrazione dei dati definendo requisiti di conservazione esatti. Valuta se devi migrare l'intero set di dati storici, solo i dati recenti (ad esempio gli ultimi 30, 60 o 90 giorni) o segmenti di dati di serie temporali specifici. Questa decisione deve essere guidata da tre fattori chiave: requisiti di conformità normativa, esigenze analitiche dell'azienda e considerazioni pratiche sulla complessità e sui costi della migrazione.

**Analisi della compatibilità dei modelli di interrogazione**

La compatibilità delle query tra il servizio di origine (Timestream for LiveAnalytics) e quello di destinazione richiede una valutazione approfondita, poiché i database delle serie temporali gestiscono i linguaggi e le funzionalità di query in modo diverso. Conduci test completi per identificare differenze di sintassi, lacune funzionali e variazioni di prestazioni tra i sistemi. Esegui il test di tutte le query aziendali critiche o, se possibile, di tutte le query su cui si basano le applicazioni per assicurarti che funzionino correttamente dopo la migrazione e che siano performanti.

**Pianificazione della trasformazione dei dati**

Prima della migrazione, presta molta attenzione alla mappatura degli schemi per garantire il corretto allineamento dei dati e la coerenza strutturale tra i sistemi di origine e di destinazione e conversioni accurate dei tipi di dati, specificamente adattate per i dati delle serie temporali. Questi componenti interagiscono per garantire la qualità dei dati, ottimizzare le prestazioni e mantenere la funzionalità tra diverse architetture di sistema. Inoltre, prendi in considerazione eventuali modelli di indicizzazione specializzati e ottimizzazioni specifiche del sistema per garantire un accesso e un recupero efficienti dei dati.

**Gestione della continuità e dei tempi di inattività**

Poiché la migrazione dei dati causa intrinsecamente interruzioni operative, lo sviluppo di una strategia completa di switchover è fondamentale per il successo. Alcune best practice da considerare nel piano di migrazione per ridurre al minimo i tempi di inattività sono:
+ Implementa sistemi di elaborazione parallela temporanei, ove possibile, per mantenere la continuità aziendale.
+ Pianifica le migrazioni durante i periodi di traffico ridotto, come i fine settimana o le ore notturne.
+ Stabilisci procedure di rollback ben collaudate per un ripristino rapido in caso di problemi imprevisti.

# Guida alla migrazione
<a name="migration-guide"></a>

[Questa guida presenta due approcci per la migrazione di dati di serie temporali da Amazon Timestream a Timestream LiveAnalytics for InfluxDB e ad [Aurora o RDS](https://docs.aws.amazon.com//AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) PostgreSQL con un livello [intermedio](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) per Amazon S3.](https://aws.amazon.com/s3/) Per le migrazioni verso altri servizi di database, consigliamo di consultare la documentazione specifica per l'importazione di dati da S3 nel servizio prescelto.

In questa guida, seguiamo i seguenti passaggi:

1. Esporta i tuoi dati da Timestream for LiveAnalytics ad Amazon S3.

1. Inserimento di dati in Timestream for InfluxDB.

1. Inserimento di dati in PostgreSQL.

**Topics**
+ [Esportazione di dati Timestream su Amazon S3](export-timestream-data.md)
+ [Timestream per InfluxDB come Target](timestream-influxdb-target.md)
+ [Aurora/RDS Postgres come bersaglio](aurora-postgres-target.md)

# Esportazione di dati Timestream su Amazon S3
<a name="export-timestream-data"></a>

Indipendentemente dal servizio di destinazione per la migrazione, ti consigliamo di seguire le migliori pratiche riportate di seguito per esportare il tuo Timestream per i dati LiveAnalytics su Amazon S3, creando un livello di storage intermedio durevole che funga da base per la successiva acquisizione specifica del database.

[Per esportare in modo affidabile i dati da Timestream per le LiveAnalytics tabelle ad Amazon S3, consigliamo di utilizzare [lo strumento Timestream for LiveAnalytics export, che utilizza la funzionalità Timestream UNLOAD, progettata per esportazioni](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/unload/README.md) di dati su larga scala.](https://docs.aws.amazon.com//timestream/latest/developerguide/supported-sql-constructs.UNLOAD.html)

**Timestream per lo strumento di esportazione LiveAnalytics **

*Strategia di suddivisione in blocchi basata sul tempo*

La suddivisione in blocchi temporali è essenziale per la migrazione di grandi volumi di dati di serie temporali. Questo approccio suddivide il processo di esportazione in unità gestibili che possono essere elaborate in modo indipendente e riprovate in caso di errori, riducendo significativamente i rischi di migrazione. Crea punti di controllo per facilitare il monitoraggio dei progressi e aggiunge la possibilità di riprendere dopo le interruzioni. Per le organizzazioni con acquisizione continua di dati, ciò consente di esportare i dati più recenti in blocchi di tempo separati, garantendo un migliore coordinamento tra le operazioni in corso e la migrazione. Lo strumento utilizza la suddivisione in blocchi giornalieri, archiviando i dati di ogni giorno con il prefisso del bucket S3 per una gestione efficiente. Inoltre, la suddivisione in blocchi può essere basata su ora, giorno, mese o anno.

*Monitoraggio della migrazione*

Lo strumento offre un'opzione per acquisire le statistiche sulla migrazione in una tabella DynamoDB, tracciando metriche come le configurazioni utilizzate, i record esportati e altri punti dati per convalidare la completezza della migrazione. Consigliamo di monitorare attentamente queste metriche durante la migrazione e la convalida. Puoi anche utilizzare la registrazione fornita nello script di orchestrazione, per acquisire i timestamp di esecuzione, i limiti dei blocchi e qualsiasi condizione di errore riscontrata. Lo strumento fornisce anche una notifica SNS se si desidera integrare il sistema downstream per intervenire in caso di guasti.

## Raccomandazioni e best practice
<a name="recommendations-best-practices"></a>

Lo strumento Timestream for LiveAnalytics export offre una soluzione flessibile e robusta per esportare dati su S3 con varie opzioni di configurazione personalizzate in base ai requisiti del sistema di destinazione. Se il tuo obiettivo è Timestream for InfluxDB, usa il formato [Parquet](https://parquet.apache.org/docs/overview/) senza compressione per garantire la compatibilità con gli script di ingestione. Per un tracciamento e un monitoraggio ottimali, abilita la registrazione di DynamoDB e configura le notifiche SNS per ricevere avvisi su errori o completamenti delle esportazioni.

Lo strumento sfrutta la funzionalità Timestream for LiveAnalytics [UNLOAD](https://docs.aws.amazon.com//timestream/latest/developerguide/supported-sql-constructs.UNLOAD.html) superando al contempo i [limiti della partizione per le query](https://docs.aws.amazon.com//timestream/latest/developerguide/export-unload-limits.html) esportando automaticamente i dati in batch in base all'intervallo di tempo specificato. È possibile personalizzare il partizionamento dei dati per ora, giorno, mese o anno, come impostazione predefinita il giorno. Ogni partizione deve rimanere al di sotto di circa 350 GB per evitare errori relativi alla memoria, come il calcolo delle query che supera la memoria massima disponibile. Ad esempio, se i dati annuali superano i 350 GB, valuta la possibilità di utilizzare partizioni mensili o opzioni ancora più granulari come il partizionamento giornaliero o orario. Se scegli la modalità oraria ma ricevi comunque l'errore «Il calcolo della query supera la memoria massima disponibile», puoi ridurre il [numero](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/unload/README.md#optional-parameters) di partizioni, assicurandoti che le esportazioni abbiano esito positivo.

Lo strumento offre flessibilità nell'ambito dell'esportazione, consentendoti di esportare una singola tabella, un intero database o tutti i database del tuo account. Per requisiti più specifici, come l'esportazione di più database specifici, puoi creare un wrapper personalizzato attorno a questa automazione. Inoltre, puoi scegliere di esportare prima i dati più recenti abilitando l'opzione di ordine cronologico inverso. Al riavvio dopo un errore, puoi continuare con lo stesso tag di migrazione per mantenere tutti i file con lo stesso prefisso S3 o omettere il tag per creare file con un nuovo prefisso. Poiché lo strumento esporta i dati in batch, in caso di errori, consigliamo di iniziare dal batch fallito anziché ripartire dall'ora di inizio originale. Se non specificate un timestamp di fine, lo strumento utilizza automaticamente il timestamp corrente (UTC) per garantire esportazioni e convalide coerenti.

## Comandi di base
<a name="basic-commands"></a>

**Example : Esportazione di una tabella con la registrazione DynamoDB abilitata**  

```
python3.9 unload.py \
    --export-table \
    --database Demo \
    --table Demo \
    --start-time '2020-03-26 17:24:38' \
    --enable-dynamodb_logger true
```

**Example : esporta l'intero database**  

```
python3.9 unload.py \
    --export-database \
    --database Demo \
    --start-time '2020-03-26 17:24:38'
```

**Example : Esporta tutti i database**  

```
python3.9 unload.py \
    --export-all_databases \
    --start-time '2020-03-26 17:24:38'
```

**Example : Esportazione avanzata con più opzioni**  

```
python unload.py \
    --export-table \
    --database MyDB \
    --table MyTable \
    --start-time '2024-05-14 00:00:00' \
    --end-time '2025-05-14 00:00:00' \
    --partition month \
    --export-format PARQUET \
    --compression GZIP \
    --region us-east-1 \
    --s3-uri s3://my-bucket \
    --enable-dynamodb_logger \
    --sns-topic_arn arn:aws:sns:region:account-id:topic-name
```

Per ulteriori informazioni, consultate il file [README](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/unload/README.md) dello script di unload.

# Timestream per InfluxDB come Target
<a name="timestream-influxdb-target"></a>

Amazon Timestream for InfluxDB è un servizio di database di serie temporali gestito che utilizza InfluxDB open source per applicazioni AWS in tempo reale. APIs Offre facilità di configurazione, funzionamento e scalabilità, fornendo query con tempi di risposta di una sola cifra di millisecondi.

Il primo passaggio per determinare se Timestream for InfluxDB è un obiettivo di migrazione appropriato per il tuo caso d'uso è determinare la cardinalità di Timestream for table. LiveAnalytics [Abbiamo sviluppato uno script che calcola la cardinalità della tabella in Timestream per.](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/cardinality/README.md) LiveAnalytics Questo calcolo ha due scopi:

1. Verifica se la cardinalità è inferiore a 10 milioni, il che aiuterà a determinare se Timestream for InfluxDB è in grado di gestire il tuo caso d'uso.

1. Ti aiuta a decidere quale tipo di istanza [Timestream](timestream-for-influxdb.md#timestream-for-influx-dbi-classtypes) for InfluxDB utilizzare.

[La cardinalità](https://docs.influxdata.com/influxdb/v2/reference/glossary/#series-cardinality) [in InfluxDB è il numero di [misurazioni](https://docs.influxdata.com/influxdb/v2/reference/syntax/line-protocol/#measurement), [tag](https://docs.influxdata.com/influxdb/v2/reference/syntax/line-protocol/#tag-set) e combinazioni di tasti di [campo](https://docs.influxdata.com/influxdb/v2/reference/syntax/line-protocol/#field-set) univoci in un bucket InfluxDB.](https://docs.influxdata.com/influxdb/v2/admin/buckets/) Fai riferimento a [Timestream per la documentazione di InfluxDB sulla gestione della cardinalità](timestream-for-influxdb.md#timestream-for-influx-getting-started-security-best-practices) per capire come il superamento dei limiti consigliati può ridurre le prestazioni delle query e aumentare il consumo di memoria. Analizza i modelli di query previsti con campioni di dati rappresentativi prima di finalizzare la selezione delle istanze per garantire che le query rimangano performanti dopo la migrazione. Presta attenzione alle query di aggregazione che richiedono molta memoria e che potrebbero comportarsi diversamente rispetto a Timestream for. LiveAnalytics Quando esegui la migrazione da Timestream for LiveAnalytics, seleziona attentamente le specifiche dell'istanza InfluxDB in base alla cardinalità del set di dati, poiché ciò influisce direttamente sulle prestazioni e sui requisiti di risorse. Ti consigliamo di prendere in considerazione altre destinazioni se la cardinalità dei dati è superiore a 10 milioni.

**Panoramica dello script di calcolo della cardinalità**

Lo script di calcolo della cardinalità calcola la cardinalità di un Timestream per una tabella. LiveAnalytics Se la cardinalità è inferiore a 10 milioni, lo script consiglia un tipo di istanza Timestream per InfluxDB. Utilizzando la mappatura dello schema predefinita, la cardinalità viene calcolata calcolando le combinazioni uniche totali di dimensioni e nome della misura. La scelta dei [tag di protocollo](https://docs.influxdata.com/influxdb/v2/reference/syntax/line-protocol/#elements-of-line-protocol) giusti (equivalenti alle dimensioni in Timestream for LiveAnalytics) consente di [indicizzare](https://docs.influxdata.com/influxdb/v2/reference/key-concepts/data-elements/#tag-value) automaticamente i dati e filtrarli in modo efficiente utilizzando i tag. Lo script offre anche la possibilità di escludere dimensioni specifiche nel calcolo della cardinalità. Se applicabile al caso specifico, ossia se non si utilizzano determinate dimensioni per filtrare i dati nelle query SQL (in particolare non le si utilizza come predicati), è possibile escludere tali dimensioni dal calcolo della cardinalità. Successivamente, puoi inserirle come campi (equivalenti alle misure in Timestream for LiveAnalytics) nei passaggi successivi della migrazione.

*Prerequisiti e installazione*

Vedi la sezione Prerequisiti e l'installazione nel README dello [script di cardinalità](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/cardinality/README.md).

**Utilizzo di base**

Per determinare la cardinalità di una tabella, example\$1table, nel database example\$1database lo script può essere utilizzato nel modo seguente:

**Example**  

```
python3 cardinality.py \
    --table-name example_table \
    --database-name example_database
```

Questo produce il seguente risultato:

```
Cardinality of "example_database"."example_table": 160
Your recommended Timestream for InfluxDB type is: db.influx.medium
```

**Raccomandazioni**

Lo script analizza automaticamente l'intera tabella per calcolare la cardinalità, offrendo al contempo opzioni di filtro temporale per un'esecuzione ottimale delle query. Ti consigliamo di implementare filtri temporali quando i dati coinvolgono dimensioni coerenti e quando l'analisi di variazioni dimensionali distinte nell'intera tabella produce risultati simili all'analisi di intervalli di tempo specifici. Questo approccio garantisce un'esecuzione delle query efficiente e performante.

Per ulteriori informazioni, consultate il file README [dello script di cardinalità](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/cardinality/README.md).

# Acquisizione di dati da Amazon S3 a Timestream per l'automazione di InfluxDB
<a name="data-ingestion-from-s3"></a>

Dopo che lo strumento Timestream for LiveAnalytics export ha completato il processo di scaricamento, inizia la fase successiva del processo di automazione. Questa automazione utilizza gli [strumenti di importazione di InfluxDB per trasferire i dati nella sua](https://docs.influxdata.com/influxdb/v2/write-data/) struttura specializzata di serie temporali. Il processo trasforma il modello di dati di Timestream in modo che corrisponda ai concetti di misurazioni, tag e campi di InfluxDB. [Infine, carica i dati in modo efficiente utilizzando il protocollo di linea di InfluxDB.](https://docs.influxdata.com/influxdb/v2/reference/syntax/line-protocol/)

Il flusso di lavoro per il completamento di una migrazione è suddiviso in quattro fasi:

1. Scarica i dati utilizzando lo strumento di esportazione Timestream for LiveAnalytics .

1. [Trasformazione dei dati](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/targets/timestream_for_influxdb/transform/README.md)[: conversione di Timestream per LiveAnalytics i dati nel formato del protocollo di linea InfluxDB (basato sullo schema definito dopo la valutazione della cardinalità) utilizzando Amazon Athena.](https://docs.aws.amazon.com//athena/latest/ug/when-should-i-use-ate.html)

1. [Inserimento di dati: inserisci il set di dati del protocollo di linea nella](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/targets/timestream_for_influxdb/ingestion/README.md) tua istanza Timestream for InfluxDB.

1. [Convalida](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/targets/timestream_for_influxdb/validation/README.md): facoltativamente, puoi verificare che ogni punto del protocollo di linea sia stato inserito (richiede durante la fase di trasformazione dei dati). `--add-validation-field true`

**Trasformazione dei dati**

Per la trasformazione dei dati, abbiamo sviluppato uno script per convertire Timestream per il formato parquet di dati LiveAnalytics esportato nel formato Line Protocol di InfluxDB utilizzando Amazon Athena. Amazon Athena offre un servizio di interrogazione senza server e un modo conveniente per trasformare grandi volumi di dati di serie temporali senza richiedere risorse di elaborazione dedicate.

Lo script svolge le seguenti funzioni:
+ Carica il Timestream esportato per LiveAnalytics i dati da un bucket Amazon S3 in una tabella Amazon Athena.
+ Esegue la mappatura e la trasformazione dei dati dai dati memorizzati nella tabella Athena in protocollo di linea e li archivia nel bucket S3.

**Mappatura dei dati**

La tabella seguente mostra come Timestream per LiveAnalytics i dati viene mappato ai dati del protocollo di linea.


| Timestream per Concept LiveAnalytics  | Concetto di protocollo di linea | 
| --- | --- | 
|  [Nome della tabella](https://docs.aws.amazon.com//timestream/latest/developerguide/API_Table.html)  |  [Misurazione](https://docs.influxdata.com/influxdb/v2/reference/syntax/line-protocol/#measurement)  | 
|  [Dimensioni](https://docs.aws.amazon.com//timestream/latest/developerguide/API_Dimension.html)  |  [Tag](https://docs.influxdata.com/influxdb/v2/reference/syntax/line-protocol/#tag-set)  | 
|  [Nome della misura](https://docs.aws.amazon.com//timestream/latest/developerguide/data-modeling.html#data-modeling-measurenamemulti)  |  Tag (opzionale)  | 
|  [Misure](https://docs.aws.amazon.com//timestream/latest/developerguide/API_MeasureValue.html)  |  [Campi](https://docs.influxdata.com/influxdb/v2/reference/syntax/line-protocol/#field-set)  | 
|  [Time](https://docs.aws.amazon.com///timestream/latest/developerguide/writes.html#writes.data-types) (Orario)  |  [Time stamp](https://docs.influxdata.com/influxdb/v2/reference/syntax/line-protocol/#timestamp)  | 

**Prerequisiti e installazione**

Vedi le sezioni Prerequisiti e Installazione nel README dello [script di trasformazione](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/targets/timestream_for_influxdb/transform/README.md#prerequisites).

**Utilizzo**

Per trasformare i dati memorizzati nel bucket example\$1s3\$1bucket dal Timestream per la tabella example\$1table in example\$1database, esegui il comando seguente: LiveAnalytics 

```
python3 transform.py \
        --database-name example_database \
        --tables example_table \
        --s3-bucket-path example_s3_bucket \
        --add-validation-field false
```

Una volta completato lo script, 
+ In Athena, verrà creata la tabella example\$1database\$1example\$1table, contenente Timestream per i dati. LiveAnalytics 
+ In Athena, verrà creata la tabella lp\$1example\$1database\$1example\$1table, contenente Timestream per i dati trasformati in punti del protocollo di linea. LiveAnalytics 
+ Nel bucket S3 example\$1s3\$1bucket, all'interno del percorso, verranno archiviati i dati del protocollo di linea. ` example_database/example_table/unload-<%Y-%m-%d-%H:%M:%S>/line-protocol-output`

**Raccomandazioni**

Fate riferimento al [README dello script di trasformazione](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/targets/timestream_for_influxdb/transform/README.md#prerequisites) per maggiori dettagli sull'utilizzo più recente dello script. Gli output sono necessari per le fasi successive della migrazione, come la convalida. Se hai escluso le dimensioni per migliorare la cardinalità, modifica lo schema per ridurre la cardinalità utilizzando l'`--dimensions-to-fields`argomento per modificare dimensioni particolari dei campi. 

*Aggiungere un campo per la convalida*

Per informazioni su come aggiungere un campo per la convalida, consulta la sezione [Aggiungere un campo per la convalida](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/targets/timestream_for_influxdb/transform/README.md#adding-a-field-for-validation) nel README dello script di trasformazione. 

## Inserimento di dati in Timestream for InfluxDB
<a name="data-ingestion-influxdb"></a>

Lo script di ingestione di InfluxDB inserisce set di dati del protocollo a linea compressa in Timestream for InfluxDB. Una directory contenente i file di protocollo di linea compressa gzip viene passata come argomento della riga di comando insieme al bucket InfluxDB di destinazione di ingestione. Questo script è stato progettato per importare più file contemporaneamente utilizzando l'elaborazione multipla per utilizzare le risorse con InfluxDB e il computer che esegue lo script.

Lo script esegue le seguenti operazioni:
+ Estrae i file compressi e li inserisce in InfluxDB.
+ Implementa meccanismi di ripetizione e gestione degli errori.
+ Tiene traccia delle ingestioni riuscite e non riuscite per la ripresa.
+ Ottimizza le I/O operazioni durante la lettura dal set di dati del protocollo di linea.

**Prerequisiti e installazione**

[Vedi la sezione Prerequisiti e installazione nel file README dello script di ingestione in.](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/README.md#installation) GitHub

**Preparazione dei dati**

I file di protocollo di linea zippata necessari per l'ingestione vengono generati dagli script di trasformazione dei dati. Segui questi passaggi per preparare i dati:

1. Configura un'istanza EC2 con spazio di archiviazione sufficiente per contenere il set di dati trasformato.

1. Sincronizza i dati trasformati dal bucket S3 alla tua directory locale:

   ```
   aws s3 sync \
       s3://your-bucket-name/path/to/transformed/data \
       ./data_directory
   ```

1. Assicurati di avere accesso in lettura a tutti i file nella directory dei dati.

1. Esegui il seguente script di inserimento per inserire i dati in Timestream for InfluxDB.

**Utilizzo**

```
python influxdb_ingestion.py <bucket_name> <data_directory> [options]
```

**Utilizzo di base**

```
python influxdb_ingestion.py my_bucket ./data_files
```

**Tassi di ingestione**

Abbiamo eseguito alcuni test per i tassi di ingestione. Test di ingestione utilizzando un'istanza C5N.9XL EC2 che esegue lo script di ingestione con 10 Workers e inserisce il protocollo di linea da \$1500 GB in 8XL Timestream per istanze InfluxDB:
+ 3.000 IOPS 15,86 GB/ora.
+ 12.000 IOPS 70,34 GB/ora.
+ 16.000 IOPS 71,28 GB/ora.

**Raccomandazioni**
+ Usa un'istanza EC2 con core CPU sufficienti per gestire l'elaborazione parallela.
+ Assicurati che l'istanza disponga di spazio di archiviazione sufficiente per contenere l'intero set di dati trasformato con spazio aggiuntivo per l'estrazione.
  + Il numero di file estratti contemporaneamente è uguale al numero di worker configurati durante l'esecuzione dello script.
+ Posiziona l'istanza EC2 nella stessa regione e nella stessa zona (se possibile) dell'istanza InfluxDB per ridurre al minimo la latenza.
+ Prendi in considerazione l'utilizzo di tipi di istanze ottimizzati per le operazioni di rete, ad esempio C5N.
+ Se sono richiesti tassi di ingestione elevati, si consigliano almeno 12.000 IOPS per l'istanza Timestream for InfluxDB. È possibile ottenere ottimizzazioni aggiuntive aumentando il numero di lavoratori per lo script in base alla dimensione dell'istanza di Timestream for InfluxDB.

[Per ulteriori informazioni, consultate il file README dello script di ingestione.](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/README.md#installation)

# Script di convalida della migrazione
<a name="migration-validation"></a>

Lo script di convalida confronta i row/point conteggi logici tra una tabella di origine (Amazon Timestream o Amazon Athena) e una misurazione del bucket InfluxDB, con specifiche dell'intervallo di tempo opzionali. Questo strumento aiuta a garantire l'integrità dei dati durante i processi di migrazione eseguendo query parallele su entrambi i sistemi e confrontando i risultati.

Lo script di convalida supporta le interrogazioni sul set di dati esportato in Athena o sul database/tabella Timestream originale. Tieni presente che interrogare direttamente Timestream può portare a confronti imprecisi se i dati sono stati scritti dopo l'esportazione. Lo script di convalida può essere eseguito in qualsiasi momento dopo l'inizio dell'ingestione. Innanzitutto esegue un sondaggio sull'endpoint delle metriche di InfluxDB per attendere che il [WAL (Write-Ahead Log)](https://docs.influxdata.com/influxdb/v2/reference/internals/storage-engine/#write-ahead-log-wal) si svuoti completamente, assicurando che tutta l'elaborazione dei dati, inclusa la fusione e la deduplicazione dei file dopo l'ingestione, sia terminata. Lo script esegue quindi query di solo conteggio su finestre temporali identiche, confrontando i risultati per evidenziare corrispondenze o mancate corrispondenze. Supporta il schema/tag filtraggio opzionale per gli schemi trasformati in cui le dimensioni vengono utilizzate come campi e produce riepiloghi dei tempi e dei risultati leggibili dall'uomo per facilitare la convalida del processo di migrazione.

*Prerequisiti e installazione*

Vedi la sezione relativa ai prerequisiti e all'installazione nel file README dello script di [convalida della migrazione](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/README.md#installation).

*Utilizzo*

```
python validator.py [options]
```

Tutte le impostazioni possono essere fornite come flag CLI o variabili di ambiente. Vedi il file example.env all'interno del repository.

[Per la risoluzione dei problemi e i consigli, consultate il file README dello script di convalida della migrazione.](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/README.md#installation)

*Pulizia*

Al termine della migrazione, resources/artifacts verrà creato quanto segue:
+ Una tabella Athena, contenente Timestream per i dati. LiveAnalytics Per impostazione predefinita, è <Timestream database name>\$1 <Timestream table name>nel database Athena predefinito.
+ Una tabella Athena, contenente i dati del protocollo di linea trasformati. Per impostazione predefinita, è lp\$1 <Athena table name>nel database Athena predefinito.
+ Linea i dati del protocollo all'interno del bucket S3, con il percorso<Timestream database name>/<Timestream table name>/unload- <%y-%m-%d-%H: %M: %S>/. line-protocol-output
+ Dati scaricati creati come LiveAnalytics parte dello strumento di esportazione Timestream for.
+ Dati e log scaricati sull'istanza EC2.
+ Tabella DynamoDB se utilizzata per la registrazione come parte dello strumento Timestream for export. LiveAnalytics 

*Ripulire le risorse di Athena*

Per eliminare qualsiasi tabella Athena, esegui il seguente comando [AWS CLI](https://aws.amazon.com/cli/), sostituendolo <Athena table name>con il nome della tabella che desideri eliminare e <Athena database name>con il nome del database Athena in cui risiede la tabella:

```
aws glue delete-table \
    --database-name <Athena database name> \
    --name <Athena table name>
```

*Pulizia delle risorse S3*

Per eliminare i dati del protocollo di linea all'interno del bucket S3, esegui il seguente comando AWS CLI, sostituendolo <S3 bucket name>con il nome del bucket S3, con il nome del Timestream per il <Timestream database name> LiveAnalytics database, con il nome del Timestream per la <Timestream table name> LiveAnalytics tabella e <timestamp>con il timestamp che forma il percorso UNLOAD-<%y-%m-%d-%H: %M: %S> nel bucket S3:

```
aws s3 rm \
    s3://<S3 bucket name>/<Timestream database name>/<Timestream table name>/unload-<timestamp>/line-protocol-output \
    --recursive
```

Per eliminare un bucket S3, esegui il comando seguente, sostituendolo <S3 bucket name>con il nome del bucket S3:

```
aws s3 delete-bucket --bucket <S3 bucket name>
```

*Pulizia delle risorse DynamoDB*

Per eliminare una tabella DynamoDB, esegui il comando seguente, <table name>sostituendolo con il nome della tabella DynamoDB che desideri eliminare:

```
aws dynamodb delete-table --table-name <table name>
```

# Aurora/RDS Postgres come bersaglio
<a name="aurora-postgres-target"></a>

Questa sezione spiega come importare i dati delle serie temporali staged di S3 in Amazon PostgreSQL. RDS/Aurora Il processo di inserimento si concentrerà principalmente sui file CSV generati dallo strumento di esportazione di Timestream da importare in Postgres. Consigliamo di progettare lo schema e la tabella PostgreSQL con strategie di indicizzazione adeguate per le query basate sul tempo. Utilizza qualsiasi processo ETL per trasformare le strutture specializzate di Timestream in tabelle relazionali ottimizzate per le tue esigenze specifiche. Quando migri i dati di Timestream in un database relazionale, struttura lo schema con una colonna timestamp come indice temporale principale, colonne identificative di misurazione derivate da measure\$1name di Timestream e colonne di dimensione dalle dimensioni di Timestream e dalle tue misure effettive. Crea indici strategici sugli intervalli di tempo e sulle combinazioni di dimensioni più richieste per ottimizzare le prestazioni durante il processo di trasformazione e caricamento dei dati. Quando si migrano dati di serie temporali su PostgreSQL, il corretto dimensionamento delle istanze è fondamentale per mantenere le prestazioni delle query su larga scala. Considerate il volume di dati previsto, la complessità delle query e i requisiti di concorrenza quando selezionate una classe di istanza, con particolare attenzione all'allocazione della memoria per i carichi di lavoro di aggregazione di serie temporali. Per set di dati che superano le decine di milioni di righe, sfrutta le funzionalità di [partizionamento native di PostgreSQL e le strategie di indicizzazione avanzate per ottimizzare i modelli di accesso](https://docs.aws.amazon.com//AmazonRDS/latest/UserGuide/PostgreSQL_Partitions.html) alle serie temporali.

Ti consigliamo di eseguire test funzionali e prestazionali per scegliere l'istanza giusta e di [ottimizzare il database PostgreSQL per risolvere eventuali problemi](https://docs.aws.amazon.com//AmazonRDS/latest/UserGuide/PostgreSQL.Tuning_proactive_insights.html) di prestazioni. L'esecuzione di rigorosi controlli di integrità dei dati mediante confronti di query di esempio tra il database Timestream di origine e il sistema di destinazione è fondamentale per garantire il successo della migrazione e mantenere la correttezza delle query. Eseguendo query identiche su entrambi i sistemi e confrontando i risultati, inclusi il conteggio dei record, le aggregazioni e i valori anomali, è possibile identificare eventuali discrepanze che potrebbero indicare errori di trasformazione, perdita di dati o differenze semantiche nell'interpretazione delle query. Questo processo di verifica verifica che i dati mantengano il loro valore analitico dopo la migrazione, crea fiducia nel nuovo sistema tra le parti interessate che si affidano a queste informazioni, aiuta a identificare eventuali aggiustamenti delle query necessari per soddisfare le differenze di sintassi o funzionali tra le piattaforme e stabilisce una base di riferimento quantificabile per determinare quando la migrazione può essere considerata completa e riuscita. Senza questi controlli sistematici, le sottili incongruenze dei dati potrebbero rimanere inosservate, portando potenzialmente a decisioni aziendali errate o minando la fiducia nell'intero progetto di migrazione.

## Importazione
<a name="postgres-ingestion"></a>

[Consigliamo di utilizzare [AWS Database Migration Service (DMS)](https://docs.aws.amazon.com//dms/latest/userguide/Welcome.html) con [codice sorgente come S3](https://docs.aws.amazon.com//dms/latest/userguide/CHAP_Source.S3.html) (sono supportati sia CSV che Parquet) con PostgreSQL come destinazione.](https://docs.aws.amazon.com//dms/latest/userguide/CHAP_Target.PostgreSQL.html) Per gli scenari in cui AWS DMS potrebbe non essere adatto ai tuoi requisiti specifici, forniamo un'utilità supplementare basata su Python ([PostgreSQL CSV Ingestion Tool) per la migrazione dei dati CSV da S3 a PostgreSQL](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/targets/rds_for_postgresql/README.md).

### Panoramica dello strumento di inserimento di file CSV di PostgreSQL
<a name="postgres-tool-overview"></a>

Lo strumento di inserimento CSV di PostgreSQL è un'utilità ad alte prestazioni progettata per caricare in modo efficiente i file CSV nei database PostgreSQL. Sfrutta il multithreading e il pool di connessioni per elaborare più file in parallelo, riducendo significativamente i tempi di caricamento dei dati. Consigliamo di eseguire questo script utilizzando un'istanza EC2. Prendi in considerazione l'utilizzo di tipi di istanze ottimizzati per le operazioni di rete, come C5N.

#### Funzionalità principali
<a name="key-features"></a>
+ Elaborazione multithread: carica più file CSV contemporaneamente.
+ Connessione in pool: gestisce in modo efficiente le connessioni al database.
+ Rilevamento automatico delle colonne: estrae dinamicamente i nomi delle colonne dalle intestazioni CSV.
+ Retry Logic: gestisce gli errori transitori con backoff esponenziale.
+ Gestione dei file; sposta i file elaborati in una directory designata in modo che i nuovi tentativi riprendano ma non si riavviino.
+ Registrazione completa: registri dettagliati per il monitoraggio e la risoluzione dei problemi.
+ Notifiche di errore: notifiche SNS opzionali per gli errori.
+ Credenziali sicure: recupera le password del database da Secrets Manager AWS .

*Prerequisiti e installazione*

Vedi i prerequisiti e l'installazione nel Readme dello strumento di [inserimento CSV di PostgreSQL](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/liveanalytics_migration_scripts/targets/rds_for_postgresql/README.md) in. GitHub

*Utilizzo*

```
python copy_postgres.py \
    --database 'postgres_testing' \
    --table 'demolarge_restored' \
    --csv-files-dir '/data/csv_files/*partition*/*.csv' \
    --host database-1.cluster-xxxxxxxx.us-east-1.rds.amazonaws.com \
    --secret-arn 'arn:aws:secretsmanager:<region>:<account_id>:secret:rds!cluster-xxxxx-xx-xx-xx-xxxxxxxx-xxxxx' \
    --sns-topic-arn 'arn:aws:sns:<region>:<account_id>:<topic_name>'
```

*Convalida*

Puoi utilizzare DynamoDB per le righe o i log esportati generati dallo strumento di esportazione di Timestream e confrontarli con le righe importate dai log di automazione di PostgreSQL Ingestion. È possibile effettuare un conteggio delle selezioni rispetto alle tabelle di origine e di destinazione con tempi di esportazione e importazione costanti. Se i dati vengono continuamente inseriti durante il processo di migrazione, i conteggi possono variare, quindi si consiglia di confrontare le righe esportate e le righe importanti della registrazione.

*Pulizia*
+ Pulisci i dati scaricati che sono stati creati come parte dello strumento di esportazione Timestream for. LiveAnalytics 
+ Elimina i dati e i log scaricati su EC2 per recuperare lo spazio.
+ Elimina la tabella DynamoDB se utilizzata per la registrazione come parte dello strumento Timestream for export. LiveAnalytics 

# Come funziona
<a name="how-it-works"></a>

Le seguenti sezioni forniscono una panoramica dei componenti del servizio Amazon Timestream for Live Analytics e del modo in cui interagiscono.

Dopo aver letto questa introduzione, consulta le [Accesso a Timestream per LiveAnalytics](accessing.md) sezioni per scoprire come accedere a Timestream for Live Analytics utilizzando la console, oppure. AWS CLI SDKs

**Topics**
+ [Amazon LiveAnalytics Timestream per concetti](concepts.md)
+ [Architecture](architecture.md)
+ [Scritture](writes.md)
+ [Archiviazione](storage.md)
+ [Query](queries.md)
+ [Query pianificate](scheduled-query.md)
+ [Timestream Compute Unit (TCU)](tcu.md)

# Amazon LiveAnalytics Timestream per concetti
<a name="concepts"></a>

 I dati delle serie temporali sono una sequenza di punti dati registrati in un intervallo di tempo. Questo tipo di dati viene utilizzato per misurare eventi che cambiano nel tempo. Gli esempi includono quanto segue.
+ Prezzi delle azioni nel tempo
+ Misurazioni della temperatura nel tempo
+ Utilizzo della CPU di un' EC2 istanza nel tempo

 Con i dati delle serie temporali, ogni punto dati è costituito da un timestamp, uno o più attributi e dall'evento che cambia nel tempo. Questi dati possono essere utilizzati per ricavare informazioni sulle prestazioni e sullo stato di un'applicazione, rilevare anomalie e identificare opportunità di ottimizzazione. Ad esempio, DevOps gli ingegneri potrebbero voler visualizzare i dati che misurano i cambiamenti nelle metriche delle prestazioni dell'infrastruttura. I produttori potrebbero voler tenere traccia dei dati dei sensori IoT che misurano i cambiamenti nelle apparecchiature all'interno di una struttura. I professionisti del marketing online potrebbero voler analizzare i dati clickstream che registrano il modo in cui un utente naviga su un sito Web nel tempo. Poiché i dati delle serie temporali vengono generati da più fonti in volumi estremamente elevati, devono essere raccolti in modo conveniente quasi in tempo reale e richiedono quindi uno storage efficiente che aiuti a organizzare e analizzare i dati. 

 Di seguito sono riportati i concetti chiave di Timestream for. LiveAnalytics 
+ **Serie temporali** - *Una sequenza di uno o più punti dati (o record) registrati in un intervallo di tempo*. Alcuni esempi sono il prezzo di un'azione nel tempo, l'utilizzo della CPU o della memoria di un' EC2 istanza nel tempo e la temperature/pressure lettura di un sensore IoT nel tempo.
+ **Record**: *un singolo punto dati in una serie temporale*.
+ **Dimensione**: *un attributo che descrive i metadati di una serie temporale*. Una dimensione è composta da un nome di dimensione e un valore di dimensione. Considerare i seguenti esempi: 
  + Quando si considera una borsa come dimensione, il nome della dimensione è «borsa» e il valore della dimensione è «NYSE»
  + Quando si considera una AWS regione come dimensione, il nome della dimensione è «regione» e il valore della dimensione è «us-east-1"
  + Per un sensore IoT, il nome della dimensione è «ID dispositivo» e il valore della dimensione è «12345"
+ **Misura**: *il valore effettivo misurato dal record*. Alcuni esempi sono il prezzo delle azioni, l'utilizzo della CPU o della memoria e la lettura della temperatura o dell'umidità. Le misure sono costituite da nomi e valori di misura. Considerare i seguenti esempi: 
  + Per il prezzo di un'azione, il nome della misura è «prezzo delle azioni» e il valore di misura è il prezzo effettivo delle azioni in un determinato momento. 
  + Per l'utilizzo della CPU, il nome della misura è «utilizzo della CPU» e il valore della misura è l'utilizzo effettivo della CPU.

  Le misure possono essere modellate in Timestream come record multimisura o a misura singola. LiveAnalytics Per ulteriori informazioni, consulta [Record multimisura vs. record a misura singola](data-modeling.md#data-modeling-multiVsinglerecords).
+ **Timestamp**: *indica quando è stata raccolta una misura per un determinato record*. Timestream for LiveAnalytics supporta timestamp con granularità di nanosecondi. 
+ **Tabella**: *un contenitore per un insieme di serie temporali* correlate. 
+ **Database**: *un contenitore di primo livello per le tabelle.* 

## Un riepilogo di Timestream for concepts LiveAnalytics
<a name="w2aab7c17c12c13"></a>

 **Un **database** contiene 0 o più tabelle.** Ogni **tabella** contiene 0 o più **serie temporali**. Ogni **serie temporale** è costituita da una sequenza di **record** su un determinato intervallo di tempo con una **granularità** specificata. **Ogni **serie temporale** può essere descritta utilizzando i relativi metadati o **dimensioni, i dati o le** **misure** e i relativi timestamp.** 

![\[Database structure showing tables, time series, and records with sample CPU measure values.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/concepts_simple.png)


# Architecture
<a name="architecture"></a>

Amazon Timestream for Live Analytics è stato progettato da zero per raccogliere, archiviare ed elaborare dati di serie temporali su larga scala. La sua architettura serverless supporta sistemi di acquisizione, archiviazione ed elaborazione delle query di dati completamente disaccoppiati, scalabili in modo indipendente. Questo design semplifica ogni sottosistema, facilitando il raggiungimento di un'affidabilità incrollabile, l'eliminazione dei colli di bottiglia legati alla scalabilità e la riduzione delle possibilità di guasti di sistema correlati. Ciascuno di questi fattori diventa più importante man mano che il sistema cresce. 

**Topics**
+ [Scrivi l'architettura](#architecture.writes)
+ [Architettura di storage](#architecture.storage)
+ [Architettura delle interrogazioni](#architecture.queries)
+ [Architettura cellulare](#cells)

![\[Timestream architecture diagram showing ingestion, storage, and query layers with AWS SDK interactions.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/ts-architecture.png)


## Scrivi l'architettura
<a name="architecture.writes"></a>

Durante la scrittura di dati di serie temporali, Amazon Timestream for Live Analytics indirizza le scritture per una tabella, una partizione, a un'istanza di storage di memoria con tolleranza ai guasti che elabora scritture di dati ad alto throughput. L'archivio di memoria a sua volta raggiunge la durabilità in un sistema di storage separato che replica i dati su tre zone di disponibilità (). AZs La replica si basa sul quorum in modo tale che la perdita di nodi o di un'intera zona di disponibilità non comprometta la disponibilità di scrittura. Quasi in tempo reale, altri nodi di storage in memoria si sincronizzano con i dati per rispondere alle richieste. Il lettore replica anche i nodi, per garantire un' AZs elevata disponibilità di lettura.

Timestream for Live Analytics supporta la scrittura dei dati direttamente nell'archivio magnetico, per applicazioni che generano dati in arrivo tardivo con un throughput inferiore. I dati in arrivo tardivo sono dati con un timestamp precedente all'ora corrente. Analogamente alle scritture ad alta velocità nell'archivio di memoria, i dati scritti nell'archivio magnetico vengono replicati su tre unità AZs e la replica si basa sul quorum.

Indipendentemente dal fatto che i dati vengano scritti nella memoria o nell'archivio magnetico, Timestream for Live Analytics indicizza e partiziona automaticamente i dati prima di scriverli sullo storage. Una singola tabella Timestream for Live Analytics può avere centinaia, migliaia o addirittura milioni di partizioni. Le singole partizioni non comunicano direttamente tra loro e non condividono alcun dato (architettura shared-nothing). Invece, il partizionamento di una tabella viene tracciato tramite un servizio di tracciamento e indicizzazione delle partizioni ad alta disponibilità. Ciò fornisce un'altra separazione delle preoccupazioni progettata specificamente per ridurre al minimo l'effetto dei guasti nel sistema e rendere molto meno probabili i guasti correlati.

## Architettura di storage
<a name="architecture.storage"></a>

 Quando i dati vengono archiviati in Timestream for Live Analytics, i dati vengono organizzati in ordine temporale e temporale in base agli attributi di contesto scritti con i dati. Avere uno schema di partizionamento che divida lo «spazio» oltre al tempo è importante per scalare in modo massiccio un sistema di serie temporali. Questo perché la maggior parte dei dati delle serie temporali viene scritta all'ora corrente o in prossimità di essa. Di conseguenza, il partizionamento basato solo sul tempo non consente di distribuire bene il traffico di scrittura o di eliminare efficacemente i dati al momento dell'interrogazione. Questo è importante per l'elaborazione di serie temporali su scala estrema e ha consentito a Timestream for Live Analytics di scalare ordini di grandezza superiori rispetto agli altri principali sistemi attualmente disponibili in modalità serverless. Le partizioni risultanti vengono chiamate «tessere» perché rappresentano divisioni di uno spazio bidimensionale (progettate per avere dimensioni simili). Le tabelle Timestream per Live Analytics iniziano come una singola partizione (riquadro), quindi si suddividono nella dimensione spaziale in base alla velocità di trasmissione. Quando i riquadri raggiungono una certa dimensione, vengono suddivisi nella dimensione temporale per ottenere un migliore parallelismo di lettura man mano che la dimensione dei dati aumenta. 

 Timestream for Live Analytics è progettato per gestire automaticamente il ciclo di vita dei dati delle serie temporali. Timestream for Live Analytics offre due archivi di dati: un archivio in memoria e un archivio magnetico conveniente. Supporta anche la configurazione di policy a livello di tabella per trasferire automaticamente i dati tra gli archivi. Le scritture dei dati ad alta velocità in entrata arrivano nell'archivio di memoria, dove i dati sono ottimizzati per le scritture, nonché le letture eseguite all'ora corrente per alimentare la dashboard e inviare avvisi di tipo query. Una volta trascorso il periodo di tempo principale necessario per le scritture, gli avvisi e la creazione di dashboard, i dati possono fluire automaticamente dall'archivio di memoria all'archivio magnetico per ottimizzare i costi. Timestream for Live Analytics consente di impostare una politica di conservazione dei dati nell'archivio di memoria per questo scopo. Le scritture dei dati per i dati in arrivo tardivo vengono scritte direttamente nell'archivio magnetico. 

 Una volta che i dati sono disponibili nell'archivio magnetico (a causa della scadenza del periodo di conservazione dell'archivio di memoria o a causa delle scritture dirette nell'archivio magnetico), vengono riorganizzati in un formato altamente ottimizzato per letture di dati di grandi volumi. L'archivio magnetico ha anche una politica di conservazione dei dati che può essere configurata se esiste una soglia temporale in cui i dati superano la loro utilità. Quando i dati superano l'intervallo di tempo definito per la politica di conservazione degli archivi magnetici, vengono rimossi automaticamente. Pertanto, con Timestream for Live Analytics, a parte alcune configurazioni, la gestione del ciclo di vita dei dati avviene senza problemi dietro le quinte. 

## Architettura delle interrogazioni
<a name="architecture.queries"></a>

Le query Timestream for Live Analytics sono espresse in una grammatica SQL con estensioni per il supporto specifico delle serie temporali (tipi di dati e funzioni specifici delle serie temporali), quindi la curva di apprendimento è semplice per gli sviluppatori che già conoscono SQL. Le query vengono quindi elaborate da un motore di query adattivo e distribuito che utilizza i metadati del servizio di tracciamento e indicizzazione dei riquadri per accedere e combinare senza problemi i dati tra gli archivi di dati al momento dell'emissione della query. Ciò garantisce un'esperienza molto apprezzata dai clienti, in quanto riduce molte delle complessità di Rube Goldberg in un'astrazione di database semplice e familiare. 

 Le query vengono eseguite da una flotta di lavoratori dedicata, in cui il numero di lavoratori arruolati per eseguire una determinata query è determinato dalla complessità della query e dalla dimensione dei dati. Le prestazioni per query complesse su set di dati di grandi dimensioni sono ottenute attraverso un parallelismo massiccio, sia sulla flotta di esecuzione delle query che sui parchi di storage del sistema. La capacità di analizzare enormi quantità di dati in modo rapido ed efficiente è uno dei maggiori punti di forza di Timestream for Live Analytics. Una singola query che viene eseguita su terabyte o addirittura petabyte di dati potrebbe avere migliaia di macchine che lavorano su tutte contemporaneamente. 

## Architettura cellulare
<a name="cells"></a>

 Per garantire che Timestream for Live Analytics possa offrire una scalabilità praticamente infinita per le vostre applicazioni, garantendo contemporaneamente una disponibilità del 99,99%, il sistema è progettato anche utilizzando un'architettura cellulare. *Invece di ridimensionare il sistema nel suo insieme, Timestream for Live Analytics si segmenta in più copie più piccole di se stesso, denominate celle.* Ciò consente di testare le cellule su vasta scala e impedisce che un problema di sistema in una cella influisca sull'attività di qualsiasi altra cella in una determinata regione. Sebbene Timestream for Live Analytics sia progettato per supportare più celle per regione, considera il seguente scenario fittizio, in cui ci sono 2 celle in una regione.

![\[Timestream architecture diagram showing ingestion, storage, and query layers for two cellular endpoints.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/ts-cellular-architecture.png)


 Nello scenario illustrato sopra, l'inserimento dei dati e le richieste di query vengono prima elaborate dall'endpoint di rilevamento rispettivamente per l'ingestione e l'interrogazione dei dati. Quindi, l'endpoint di rilevamento identifica la cella contenente i dati del cliente e indirizza la richiesta all'endpoint di acquisizione o interrogazione appropriato per quella cella. Quando si utilizza SDKs, queste attività di gestione degli endpoint vengono gestite in modo trasparente per te. 

**Nota**  
*Quando utilizzi gli endpoint VPC con Timestream for Live Analytics o accedi direttamente alle operazioni dell'API REST per Timestream for Live Analytics, dovrai interagire direttamente con gli endpoint cellulari.* Per indicazioni su come eseguire questa operazione, consulta [VPC Endpoints per istruzioni su come configurare gli endpoint](VPCEndpoints.md) VPC e [Endpoint Discovery Pattern per istruzioni sull'invocazione](Using.API.md) diretta delle operazioni dell'API REST.

# Scritture
<a name="writes"></a>

 Puoi raccogliere dati di serie temporali da dispositivi connessi, sistemi IT e apparecchiature industriali e scriverli in Timestream for Live Analytics. Timestream for Live Analytics consente di scrivere punti dati da una singola serie temporale di più serie and/or in un'unica richiesta di scrittura quando le serie temporali appartengono alla stessa tabella. Per tua comodità, Timestream for Live Analytics ti offre uno schema flessibile che rileva automaticamente i nomi delle colonne e i tipi di dati per le tue tabelle Timestream for Live Analytics in base ai nomi delle dimensioni e ai tipi di dati dei valori di misura specificati quando richiami le scritture nel database. Puoi anche scrivere batch di dati in Timestream for Live Analytics.

**Nota**  
 Timestream for Live Analytics supporta l'eventuale semantica di coerenza per le letture. Ciò significa che quando si interrogano i dati immediatamente dopo aver scritto un batch di dati in Timestream for Live Analytics, i risultati della query potrebbero non riflettere i risultati di un'operazione di scrittura completata di recente. I risultati possono includere anche alcuni dati obsoleti. Analogamente, durante la scrittura di dati di serie temporali con una o più nuove dimensioni, una query può restituire un sottoinsieme parziale di colonne per un breve periodo di tempo. Se ripeti queste richieste di query dopo un breve periodo, i risultati dovrebbero restituire i dati più recenti. 

 È possibile scrivere dati utilizzando [AWS SDKs[AWS CLI](Tools.CLI.md)](getting-started-sdks.md), o tramite[AWS Lambda](Lambda.md),[AWS IoT Core](IOT-Core.md),[Servizio gestito da Amazon per Apache Flink](ApacheFlink.md), [Amazon Kinesis](Kinesis.md)[Amazon MSK](MSK.md), e[Telegraf open source](Telegraf.md). 

**Topics**
+ [Tipi di dati](#writes.data-types)
+ [Nessuna definizione iniziale dello schema](#writes.no-upfront-schema)
+ [Scrittura di dati (inserti e sconvolgimenti)](#writes.writing-data-inserts-upserts)
+ [Coerenza finale per le letture](#writes.eventual-consistency)
+ [Scritture in batch con API WriteRecords](writes.batching-writes.md)
+ [Caricamento in batch](batch-load-how.md)
+ [Scelta tra il funzionamento dell' WriteRecords API e il caricamento in batch](writes.writes-or-batch-load.md)

## Tipi di dati
<a name="writes.data-types"></a>

 Timestream for Live Analytics supporta i seguenti tipi di dati per le scritture.


| Tipo di dati | Description | 
| --- | --- | 
|  BIGINT  |   Rappresenta un numero intero con segno a 64 bit.   | 
|  BOOLEAN  |   Rappresenta i due valori di verità della logica, vale a dire vero e falso.   | 
|  DOUBLE  |   Precisione variabile a 64 bit che implementa lo standard IEEE 754 per l'aritmetica binaria a virgola mobile.   Esistono funzioni del linguaggio di interrogazione e valori doppi che possono essere utilizzati nelle query. `Infinity` `NaN` Ma non puoi scrivere quei valori su Timestream.   | 
|  VARCHAR  |   Dati di caratteri a lunghezza variabile con una lunghezza massima opzionale. Il limite massimo è 2 KB.   | 
|  MULTI  |   Tipo di dati per record multimisura. Questo tipo di dati include una o più misure di tipo`BIGINT`,`BOOLEAN`, `DOUBLE``VARCHAR`, e`TIMESTAMP`.   | 
|  TIMESTAMP  |   Rappresenta un'istanza temporale che utilizza l'ora di precisione in nanosecondi in UTC, registrando il tempo trascorso dall'ora Unix. Questo tipo di dati è attualmente supportato solo per i record multimisura (ovvero all'interno di valori di misura di tipo). `MULTI`  `YYYY-MM-DD hh:mm:ss.sssssssss` Le scritture supportano i timestamp compresi nell'intervallo di. `1970-01-01 00:00:00.000000000` `2262-04-11 23:47:16.854775807`  | 

## Nessuna definizione iniziale dello schema
<a name="writes.no-upfront-schema"></a>

 Prima di inviare dati in Amazon Timestream for Live Analytics, devi creare un database e una tabella utilizzando Console di gestione AWS le operazioni API Timestream for Live SDKs Analytics o Timestream for Live Analytics. Per ulteriori informazioni, consultare [Creazione di un database](console_timestream.md#console_timestream.db.using-console) e [Creare una tabella](console_timestream.md#console_timestream.table.using-console). Durante la creazione della tabella, non è necessario definire lo schema in anticipo. Amazon Timestream for Live Analytics rileva automaticamente lo schema in base alle misure e alle dimensioni dei punti dati inviati, quindi non è più necessario modificare lo schema offline per adattarlo ai dati delle serie temporali in rapida evoluzione. 

## Scrittura di dati (inserti e sconvolgimenti)
<a name="writes.writing-data-inserts-upserts"></a>

 *L'operazione di scrittura in Amazon Timestream for Live Analytics consente di inserire e modificare dati.* Per impostazione predefinita, le scritture in Amazon Timestream for Live Analytics seguono la semantica *del primo scrittore* vince, in cui i dati vengono archiviati solo come aggiunta e i record duplicati vengono rifiutati. Sebbene il primo scrittore vinca la semantica soddisfi i requisiti di molte applicazioni di serie temporali, ci sono scenari in cui le applicazioni devono aggiornare i record esistenti in modo idempotente e/o scrivere dati con l'ultimo scrittore vince la semantica, in cui il record con la versione più alta viene archiviato nel servizio. Per affrontare questi scenari, Amazon Timestream for Live Analytics offre la possibilità di modificare i dati. Upsert è un'operazione che inserisce un record nel sistema quando il record non esiste o aggiorna il record quando ne esiste uno. Quando il record viene aggiornato, viene aggiornato in modo idempotente. 

Non esiste un'operazione a livello di record per l'eliminazione. Ma le tabelle e i database possono essere eliminati.

**Scrittura di dati nell'archivio di memoria e nell'archivio magnetico**

Amazon Timestream for Live Analytics offre la possibilità di scrivere direttamente i dati nell'archivio di memoria e nell'archivio magnetico. L'archivio di memoria è ottimizzato per le scritture di dati ad alto throughput e l'archivio magnetico è ottimizzato per scritture con throughput inferiore di dati in arrivo tardivo.

I dati in arrivo tardivo sono dati con un timestamp precedente all'ora corrente e al di fuori del periodo di conservazione dell'archivio di memoria. È necessario abilitare esplicitamente la capacità di scrivere dati in arrivo tardivo nell'archivio magnetico abilitando le scritture nell'archivio magnetico per la tabella. Inoltre, `MagneticStoreRejectedDataLocation` viene definito quando viene creata una tabella. Per scrivere nell'archivio magnetico, i chiamanti `WriteRecords` devono disporre delle `S3:PutObject` autorizzazioni per il bucket S3 specificate durante la creazione della tabella. `MagneticStoreRejectedDataLocation` Per ulteriori informazioni, consultare [CreateTable](https://docs.aws.amazon.com/timestream/latest/developerguide/API_CreateTable.html), [WriteRecords](https://docs.aws.amazon.com/timestream/latest/developerguide/API_WriteRecords.html) e [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html).

**Scrittura di dati con record a misura singola e record a più misure**

Amazon Timestream for Live Analytics offre la possibilità di scrivere dati utilizzando due tipi di record, vale a dire record a singola misura e record multimisura.

**Record a misura singola**

I record a misura singola consentono di inviare una singola misura per record. Quando i dati vengono inviati a Timestream for Live Analytics utilizzando questo formato, Timestream for Live Analytics crea una riga di tabella per record. Ciò significa che se un dispositivo emette 4 metriche e ciascuna metrica viene inviata come record a misura singola, Timestream for Live Analytics creerà 4 righe nella tabella per memorizzare questi dati e gli attributi del dispositivo verranno ripetuti per ogni riga. Questo formato è consigliato nei casi in cui si desidera monitorare una singola metrica da un'applicazione o quando l'applicazione non emette più metriche contemporaneamente.

**Record multimisura**

Con i record con più misure, è possibile memorizzare più misure in una singola riga della tabella, anziché archiviare una misura per riga della tabella. I record multimisura consentono quindi di migrare i dati esistenti dai database relazionali ad Amazon Timestream for Live Analytics con modifiche minime. 

Puoi anche raggruppare più dati in una singola richiesta di scrittura rispetto ai record a misura singola. Ciò aumenta la velocità di scrittura e le prestazioni dei dati e riduce anche il costo delle scritture dei dati. Questo perché raggruppare più dati in una richiesta di scrittura consente ad Amazon Timestream for Live Analytics di identificare più dati ripetibili in una singola richiesta di scrittura (ove applicabile) e addebitare una sola volta per i dati ripetuti.

**Topics**
+ [Record multimisura](#writes.writing-data-multi-measure)
+ [Scrittura di dati con un timestamp esistente nel passato o nel futuro](#writes.timestamp-past-future)

### Record multimisura
<a name="writes.writing-data-multi-measure"></a>

Con i record multimisura, è possibile archiviare i dati delle serie temporali in un formato più compatto nella memoria e nell'archivio magnetico, il che aiuta a ridurre i costi di archiviazione dei dati. Inoltre, l'archiviazione compatta dei dati si presta alla scrittura di query più semplici per il recupero dei dati, migliora le prestazioni delle query e riduce il costo delle query.

Inoltre, i record multimisura supportano anche il tipo di dati TIMESTAMP per l'archiviazione di più di un timestamp in un record di serie temporali. Gli attributi TIMESTAMP in un record multimisura supportano i timestamp futuri o passati. I record multimisura aiutano quindi a migliorare le prestazioni, i costi e la semplicità delle query e offrono una maggiore flessibilità per l'archiviazione di diversi tipi di misure correlate.

**Vantaggi**

Di seguito sono riportati i vantaggi dell'utilizzo di record con più misure.
+ **Prestazioni e costi**: i record multimisura consentono di scrivere più misure di serie temporali in un'unica richiesta di scrittura. Ciò aumenta la velocità di scrittura e riduce anche il costo delle scritture. Con i record multimisura, è possibile archiviare i dati in modo più compatto, il che aiuta a ridurre i costi di archiviazione dei dati. L'archiviazione compatta dei record multimisura comporta una riduzione dei dati elaborati dalle query. Questo è progettato per migliorare le prestazioni complessive delle query e contribuire a ridurre i costi delle query.
+ **Semplicità delle query**: con i record multimisura, non è necessario scrivere espressioni di tabella comuni complesse (CTEs) in una query per leggere più misure con lo stesso timestamp. Questo perché le misure vengono memorizzate come colonne in un'unica riga della tabella. I record multimisura consentono quindi di scrivere query più semplici.
+ **Flessibilità di modellazione dei dati**: puoi scrivere timestamp futuri in Timestream for Live Analytics utilizzando il tipo di dati TIMESTAMP e i record multimisura. Un record multimisura può avere più attributi del tipo di dati TIMESTAMP, oltre al campo time in un record. Gli attributi TIMESTAMP, in un record multimisura, possono avere timestamp futuri o passati e comportarsi come il campo time, tranne per il fatto che Timestream for Live Analytics non indicizza i valori di tipo TIMESTAMP in un record multimisura.

**Casi d’uso**

È possibile utilizzare record multimisura per qualsiasi applicazione di serie temporali che generi più di una misurazione dallo stesso dispositivo in un dato momento. Di seguito sono riportati alcuni esempi di applicazioni.
+ Una piattaforma di streaming video che genera centinaia di metriche contemporaneamente.
+ Dispositivi medici che generano misurazioni come i livelli di ossigeno nel sangue, la frequenza cardiaca e il polso.
+ Apparecchiature industriali come piattaforme petrolifere che generano sensori metrici, di temperatura e meteorologici.
+ Altre applicazioni progettate con uno o più microservizi.

#### Esempio: monitoraggio delle prestazioni e dello stato di un'applicazione di streaming video
<a name="writes.writing-data-multi-measure-example1"></a>

Prendi in considerazione un'applicazione di streaming video in esecuzione su 200 istanze EC2. Vuoi utilizzare Amazon Timestream for Live Analytics per archiviare e analizzare le metriche emesse dall'applicazione, in modo da poter comprendere le prestazioni e lo stato della tua applicazione, identificare rapidamente anomalie, risolvere problemi e scoprire opportunità di ottimizzazione. 

Modelleremo questo scenario con record a singola misura e record a più misure, quindi con entrambi gli approcci. compare/contrast Per ogni approccio, facciamo le seguenti ipotesi.
+ Ogni istanza EC2 emette quattro misure (video\$1startup\$1time, rebuffering\$1ratio, video\$1playback\$1failures e average\$1frame\$1rate) e quattro dimensioni (device\$1id, device\$1type, os\$1version e region) al secondo. 
+ Vuoi archiviare 6 ore di dati nell'archivio di memoria e 6 mesi di dati nell'archivio magnetico.
+ Per identificare le anomalie, hai impostato 10 query che vengono eseguite ogni minuto per identificare eventuali attività insolite negli ultimi minuti. Hai anche creato una dashboard con otto widget che visualizzano i dati delle ultime 6 ore, in modo da poter monitorare efficacemente la tua applicazione. Questa dashboard è accessibile da cinque utenti alla volta e viene aggiornata automaticamente ogni ora.

##### Utilizzo di record a misura singola
<a name="writes.writing-data-multi-measure-example1-sm"></a>

**Modellazione dei dati**: con i record a singola misura, creeremo un record per ciascuna delle quattro misure (tempo di avvio del video, rapporto di rebuffering, errori di riproduzione video e frame rate medio). Ogni record avrà le quattro dimensioni (device\$1id, device\$1type, os\$1version e region) e un timestamp. 

**Scrive**: quando scrivi dati in Amazon Timestream for Live Analytics, i record vengono costruiti come segue.

```
public void writeRecords() {
    System.out.println("Writing records");
    // Specify repeated values for all records
    List<Record> records = new ArrayList<>();
    final long time = System.currentTimeMillis();
 
    List<Dimension> dimensions = new ArrayList<>();
    
    final Dimension device_id = new Dimension().withName("device_id").withValue("12345678");
    final Dimension device_type = new Dimension().withName("device_type").withValue("iPhone 11");
    final Dimension os_version = new Dimension().withName("os_version").withValue("14.8");
    final Dimension region = new Dimension().withName("region").withValue("us-east-1");
 
    dimensions.add(device_id);
    dimensions.add(device_type);
    dimensions.add(os_version);
    dimensions.add(region);
 
    Record videoStartupTime = new Record()
        .withDimensions(dimensions)
        .withMeasureName("video_startup_time")
        .withMeasureValue("200")
        .withMeasureValueType(MeasureValueType.BIGINT)
        .withTime(String.valueOf(time));
    Record rebufferingRatio = new Record()
        .withDimensions(dimensions)
        .withMeasureName("rebuffering_ratio")
        .withMeasureValue("0.5")
        .withMeasureValueType(MeasureValueType.DOUBLE)
        .withTime(String.valueOf(time));
    Record videoPlaybackFailures = new Record()
        .withDimensions(dimensions)
        .withMeasureName("video_playback_failures")
        .withMeasureValue("0")
        .withMeasureValueType(MeasureValueType.BIGINT)
        .withTime(String.valueOf(time));
    Record averageFrameRate = new Record()
        .withDimensions(dimensions)
        .withMeasureName("average_frame_rate")
        .withMeasureValue("0.5")
        .withMeasureValueType(MeasureValueType.DOUBLE)
        .withTime(String.valueOf(time));

    records.add(videoStartupTime);
    records.add(rebufferingRatio); 
    records.add(videoPlaybackFailures);
    records.add(averageFrameRate);
 
    WriteRecordsRequest writeRecordsRequest = new WriteRecordsRequest()
        .withDatabaseName(DATABASE_NAME)
        .withTableName(TABLE_NAME)
        .withRecords(records);
 
    try {
      WriteRecordsResult writeRecordsResult = amazonTimestreamWrite.writeRecords(writeRecordsRequest);
      System.out.println("WriteRecords Status: " + writeRecordsResult.getSdkHttpMetadata().getHttpStatusCode());
    } catch (RejectedRecordsException e) {
      System.out.println("RejectedRecords: " + e);
      for (RejectedRecord rejectedRecord : e.getRejectedRecords()) {
        System.out.println("Rejected Index " + rejectedRecord.getRecordIndex() + ": "
            + rejectedRecord.getReason());
      }
      System.out.println("Other records were written successfully. ");
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }
  }
```

Quando memorizzi record a misura singola, i dati vengono rappresentati logicamente come segue.


| Orario | device\$1id | tipo\$1dispositivo | os\$1version | region | measure\$1name | measure\$1value::bigint | measure\$1value::double | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
|  2021-09-07 21:48:44 .000000000  |  12345678  |  iPhone 11  |  14.8  |  us-east-1  |  ora di avvio del video  |  200  |    | 
|  2021-09-07 21:48:44 .000000000  |  12345678  |  iPhone 11  |  14.8  |  us-east-1  |  rebuffering\$1ratio  |    |  0,5  | 
|  2021-09-07 21:48:44 .000000000  |  12345678  |  iPhone 11  |  14.8  |  us-east-1  |  guasti alla riproduzione video  |  0  |    | 
|  2021-09-07 21:48:44 .000000000  |  12345678  |  iPhone 11  |  14.8  |  us-east-1  |  frequenza\$1frame\$1rate medio  |    |  0,85  | 
|  2021-09-07 21:53:44 .000000000  |  12345678  |  iPhone 11  |  14.8  |  us-east-1  |  ora di avvio del video  |  500  |    | 
|  2021-09-07 21:53:44 .000000000  |  12345678  |  iPhone 11  |  14.8  |  us-east-1  |  rebuffering\$1ratio  |    |  1.5  | 
|  2021-09-07 21:53:44 .000000000  |  12345678  |  iPhone 11  |  14.8  |  us-east-1  |  guasti alla riproduzione video  |  10  |    | 
|  2021-09-07 21:53:44 .000000000  |  12345678  |  iPhone 11  |  14.8  |  us-east-1  |  frequenza\$1frame\$1rate medio  |    |  0.2  | 

**Interrogazioni**: puoi scrivere una query che recuperi tutti i punti dati con lo stesso timestamp ricevuti negli ultimi 15 minuti come segue.

```
with cte_video_startup_time as ( SELECT time, device_id, device_type, os_version, region, measure_value::bigint as video_startup_time FROM table where time >= ago(15m) and measure_name=”video_startup_time”),
cte_rebuffering_ratio as ( SELECT time, device_id, device_type, os_version, region, measure_value::double as rebuffering_ratio FROM table where time >= ago(15m) and measure_name=”rebuffering_ratio”),
cte_video_playback_failures as ( SELECT time, device_id, device_type, os_version, region, measure_value::bigint as video_playback_failures FROM table where time >= ago(15m) and measure_name=”video_playback_failures”),
cte_average_frame_rate as ( SELECT time, device_id, device_type, os_version, region, measure_value::double as average_frame_rate FROM table where time >= ago(15m) and measure_name=”average_frame_rate”)
SELECT a.time, a.device_id, a.os_version, a.region, a.video_startup_time, b.rebuffering_ratio, c.video_playback_failures, d.average_frame_rate FROM cte_video_startup_time a, cte_buffering_ratio b, cte_video_playback_failures c, cte_average_frame_rate d WHERE
a.time = b.time AND a.device_id = b.device_id AND a.os_version = b.os_version AND a.region=b.region AND
a.time = c.time AND a.device_id = c.device_id AND a.os_version = c.os_version AND a.region=c.region AND
a.time = d.time AND a.device_id = d.device_id AND a.os_version = d.os_version AND a.region=d.region
```

**Costo del carico di lavoro**: il costo di questo carico di lavoro è stimato in 373,23 dollari al mese con record a misura singola

##### Utilizzo di record a più misure
<a name="writes.writing-data-multi-measure-example1-mm"></a>

**Modellazione dei dati**: con i record multimisura, creeremo un record che contiene tutte e quattro le misure (tempo di avvio del video, rapporto di rebuffering, errori di riproduzione video e frame rate medio), tutte e quattro le dimensioni (device\$1id, device\$1type, os\$1version e region) e un timestamp. 

**Scrive**: quando scrivi dati in Amazon Timestream for Live Analytics, i record vengono costruiti come segue.

```
public void writeRecords() {
    System.out.println("Writing records");
    // Specify repeated values for all records
    List<Record> records = new ArrayList<>();
    final long time = System.currentTimeMillis();
 
    List<Dimension> dimensions = new ArrayList<>();
    
    final Dimension device_id = new Dimension().withName("device_id").withValue("12345678");
    final Dimension device_type = new Dimension().withName("device_type").withValue("iPhone 11");
    final Dimension os_version = new Dimension().withName("os_version").withValue("14.8");
    final Dimension region = new Dimension().withName("region").withValue("us-east-1");
 
    dimensions.add(device_id);
    dimensions.add(device_type);
    dimensions.add(os_version);
    dimensions.add(region);
 
    Record videoMetrics = new Record()
        .withDimensions(dimensions)
        .withMeasureName("video_metrics")
        .withTime(String.valueOf(time));
        .withMeasureValueType(MeasureValueType.MULTI)
        .withMeasureValues(
          new MeasureValue()
        	.withName("video_startup_time")
        	.withValue("0")
        	.withValueType(MeasureValueType.BIGINT),
        	new MeasureValue()
		.withName("rebuffering_ratio")
        	.withValue("0.5")
        	.withType(MeasureValueType.DOUBLE),
          new MeasureValue()
        	.withName("video_playback_failures")
        	.withValue("0")
        	.withValueType(MeasureValueType.BIGINT),
		 new MeasureValue()
         	.withName("average_frame_rate")
        	.withValue("0.5")
        	.withValueType(MeasureValueType.DOUBLE))
 
    records.add(videoMetrics);
 
    WriteRecordsRequest writeRecordsRequest = new WriteRecordsRequest()
        .withDatabaseName(DATABASE_NAME)
        .withTableName(TABLE_NAME)
        .withRecords(records);
 
    try {
      WriteRecordsResult writeRecordsResult = amazonTimestreamWrite.writeRecords(writeRecordsRequest);
      System.out.println("WriteRecords Status: " + writeRecordsResult.getSdkHttpMetadata().getHttpStatusCode());
    } catch (RejectedRecordsException e) {
      System.out.println("RejectedRecords: " + e);
      for (RejectedRecord rejectedRecord : e.getRejectedRecords()) {
        System.out.println("Rejected Index " + rejectedRecord.getRecordIndex() + ": "
            + rejectedRecord.getReason());
      }
      System.out.println("Other records were written successfully. ");
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }
  }
```

Quando memorizzi record multimisura, i dati vengono rappresentati logicamente come segue.


| Orario | device\$1id | tipo\$1dispositivo | os\$1version | region | measure\$1name | ora di avvio del video | rebuffering\$1ratio | fallimenti\$1riproduzione\$1video | frequenza\$1fotogrammi media | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
|  2021-09-07 21:48:44 .000000000  |  12345678  |  iPhone 11  |  14.8  |  us-east-1  |  metriche video  |  200  |  0,5  |  0  |  0,85  | 
|  2021-09-07 21:53:44 .000000000  |  12345678  |  iPhone 11  |  14.8  |  us-east-1  |  metriche video  |  500  |  1.5  |  10  |  0.2  | 

**Interrogazioni**: puoi scrivere una query che recuperi tutti i punti dati con lo stesso timestamp ricevuti negli ultimi 15 minuti come segue.

```
SELECT time, device_id, device_type, os_version, region, video_startup_time, rebuffering_ratio, video_playback_failures, average_frame_rate FROM table where time >= ago(15m)
```

**Costo del carico di lavoro: il costo** del carico di lavoro è stimato in 127,43 dollari con record multimisura.

**Nota**  
In questo caso, l'utilizzo di record multimisura riduce la spesa mensile complessiva stimata di 2,5 volte, con i costi di scrittura dei dati ridotti di 3,3 volte, i costi di storage ridotti di 3,3 volte e il costo delle query ridotto di 1,2 volte.

### Scrittura di dati con un timestamp esistente nel passato o nel futuro
<a name="writes.timestamp-past-future"></a>

Timestream for Live Analytics offre la possibilità di scrivere dati con un timestamp che si trova al di fuori della finestra di conservazione dell'archivio di memoria attraverso un paio di meccanismi diversi.
+ **Scritture nell'archivio magnetico**: è possibile scrivere i dati in arrivo tardivo direttamente nell'archivio magnetico tramite le scritture nell'archivio magnetico. Per utilizzare le scritture sull'archivio magnetico, è necessario prima abilitare le scritture sull'archivio magnetico per una tabella. È quindi possibile inserire i dati nella tabella utilizzando lo stesso meccanismo utilizzato per scrivere i dati nell'archivio di memoria. Amazon Timestream for Live Analytics scriverà automaticamente i dati nell'archivio magnetico in base al relativo timestamp.
**Nota**  
La write-to-read latenza per l'archivio magnetico può arrivare fino a 6 ore, a differenza della scrittura dei dati nell'archivio di memoria, dove la write-to-read latenza è inferiore al secondo.
+ **Tipo di dati TIMESTAMP per le misure**: puoi utilizzare il tipo di dati TIMESTAMP per archiviare dati passati, presenti o futuri. Un record multimisura può avere più attributi del tipo di dati TIMESTAMP, oltre al campo orario in un record. Gli attributi TIMESTAMP, in un record multimisura, possono avere timestamp futuri o passati e comportarsi come il campo time, tranne per il fatto che Timestream for Live Analytics non indicizza i valori di tipo TIMESTAMP in un record multimisura.
**Nota**  
Il tipo di dati TIMESTAMP è supportato solo per i record multimisura.

## Coerenza finale per le letture
<a name="writes.eventual-consistency"></a>

Timestream for Live Analytics supporta l'eventuale semantica di coerenza per le letture. Ciò significa che quando si interrogano i dati immediatamente dopo aver scritto un batch di dati in Timestream for Live Analytics, i risultati della query potrebbero non riflettere i risultati di un'operazione di scrittura completata di recente. Se ripeti queste richieste di query dopo poco tempo, i risultati dovrebbero restituire i dati più recenti. 

# Scritture in batch con API WriteRecords
<a name="writes.batching-writes"></a>

Amazon Timestream for Live Analytics ti consente di scrivere punti dati da una singola and/or serie temporale da più serie in un'unica richiesta di scrittura. Il raggruppamento di più punti dati in un'unica operazione di scrittura è vantaggioso dal punto di vista delle prestazioni e dei costi. Per maggiori [Scritture](metering-and-pricing.writes.md) dettagli, consulta la sezione Misurazione e prezzi.

**Nota**  
Le tue richieste di scrittura a Timestream for Live Analytics potrebbero essere limitate man mano che Timestream for Live Analytics si adatta alle esigenze di acquisizione dei dati della tua applicazione. Se le applicazioni presentano eccezioni di limitazione, è necessario continuare a inviare dati con la stessa velocità di trasmissione (o superiore) per consentire a Timestream for Live Analytics di adattarsi automaticamente alle esigenze dell'applicazione. 

# Caricamento in batch
<a name="batch-load-how"></a>

Con *il caricamento in batch* per Amazon Timestream LiveAnalytics for, puoi importare file CSV archiviati in Amazon S3 in Timestream in batch. Con questa nuova funzionalità, puoi conservare i tuoi dati in Timestream LiveAnalytics senza dover fare affidamento su altri strumenti o scrivere codice personalizzato. Puoi utilizzare il caricamento in batch per completare i dati con tempi di attesa flessibili, ad esempio dati che non sono immediatamente necessari per l'interrogazione o l'analisi.

È possibile creare attività di caricamento in batch utilizzando Console di gestione AWS AWS CLI, the e. AWS SDKs Per ulteriori informazioni, consultare [Utilizzo del caricamento in batch con la console](batch-load-using-console.md), [Utilizzo del caricamento in batch con AWS CLI](batch-load-using-cli.md) e [Utilizzo del caricamento in batch con AWS SDKs](batch-load-using-sdk.md).

Per ulteriori informazioni sul caricamento in batch, vedere[Utilizzo del caricamento in batch in Timestream per LiveAnalytics](batch-load.md).

# Scelta tra il funzionamento dell' WriteRecords API e il caricamento in batch
<a name="writes.writes-or-batch-load"></a>

Con il funzionamento dell' WriteRecords API, puoi scrivere i dati delle serie temporali di streaming in Timestream LiveAnalytics così come vengono generati dal tuo sistema. Utilizzando WriteRecords, puoi importare continuamente un singolo punto dati o lotti di dati più piccoli in tempo reale. Timestream for ti LiveAnalytics offre uno schema flessibile che rileva automaticamente i nomi delle colonne e i tipi di dati per il tuo Timestream per le LiveAnalytics tabelle, in base ai nomi delle dimensioni e ai tipi di dati dei punti dati specificati quando richiami le scritture nel database. 

Al contrario, il *caricamento in batch* consente l'inserimento affidabile di dati di serie temporali in batch dai file di origine (file CSV) in Timestream for, utilizzando un modello di dati definito dall'utente. LiveAnalytics Alcuni esempi di quando utilizzare il caricamento in batch con un file sorgente sono l'importazione in blocco di dati di serie temporali per la valutazione di Timestream LiveAnalytics tramite un proof of concept, l'importazione in blocco di dati di serie temporali da un dispositivo IoT che è rimasto offline per qualche tempo e la migrazione di dati storici di serie temporali da Amazon S3 a Timestream for. LiveAnalytics Per informazioni sul caricamento in [Utilizzo del caricamento in batch in Timestream per LiveAnalytics](batch-load.md) batch, consulta.

Entrambe le soluzioni sono sicure, affidabili e performanti.

**Da utilizzare WriteRecords quando:**
+ Streaming di quantità inferiori (meno di 10 MB) di dati per richiesta.
+ Inserimento di tabelle esistenti.
+ Acquisizione di dati da un flusso di log.
+ Esecuzione di analisi in tempo reale.
+ Richiede una latenza inferiore.

**Utilizza il caricamento in batch quando:**
+ Inserimento di grandi quantità di dati provenienti da Amazon S3 in file CSV. Per ulteriori informazioni sui limiti, consulta [QuoteQuote di default](ts-limits.md).
+ Inserimento di nuove tabelle, ad esempio nel caso di una migrazione di dati.
+ Arricchimento dei database con dati storici (inserimento in nuove tabelle).
+ Hai dati di origine che cambiano lentamente o non cambiano affatto.
+ I tempi di attesa sono flessibili perché un'attività di caricamento in batch potrebbe rimanere in sospeso fino a quando le risorse non saranno disponibili, soprattutto se si carica una grande quantità di dati. Il caricamento in batch è adatto per dati che non devono essere immediatamente disponibili per l'interrogazione o l'analisi per aggiungere maggiore chiarezza.

# Archiviazione
<a name="storage"></a>

Timestream for Live Analytics archivia e organizza i dati delle serie temporali per ottimizzare i tempi di elaborazione delle query e ridurre i costi di archiviazione. Offre lo storage dei dati su più livelli e supporta due livelli di archiviazione: un archivio di memoria e un archivio magnetico. L'archivio di memoria è ottimizzato per scritture di dati ad alta velocità e query veloci. point-in-time L'archivio magnetico è ottimizzato per velocità di trasmissione inferiori, scritture di dati in arrivo tardivo, archiviazione di dati a lungo termine e query analitiche veloci. 

Timestream for Live Analytics garantisce la durabilità dei dati replicando automaticamente i dati di memoria e archiviazione magnetica in diverse zone di disponibilità all'interno di un'unica soluzione. Regione AWS Tutti i dati vengono scritti su disco prima di confermare che la richiesta di scrittura è completa. 

Timestream for Live Analytics consente di configurare le politiche di conservazione per spostare i dati dall'archivio di memoria all'archivio magnetico. Quando i dati raggiungono il valore configurato, Timestream for Live Analytics sposta automaticamente i dati nell'archivio magnetico. È inoltre possibile impostare un valore di conservazione sull'archivio magnetico. Quando i dati scadono dall'archivio magnetico, vengono eliminati definitivamente. 

Ad esempio, si consideri uno scenario in cui si configura l'archivio di memoria per contenere dati per una settimana e l'archivio magnetico per contenere dati per 1 anno. L'età dei dati viene calcolata utilizzando il timestamp associato al punto dati. Quando i dati nell'archivio di memoria risalgono a una settimana, vengono automaticamente spostati nell'archivio magnetico. Vengono quindi mantenuti nell'archivio magnetico per un anno. Quando i dati hanno un anno, vengono eliminati da Timestream for Live Analytics. I valori di conservazione dell'archivio di memoria e dell'archivio magnetico definiscono cumulativamente la quantità di tempo in cui i dati verranno archiviati in Timestream for Live Analytics. Ciò significa che per lo scenario precedente, dal momento dell'arrivo dei dati, i dati vengono archiviati in Timestream for Live Analytics per un periodo totale di 1 anno e 1 settimana. 

**Nota**  
Quando si aggiorna il periodo di conservazione della memoria o dell'archivio magnetico, la modifica alla conservazione ha effetto da quel momento in poi. Ad esempio, se il periodo di conservazione dell'archivio di memoria è stato impostato su 2 ore e poi modificato su 24 ore aggiornando le politiche di conservazione della tabella, l'archivio di memoria sarà in grado di contenere 24 ore di dati, ma verrà popolato con 24 ore di dati 22 ore dopo la modifica. Timestream for Live Analytics non recupera i dati dall'archivio magnetico per popolare l'archivio di memoria. 

Per garantire la sicurezza dei dati delle serie temporali, i dati in Timestream for Live Analytics sono sempre crittografati per impostazione predefinita. Questo vale per i dati in transito e a riposo. Inoltre, Timestream for Live Analytics consente di utilizzare chiavi gestite dai clienti per proteggere i dati nell'archivio magnetico. Per ulteriori informazioni sulle chiavi gestite dai clienti, consulta. [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) 

# Query
<a name="queries"></a>

Con Timestream for Live Analytics, puoi archiviare e analizzare facilmente metriche DevOps, dati dei sensori per applicazioni IoT e dati di telemetria industriale per la manutenzione delle apparecchiature, oltre a molti altri casi d'uso. Il motore di query adattivo appositamente progettato in Timestream for Live Analytics consente di accedere ai dati su più livelli di archiviazione utilizzando una singola istruzione SQL. Accede e combina in modo trasparente i dati tra diversi livelli di storage senza che sia necessario specificare la posizione dei dati. Puoi usare SQL per interrogare i dati in Timestream for Live Analytics per recuperare i dati delle serie temporali da una o più tabelle. È possibile accedere alle informazioni sui metadati per database e tabelle. Timestream for Live Analytics SQL supporta anche funzioni integrate per l'analisi delle serie temporali. Puoi fare riferimento al [Riferimento al linguaggio di interrogazione](reference.md) riferimento per ulteriori dettagli. 

Timestream for Live Analytics è progettato per avere un'architettura di acquisizione, archiviazione e interrogazione dei dati completamente disaccoppiata, in cui ogni componente può scalare indipendentemente dagli altri componenti (consentendogli di offrire una scalabilità praticamente infinita per le esigenze di un'applicazione). Ciò significa che Timestream for Live Analytics non si «ribalta» quando le applicazioni inviano centinaia di terabyte di dati al giorno o eseguono milioni di query che elaborano piccole o grandi quantità di dati. Man mano che i dati crescono nel tempo, la latenza delle query in Timestream for Live Analytics rimane per lo più invariata. Questo perché l'architettura di query di Timestream for Live Analytics può sfruttare enormi quantità di parallelismo per elaborare volumi di dati più grandi e scalare automaticamente per soddisfare le esigenze di throughput delle query di un'applicazione. 

## Modello di dati
<a name="datamodel"></a>

 Timestream supporta due modelli di dati per le query: il modello flat e il modello di serie temporali. 

**Nota**  
I dati in Timestream vengono archiviati utilizzando il modello flat ed è il modello predefinito per l'interrogazione dei dati. Il modello delle serie temporali è un concetto di query-time e viene utilizzato per l'analisi delle serie temporali.
+  [Modello piatto](#flatmodel) 
+  [Modello di serie temporali](#timeseriesmodel) 

### Modello piatto
<a name="flatmodel"></a>

 Il modello flat è il modello di dati predefinito di Timestream per le query. Rappresenta i dati delle serie temporali in formato tabulare. I nomi delle dimensioni, l'ora, i nomi delle misure e i valori delle misure vengono visualizzati come colonne. Ogni riga della tabella è un punto dati atomico corrispondente a una misurazione in un momento specifico all'interno di una serie temporale. I database, le tabelle e le colonne di Timestream hanno alcuni vincoli di denominazione. Questi sono descritti in. [Limiti del servizio](ts-limits.md#system-limits)

 La tabella seguente mostra un esempio illustrativo di come Timestream memorizza i dati che rappresentano l'utilizzo della CPU, l'utilizzo della memoria e l'attività di rete delle istanze EC2, quando i dati vengono inviati come record a misura singola. In questo caso, le dimensioni sono la regione, la zona di disponibilità, il cloud privato virtuale e gli ID di istanza delle istanze EC2. Le misure sono l'utilizzo della CPU, l'utilizzo della memoria e i dati di rete in entrata per le istanze EC2. Le colonne region, az, vpc e instance\$1id contengono i valori delle dimensioni. La colonna time contiene il timestamp di ogni record. La colonna measure\$1name contiene i nomi delle misure rappresentate da cpu-utilization, memory\$1utilization e network\$1bytes\$1in. Le colonne measure\$1value: :double contengono le misurazioni emesse come doppie (ad esempio utilizzo della CPU e utilizzo della memoria). La colonna measure\$1value: :bigint contiene le misurazioni emesse come numeri interi, ad esempio i dati di rete in entrata. 


| Orario | region | az | vpc | instance\$1id | measure\$1name | measure\$1value::double | measure\$1value::bigint | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
|  2019-12-04 19:00:00.000 000000  |   us-east-1   |   Stati Uniti est-1d   |   vpc-1a2b3c4d   |   i-1234567890abcdef0   |   utilizzo della cpu\$1   |   35,0   |   null   | 
|  2019-12-04 19:00:01.000 000000  |   us-east-1   |   Stati Uniti est-1d   |   vpc-1a2b3c4d   |   i-1234567890abcdef0   |   utilizzo della cpu\$1   |   38.2   |   null   | 
|  2019-12-04 19:00:02,000 000000  |   us-east-1   |   Stati Uniti - est-1d   |   vpc-1a2b3c4d   |   i-1234567890abcdef0   |   utilizzo della cpu\$1   |   45,3   |   null   | 
|  2019-12-04 19:00:00.000 000000  |   us-east-1   |   Stati Uniti est-1d   |   vpc-1a2b3c4d   |   i-1234567890abcdef0   |   memory\$1utilization   |   54,9   |   null   | 
|  2019-12-04 19:00:01.000 000000  |   us-east-1   |   Stati Uniti est-1d   |   vpc-1a2b3c4d   |   i-1234567890abcdef0   |   memory\$1utilization   |   42,6   |   null   | 
|  2019-12-04 19:00:02,000 000000  |   us-east-1   |   Stati Uniti - est-1d   |   vpc-1a2b3c4d   |   i-1234567890abcdef0   |   memory\$1utilization   |   33.3   |   null   | 
|  2019-12-04 19:00:00.000 000000  |   us-east-1   |   Stati Uniti est-1d   |   vpc-1a2b3c4d   |   i-1234567890abcdef0   |   network\$1byte   |   34.400   |   null   | 
|  2019-12-04 19:00:01.000 000000  |   us-east-1   |   Stati Uniti est-1d   |   vpc-1a2b3c4d   |   i-1234567890abcdef0   |   network\$1byte   |   1.500   |   null   | 
|  2019-12-04 19:00:02.000 000000  |   us-east-1   |   Stati Uniti - est-1d   |   vpc-1a2b3c4d   |   i-1234567890abcdef0   |   network\$1byte   |   6.000   |   null   | 

La tabella seguente mostra un esempio illustrativo di come Timestream memorizza i dati che rappresentano l'utilizzo della CPU, l'utilizzo della memoria e l'attività di rete delle istanze EC2, quando i dati vengono inviati come record multimisura.


| Orario | region | az | vpc | instance\$1id | measure\$1name | cpu\$1utilization | memory\$1utilization | network\$1bytes | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
|  2019-12-04 19:00:00.000 000000  |   us-east-1   |   Stati Uniti est-1d   |   vpc-1a2b3c4d   |   i-1234567890abcdef0   |   metriche   |   35,0   |   54,9   |   34.400   | 
|  2019-12-04 19:00:01.000 000000  |   us-east-1   |   Stati Uniti est-1d   |   vpc-1a2b3c4d   |   i-1234567890abcdef0   |   metriche   |   38,2   |   42,6   |   1.500   | 
|  2019-12-04 19:00:02,000 000000  |   us-east-1   |   Stati Uniti - est-1d   |   vpc-1a2b3c4d   |   i-1234567890abcdef0   |   metriche   |   45,3   |   33,3   |   6.600   | 

### Modello di serie temporali
<a name="timeseriesmodel"></a>

 Il modello delle serie temporali è un costrutto temporale di interrogazione utilizzato per l'analisi delle serie temporali. Rappresenta i dati come una sequenza ordinata di coppie (tempo, valore di misura). Timestream supporta funzioni di serie temporali come l'interpolazione per consentire di colmare le lacune nei dati. Per utilizzare queste funzioni, è necessario convertire i dati nel modello delle serie temporali utilizzando funzioni come create\$1time\$1series. Per ulteriori dettagli, fare riferimento a. [Riferimento al linguaggio di interrogazione](reference.md) 

 Utilizzando l'esempio precedente dell'istanza EC2, ecco i dati sull'utilizzo della CPU espressi come serie temporali. 


| region | az | vpc | instance\$1id | cpu\$1utilization | 
| --- | --- | --- | --- | --- | 
|   us-east-1   |   us-east-1d   |   vpc-1a2b3c4d   |   i-1234567890abcdef0   |   [\$1ora: 2019-12-04 19:00:00.000 000000, valore: 35\$1, \$1ora: 2019-12-04 19:00:01.000 000000, valore: 38.2\$1, \$1ora: 2019-12-04 19:00:02.000 000000, valore: 45.3\$1]   | 

# Query pianificate
<a name="scheduled-query"></a>

La funzionalità di interrogazione pianificata di Amazon Timestream for Live Analytics è una soluzione completamente gestita, serverless e scalabile per il calcolo e l'archiviazione di aggregati, rollup e altre forme di dati preelaborati tipicamente utilizzati per alimentare dashboard operativi, report aziendali, analisi ad hoc e altre applicazioni. Le interrogazioni pianificate rendono l'analisi in tempo reale più performante ed economica, in modo da poter ricavare ulteriori informazioni dai dati e continuare a prendere decisioni aziendali migliori.

Per ulteriori informazioni sulle interrogazioni pianificate, vedere. [Utilizzo delle interrogazioni pianificate in Timestream per LiveAnalytics](scheduledqueries.md)

# Timestream Compute Unit (TCU)
<a name="tcu"></a>

Amazon Timestream for Live Analytics misura la capacità di calcolo allocata per le tue esigenze di query nell'unità di calcolo Timestream (TCU). Una TCU comprende 4 V e 16 GB di memoria. CPUs Quando esegui query in Timestream for Live Analytics, il servizio esegue l'allocazione TCUs su richiesta in base alla complessità delle query e alla quantità di dati da elaborare. Il numero di dati consumati da una query TCUs determina il costo associato.

**Nota**  
Tutto ciò Account AWS che è stato integrato nel servizio dopo il 29 aprile 2024 verrà utilizzato TCUs per impostazione predefinita per le query di determinazione dei prezzi. 

**Topics**
+ [Unità di calcolo Timestream fornite](provisioned-tcu.md)
+ [MaxQuery TCU](#maxquery-tcu)
+ [Fatturazione per TCU](#billing-tcus)
+ [Configurazione della TCU](#config-tcus)
+ [Stima delle unità di calcolo richieste](#estimate-compute-units)
+ [Quando aumentare il TCU MaxQuery](#increase-maxquery-tcu)
+ [Quando ridurre MaxQuery il TCU](#decrease-maxquery-tcu)
+ [Monitoraggio dell'utilizzo tramite metriche CloudWatch](#cw-metrics-monitor-usage)
+ [Comprensione delle variazioni nell'utilizzo delle unità di calcolo](#variations-compute-units-usage)

# Unità di calcolo Timestream fornite
<a name="provisioned-tcu"></a>

**Nota**  
Il TCU fornito è disponibile solo nella regione Asia Pacifico (Mumbai).

Con le Timestream Compute Units (TCUs) predisposte, puoi assegnare un numero fisso di unità TCUs al tuo account, garantendo prestazioni e costi prevedibili per le tue query. Tramite il provisioning TCUs, ottenete un maggiore controllo sulla capacità di elaborazione, consentendovi di ottimizzare sia le prestazioni che i costi delle query in base alle esigenze specifiche dell'applicazione.

**Topics**
+ [Vantaggi del provisioning TCU](#provisioned-tcu.benefits)
+ [Come funziona Provisioned TCU](#provisioned-tcu.how-provisioned-tcu-works)
+ [Monitoraggio dell'utilizzo di Provisioned TCU](#provisioned-tcu.monitoring)
+ [Modifica del tuo Provisioned TCUs](#provisioned-tcu.modifying)
+ [Prezzi di Provisioned TCUs](#provisioned-tcu.pricing)

## Vantaggi del provisioning TCU
<a name="provisioned-tcu.benefits"></a>

Il provisioning TCU offre diversi vantaggi ai clienti con carichi di lavoro dedicati, tra cui:

1. **Prestazioni prevedibili:** allocando un numero fisso di TCUs, garantisci prestazioni costanti per le tue query.

1. **Controllo dei costi:** con la TCU predisposta, è possibile prevedere e gestire meglio i costi, in quanto i costi vengono addebitati solo per la durata del provisioning. TCUs

1. **Flessibilità:** il provisioned TCU garantisce che il carico di lavoro disponga di risorse di elaborazione dedicate e consente di regolare il numero di provisioning in base TCUs ai requisiti del carico di lavoro, garantendo la scalabilità richiesta man mano che le esigenze dell'applicazione cambiano. 

## Come funziona Provisioned TCU
<a name="provisioned-tcu.how-provisioned-tcu-works"></a>

Ogni Timestream Compute Unit (TCU) è composta da 4 V e 16 GB di memoria. CPUs Per effettuare il provisioning TCUs, utilizza la console di AWS gestione o il funzionamento dell' UpdateAccountSettings API per assegnare un numero fisso di dati al tuo account, che verranno poi TCUs dedicati al tuo carico di lavoro. Ciò garantisce prestazioni e costi prevedibili per le tue domande. Il numero minimo di provisioning TCUs è 4, con incrementi successivi anche in multipli di 4 (ad esempio, 4, 8, 12, 16). Una volta effettuato il provisioning, è possibile eseguire i carichi di lavoro di interrogazione senza interruzioni. Man mano che le esigenze del carico di lavoro cambiano, puoi modificare il provisioning TCUs utilizzando la console di AWS gestione o il funzionamento dell' UpdateAccountSettings API in qualsiasi momento. Tuttavia, puoi diminuire il numero solo TCUs dopo che è trascorsa almeno 1 ora dal loro provisioning.

Ad esempio, se effettui il provisioning 8 TCUs alle 10:00, ti verrà addebitato un importo minimo di 1 ora, fino alle 11:00. Durante questo periodo, puoi aumentarlo TCUs a 12 o più, ma non puoi diminuirlo fino alle 11:00. 

Il tempo necessario per fornire le unità di calcolo Timestream (TCUs) richieste nel tuo account varia a seconda del numero di unità richieste. TCUs Ad esempio, il provisioning di 100 TCUs potrebbe richiedere fino a 30 minuti. Tuttavia, ti verranno addebitati i costi per le risorse solo una volta che saranno state fornite e saranno disponibili per il carico di lavoro relativo alle query. Per garantire un'esperienza fluida durante gli aumenti di utilizzo pianificati, consigliamo di fornire in anticipo le risorse necessarie. Ciò consente di disporre di tempo sufficiente per rendere disponibili le risorse e garantisce che il carico di lavoro possa essere gestito senza interruzioni.

## Monitoraggio dell'utilizzo di Provisioned TCU
<a name="provisioned-tcu.monitoring"></a>

Per monitorare l'utilizzo del TCU fornito, puoi utilizzare le seguenti metriche: CloudWatch 
+ **Provisioned QueryTCU: questa metrica specifica il numero di provisioned QueryTCU** nel tuo account. TCUs 
+ **QueryTCU:** questa metrica specifica il numero di dati utilizzati dal carico di lavoro. TCUs 
+ **InsufficienteTCUThrottles:** questa metrica specifica il numero di query limitate a causa di una capacità di elaborazione insufficiente.

## Modifica del tuo Provisioned TCUs
<a name="provisioned-tcu.modifying"></a>

Puoi modificare il numero di Timestream Compute Unit (TCUs) fornite in base alle mutevoli esigenze del carico di lavoro utilizzando la console di AWS gestione, l'interfaccia a AWS riga di comando (CLI) o. AWS SDKs 

Per visualizzare il numero attuale di unità fornite TCUs nel tuo account, accedi alla sezione «Admin Dashboard» nella Console di gestione. AWS Da lì, puoi monitorare e gestire facilmente il tuo provisioning TCUs.

Nelle Query Compute Settings, puoi verificare che la modalità di calcolo sia impostata su «Provisioned» e visualizzare il numero corrente di Timestream Compute Unit (TCUs) fornite nel tuo account, che viene visualizzato come «Active Query TCU». Il valore predefinito è 0. È necessario effettuare il provisioning prima di eseguire il carico di lavoro delle query. TCUs 

Per modificare le impostazioni di calcolo delle query, fai clic sul pulsante «Modifica». Ad esempio, se desideri aumentare il provisioning TCUs da 32 a 64, inserisci semplicemente il valore target desiderato (64) nel campo «Target Query TCU». Inoltre, puoi specificare un argomento Amazon Simple Notification Service (SNS) per ricevere una notifica quando il processo di provisioning è completo.

![\[Immagine della visualizzazione da console delle impostazioni di modifica per il provisioning. TCUs\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/modify-prov-tcu-settings.png)


Dopo aver confermato la configurazione desiderata selezionando «Salva impostazioni», vedrai che lo stato attuale della richiesta viene aggiornato a «In sospeso». Il campo «Target Query TCU» ora rifletterà il numero desiderato di unità di calcolo, che in questo caso è 64, a indicare che il processo di provisioning è stato avviato ed è in attesa di completamento.

![\[Immagine della visualizzazione da console delle impostazioni di salvataggio per Provisioned. TCUs\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/query-compute-save-settings.png)


Una volta effettuato il provisioning, il campo «Active Query TCU» verrà aggiornato in base alla nuova capacità assegnata di 64 Timestream Compute Units, a indicare che il processo di provisioning è completo e che le risorse aggiuntive sono ora disponibili per l'uso nell'account.

![\[Immagine della visualizzazione da console delle nuove impostazioni aggiornate per Provisioned. TCUs\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/query-compute-updated-settings.png)


Per ridurre il numero di Timestream Compute Unit (TCUs) fornite nel tuo account, segui gli stessi passaggi di prima e inserisci il valore target desiderato. Ad esempio, se desideri ridurre il numero assegnato TCUs a 16, imposta semplicemente il campo «Target Query TCU» su 16. Tieni presente che puoi ridurre il numero di provisioning solo TCUs dopo che è trascorsa almeno 1 ora dall'ultima richiesta di provisioning. Ciò significa che se hai effettuato il provisioning o lo hai modificato TCUs nell'ultima ora, dovrai attendere che sia trascorsa la finestra di 1 ora prima di poter diminuire il. TCUs

![\[Immagine della visualizzazione della console che mostra la riduzione del numero di provisioning. TCUs\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/query-modify-reduce-tcu-settings.png)


Dopo aver richiesto una riduzione delle unità di calcolo Timestream fornite (TCUs), il servizio diminuirà TCUs quando riterrà che l'operazione sia sicura, operazione che potrebbe richiedere alcuni minuti. Durante questo periodo, il campo «Target Query TCU» continuerà a visualizzare il valore target desiderato, in questo caso 16, che indica la modifica in sospeso. TCUs Una volta completato il decremento, il campo «Active Query TCU» verrà aggiornato per riflettere la nuova capacità assegnata di 16. TCUs

![\[Immagine della visualizzazione da console del numero ridotto aggiornato di unità fornite. TCUs\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/query-modify-updated-reduce-tcu-settings.png)


Una volta completata con successo la richiesta, il campo «Active Query TCU» verrà aggiornato per riflettere la nuova capacità assegnata di 16 Timestream Compute Unit (). TCUs Se non si prevede più alcun carico di lavoro relativo alle interrogazioni, è possibile ridurre ulteriormente la quantità assegnata a 0, liberando efficacemente tutte le risorse assegnate e TCUs bloccando gli eventuali addebiti associati.

## Prezzi di Provisioned TCUs
<a name="provisioned-tcu.pricing"></a>

Ti viene addebitata la durata delle unità di calcolo Timestream (TCUs) fornite nel tuo account, con un addebito minimo di 1 ora. Dopo la prima ora, TCUs vengono misurate al secondo. 

Per calcolare il totale delle ore misurate, moltiplicate il numero di ore prestate TCUs per la durata di utilizzo. Ad esempio: se si forniscono 16 ore TCUs per 2 ore, il totale delle ore misurate è 16 TCU \$1 2 ore = 32 TCU-ore. Se fornisci 16 ore TCUs per 4 ore, poi riduci a 8 TCUs e le utilizzi per 6 ore, il totale delle ore misurate sarà di 16 TCU \$1 4 ore\$1 8 TCU \$1 6 ore = 112 TCU-ore. 

La spesa totale dipenderà dal costo orario TCU prevalente nella tua regione. Per informazioni dettagliate, consulta la pagina dei prezzi di Amazon Timestream. 

**Best practice per la gestione di Provisioned TCU**

Per ottenere il massimo dalla funzionalità Provisioned TCU, segui queste best practice:
+ **Monitora il carico di lavoro:** monitora le prestazioni del carico di lavoro, utilizza [QueryTCU e visualizza per comprendere i modelli di utilizzo](monitoring-cloudwatch.md) e modifica il `InsufficientTCUThrottles` provisioning di conseguenza. TCUs 
+ **Adeguamento proattivo:** aumento o riduzione degli accantonamenti in TCUs base alle tendenze osservate e alle modifiche previste del carico di lavoro. Apporta modifiche per i periodi di punta e quelli non di punta. 
+ **Mantieni lo spazio di manovra:** mantieni la QueryTCU consumata entro l'80-90% della TCU per gestire ProvisionedQuery picchi imprevisti. 
+ **Ottimizza le query:** sfrutta funzionalità come Query Insights e segui le migliori pratiche di Timestream Query per ottimizzare le query per ridurre l'utilizzo dell'elaborazione.
+ **Implementazione di nuovi tentativi:** Timestream for LiveAnalytics Query SDK supporta un meccanismo di nuovo tentativo con un valore predefinito di 3 tentativi. Regola il valore di conseguenza per gestire raffiche occasionali e impreviste.

## MaxQuery TCU
<a name="maxquery-tcu"></a>

Questa impostazione specifica il numero massimo di unità di calcolo che il servizio utilizzerà in qualsiasi momento per rispondere alle tue richieste. Per eseguire le query, è necessario impostare la capacità minima su 4. TCUs È possibile impostare il numero massimo di TCUs in multipli di 4, ad esempio 4, 8, 16, 32 e così via. Ti vengono addebitate solo le risorse di elaborazione utilizzate per il carico di lavoro. Ad esempio, se imposti il massimo TCUs su 128, ma ne usi costantemente solo 8. TCUs Ti verrà addebitato solo per la durata durante la quale hai utilizzato l'8 TCUs. L'impostazione predefinita `MaxQueryTCU` nel tuo account è 200. Puoi impostare `MaxQueryTCU` da 4 a 1000, utilizzando l'operazione Console di gestione AWS o [UpdateAccountSettings](https://docs.aws.amazon.com/timestream/latest/developerguide/API_query_UpdateAccountSettings.html)API con l' AWS SDK o AWS CLI.

Ti consigliamo di impostarlo `MaxQueryTCU` per il tuo account. L'impostazione di un limite TCU massimo aiuta a controllare i costi limitando il numero di unità di calcolo che il servizio può utilizzare per il carico di lavoro delle query. Ciò consente di prevedere e gestire meglio la spesa per le query.

## Fatturazione per TCU
<a name="billing-tcus"></a>

Ogni TCU viene fatturato su base oraria con granularità al secondo e per un minimo di 30 secondi. L'unità di utilizzo di queste unità di elaborazione è TCU-ora.

Quando esegui le query, ti viene fatturato l' TCUs utilizzo durante il tempo di esecuzione delle query, misurato in ore TCU. Esempio:
+ Il tuo carico di lavoro ne utilizza 20 per 3 ore. TCUs Ti vengono fatturate 60 TCU per ora (20 TCUs x 3 ore).
+ Il tuo carico di lavoro ne utilizza 10 TCUs per 30 minuti e poi 20 TCUs per i successivi 30 minuti. Ti verranno fatturate 15 TCU per ora (10 TCUs x 0,5 ore \$1 20 TCUs x 0,5 ore).

Il prezzo per ora in TCU varia di. Regione AWS Per ulteriori dettagli, consulta i prezzi di [Amazon Timestream](https://aws.amazon.com/timestream/pricing/). Man mano che il carico di lavoro aumenta, il servizio ridimensiona automaticamente la capacità di calcolo fino al limite TCU massimo specificato () per mantenere prestazioni costanti. `MaxQueryTCU` L'`MaxQueryTCU`impostazione funge da limite per la capacità di elaborazione fino alla quale il servizio può scalare. Questa impostazione consente di controllare il numero di risorse di elaborazione e, di conseguenza, il relativo costo.

## Configurazione della TCU
<a name="config-tcus"></a>

Quando entri a bordo del servizio, ognuno Account AWS ha un limite predefinito `MaxQueryTCU` di 200. Puoi aggiornare questo limite come richiesto in qualsiasi momento utilizzando l'operazione Console di gestione AWS o l'[UpdateAccountSettings](https://docs.aws.amazon.com/timestream/latest/developerguide/API_query_UpdateAccountSettings.html)API con l' AWS SDK o. AWS CLI

Se non sei sicuro dei valori da configurare, monitora la `QueryTCU` metrica relativa al tuo account. Questa metrica è disponibile in Amazon Console di gestione AWS e in Amazon CloudWatch. Questa metrica fornisce informazioni sulla granularità del numero massimo di TCUs prodotti utilizzati al minuto. In base ai dati storici e alla tua stima delle crescite future, impostala in `MaxQueryTCU` modo da adattarsi ai picchi di utilizzo. Ti consigliamo di avere un margine di crescita di almeno 4-16 TCUs rispetto al picco di utilizzo. Ad esempio, se il tuo picco `QueryTCU` negli ultimi 30 giorni è stato di 128, ti consigliamo di impostare un valore `MaxQueryTCU` compreso tra 132 e 144.

## Stima delle unità di calcolo richieste
<a name="estimate-compute-units"></a>

Le unità di calcolo possono elaborare le interrogazioni contemporaneamente. Per determinare il numero di unità di calcolo richieste, considera le linee guida generali riportate nella tabella seguente: 


| Query simultanee | TCUs | 
| --- | --- | 
| 7 | 4 | 
| 14 | 8 | 
| 21 | 12 | 

**Nota**  
Queste sono linee guida generali e il numero effettivo di unità di calcolo richieste dipende da diversi fattori, come:  
L'effettiva concomitanza delle interrogazioni.
Schemi di interrogazione.
Il numero di partizioni scansionate.
Altre caratteristiche specifiche del carico di lavoro.
[Questa linea guida si riferisce alle query che analizzano i dati dagli ultimi minuti a un'ora e rispettano le migliori pratiche di interrogazione [Timestream](queries-bp.md) e le linee guida per la modellazione dei dati.](data-modeling.md)
Monitora le prestazioni dell'applicazione e la `QueryTCU` metrica per regolare le unità di calcolo, se necessario.

## Quando aumentare il TCU MaxQuery
<a name="increase-maxquery-tcu"></a>

Dovresti considerare di aumentare il `MaxQueryTCU` nei seguenti scenari:
+ Il consumo massimo di query si sta avvicinando o sta raggiungendo il TCU massimo di query attualmente configurato. Ti consigliamo di impostare il TCU massimo per le query almeno 4-16 TCUs in più rispetto al consumo massimo.
+ Le tue query restituiscono un errore 4xx con il messaggio TCU superato. MaxQuery Se prevedi un aumento pianificato del carico di lavoro, rivedi e modifica di conseguenza il TCU massimo configurato per le query.

## Quando ridurre MaxQuery il TCU
<a name="decrease-maxquery-tcu"></a>

È consigliabile considerare la riduzione di `MaxQueryTCU` nei seguenti scenari:
+ Il tuo carico di lavoro ha un modello di utilizzo prevedibile e stabile e hai una buona conoscenza dei tuoi requisiti di utilizzo del calcolo. Ridurre il TCU massimo per le query a 4-16 TCU al di sopra del picco di consumo può aiutare a prevenire utilizzi e costi involontari. È possibile modificare il valore utilizzando l'operazione API. [UpdateAccountSettings](https://docs.aws.amazon.com/timestream/latest/developerguide/API_query_UpdateAccountSettings.html)
+ L'utilizzo massimo del carico di lavoro è diminuito nel tempo, a causa di cambiamenti nell'applicazione o nei modelli di comportamento degli utenti. La riduzione del TCU massimo può aiutare a mitigare i costi involontari.

**Nota**  
A seconda dell'utilizzo corrente, la riduzione della modifica del limite massimo TCU potrebbe richiedere fino a 24 ore per essere efficace. Ti viene addebitato solo l'importo effettivamente utilizzato dalle TCUs tue query. Un limite massimo di TCU per le query più elevato non incide sui costi, a meno che non TCUs vengano utilizzati dal carico di lavoro.

## Monitoraggio dell'utilizzo tramite metriche CloudWatch
<a name="cw-metrics-monitor-usage"></a>

Per monitorare l'utilizzo della TCU, Timestream for Live Analytics fornisce la seguente metrica:. CloudWatch `QueryTCU` Questa metrica specifica il numero di unità di calcolo utilizzate in un minuto e viene emessa ogni minuto. Puoi scegliere di monitorare il massimo e il minimo TCUs utilizzati in un minuto. Puoi anche impostare allarmi su questa metrica per tenere traccia dei costi delle query in tempo reale.

## Comprensione delle variazioni nell'utilizzo delle unità di calcolo
<a name="variations-compute-units-usage"></a>

Il numero di risorse di calcolo necessarie per le query può aumentare o diminuire in base a diversi parametri. Ad esempio, il volume dei dati, i modelli di inserimento dei dati, la latenza delle query, la forma delle query, l'efficienza delle query e le combinazioni di query che utilizzano query analitiche e in tempo reale. Questi parametri possono comportare la necessità di unità TCU superiori o inferiori per il carico di lavoro. In uno stato stazionario in cui questi parametri non cambiano, potresti osservare una diminuzione del numero di unità di calcolo necessarie per il carico di lavoro. Di conseguenza, ciò può ridurre i costi mensili.

Inoltre, se uno qualsiasi di questi parametri del carico di lavoro o dei dati cambia, il numero di unità di elaborazione richieste potrebbe aumentare. Quando Timestream riceve una query, a seconda delle partizioni di dati a cui accede la query, Timestream decide il numero di risorse di elaborazione per rispondere in modo efficiente alla query.

A intervalli periodici, in base ai modelli di inserimento e accesso alle query, Timestream ottimizza il layout dei dati. Timestream esegue l'ottimizzazione raggruppando le partizioni meno accessibili in un'unica partizione o suddividendo una partizione calda in più partizioni per migliorare le prestazioni. Di conseguenza, la capacità di calcolo utilizzata dalla stessa query potrebbe variare leggermente in momenti diversi.

**Scegli di utilizzare i prezzi TCU per le tue domande**  
In qualità di utente esistente, puoi effettuare un opt-in una tantum da utilizzare TCUs per una migliore gestione dei costi e la rimozione del numero minimo di byte misurati per query. Puoi effettuare l'opt-in utilizzando l'operazione Console di gestione AWS o [UpdateAccountSettings](https://docs.aws.amazon.com/timestream/latest/developerguide/API_query_UpdateAccountSettings.html)API con l'SDK o. AWS AWS CLI Nell'operazione API, imposta il `QueryPricingModel` parametro su. `COMPUTE_UNITS`  
L'adozione del modello di determinazione dei prezzi basato sul calcolo è un cambiamento irreversibile.

# Accesso a Timestream per LiveAnalytics
<a name="accessing"></a>

Puoi accedere a Timestream per LiveAnalytics utilizzare la console, la CLI o l'API. Per informazioni sull'accesso a Timestream per LiveAnalytics, consulta quanto segue:

**Topics**
+ [Registrati per un Account AWS](#sign-up-for-aws)
+ [Crea un utente con accesso amministrativo](#create-an-admin)
+ [Fornisci Timestream per l'accesso LiveAnalytics](#getting-started.prereqs.iam-user)
+ [Concessione dell'accesso programmatico](#programmatic-access)
+ [Utilizzo della console](console_timestream.md)
+ [Accesso ad Amazon Timestream LiveAnalytics per l'utilizzo di AWS CLI](Tools.CLI.md)
+ [Utilizzo dell’API](Using.API.md)
+ [Usando il AWS SDKs](getting-started-sdks.md)

## Registrati per un Account AWS
<a name="sign-up-for-aws"></a>

Se non ne hai uno Account AWS, completa i seguenti passaggi per crearne uno.

**Per iscriverti a un Account AWS**

1. Apri la [https://portal.aws.amazon.com/billing/registrazione.](https://portal.aws.amazon.com/billing/signup)

1. Segui le istruzioni online.

   Nel corso della procedura di registrazione riceverai una telefonata o un messaggio di testo e ti verrà chiesto di inserire un codice di verifica attraverso la tastiera del telefono.

   Quando ti iscrivi a un Account AWS, *Utente root dell'account AWS*viene creato un. L’utente root dispone dell’accesso a tutte le risorse e tutti i Servizi AWS nell’account. Come best practice di sicurezza, assegna l’accesso amministrativo a un utente e utilizza solo l’utente root per eseguire [attività che richiedono l’accesso di un utente root](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS ti invia un'email di conferma dopo il completamento della procedura di registrazione. In qualsiasi momento, puoi visualizzare l'attività corrente del tuo account e gestirlo accedendo a [https://aws.amazon.com/](https://aws.amazon.com/)e scegliendo **Il mio account**.

## Crea un utente con accesso amministrativo
<a name="create-an-admin"></a>

Dopo esserti registrato Account AWS, proteggi Utente root dell'account AWS AWS IAM Identity Center, abilita e crea un utente amministrativo in modo da non utilizzare l'utente root per le attività quotidiane.

**Proteggi i tuoi Utente root dell'account AWS**

1.  Accedi [Console di gestione AWS](https://console.aws.amazon.com/)come proprietario dell'account scegliendo **Utente root** e inserendo il tuo indirizzo Account AWS email. Nella pagina successiva, inserisci la password.

   Per informazioni sull’accesso utilizzando un utente root, consulta la pagina [Accedere come utente root](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) nella *Guida per l’utente di Accedi ad AWS *.

1. Abilita l’autenticazione a più fattori (MFA) per l’utente root.

   Per istruzioni, consulta [Abilitare un dispositivo MFA virtuale per l'utente Account AWS root (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) nella Guida per l'*utente IAM*.

**Crea un utente con accesso amministrativo**

1. Abilita il Centro identità IAM.

   Per istruzioni, consulta [Abilitazione del AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html) nella *Guida per l’utente di AWS IAM Identity Center *.

1. Nel Centro identità IAM, assegna l’accesso amministrativo a un utente.

   Per un tutorial sull'utilizzo di IAM Identity Center directory come fonte di identità, consulta [Configurare l'accesso utente con l'impostazione predefinita IAM Identity Center directory](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) nella *Guida per l'AWS IAM Identity Center utente*.

**Accesso come utente amministratore**
+ Per accedere come utente del Centro identità IAM, utilizza l’URL di accesso che è stato inviato al tuo indirizzo e-mail quando hai creato l’utente del Centro identità IAM.

  Per informazioni sull'accesso utilizzando un utente IAM Identity Center, consulta [AWS Accedere al portale di accesso](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) nella *Guida per l'Accedi ad AWS utente*.

**Assegnazione dell’accesso ad altri utenti**

1. Nel Centro identità IAM, crea un set di autorizzazioni conforme alla best practice per l’applicazione di autorizzazioni con il privilegio minimo.

   Segui le istruzioni riportate nella pagina [Creazione di un set di autorizzazioni](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html) nella *Guida per l’utente di AWS IAM Identity Center *.

1. Assegna al gruppo prima gli utenti e poi l’accesso con autenticazione unica (Single Sign-On).

   Per istruzioni, consulta [Aggiungere gruppi](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html) nella *Guida per l’utente di AWS IAM Identity Center *.

## Fornisci Timestream per l'accesso LiveAnalytics
<a name="getting-started.prereqs.iam-user"></a>

 Le autorizzazioni necessarie per accedere a Timestream LiveAnalytics sono già concesse all'amministratore. Agli altri utenti, è necessario concedere loro l' LiveAnalytics accesso a Timestream utilizzando la seguente politica: 

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "timestream:*",
        "kms:DescribeKey",
        "kms:CreateGrant",
        "kms:Decrypt",
        "dbqms:CreateFavoriteQuery",
        "dbqms:DescribeFavoriteQueries",
        "dbqms:UpdateFavoriteQuery",
        "dbqms:DeleteFavoriteQueries",
        "dbqms:GetQueryString",
        "dbqms:CreateQueryHistory",
        "dbqms:UpdateQueryHistory",
        "dbqms:DeleteQueryHistory",
        "dbqms:DescribeQueryHistory",
        "s3:ListAllMyBuckets"
      ],
      "Resource": "*"
    }
  ]
}
```

------

**Nota**  
Per informazioni su`dbqms`, consulta [Azioni, risorse e chiavi di condizione per il servizio Database Query Metadata](https://docs.aws.amazon.com/service-authorization/latest/reference/list_databasequerymetadataservice.html). Per informazioni su, `kms` consulta [Azioni, risorse e chiavi di condizione per il servizio di gestione delle AWS chiavi](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html).

## Concessione dell'accesso programmatico
<a name="programmatic-access"></a>

Gli utenti necessitano dell'accesso programmatico se desiderano interagire con l' AWS Console di gestione AWS esterno di. Il modo per concedere l'accesso programmatico dipende dal tipo di utente che accede. AWS

Per fornire agli utenti l’accesso programmatico, scegli una delle seguenti opzioni.


****  

| Quale utente necessita dell’accesso programmatico? | Per | Come | 
| --- | --- | --- | 
| IAM | (Consigliato) Utilizza le credenziali della console come credenziali temporanee per firmare le richieste programmatiche a,, o. AWS CLI AWS SDKs AWS APIs |  Segui le istruzioni per l’interfaccia che desideri utilizzare. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/accessing.html)  | 
|  Identità della forza lavoro (Utenti gestiti nel centro identità IAM)  | Utilizza credenziali temporanee per firmare le richieste programmatiche a AWS CLI, AWS SDKs, o. AWS APIs |  Segui le istruzioni per l’interfaccia che desideri utilizzare. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/accessing.html)  | 
| IAM | Utilizza credenziali temporanee per firmare le richieste programmatiche a AWS CLI, AWS SDKs, o. AWS APIs | Seguendo le istruzioni riportate in [Utilizzo delle credenziali temporanee con le AWS risorse nella Guida per](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html) l'utente IAM. | 
| IAM | (Non consigliato)Utilizza credenziali a lungo termine per firmare richieste programmatiche a AWS CLI,, AWS SDKs o. AWS APIs |  Segui le istruzioni per l’interfaccia che desideri utilizzare. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/accessing.html)  | 

# Utilizzo della console
<a name="console_timestream"></a>

 Puoi utilizzare la Console di AWS gestione per Timestream Live Analytics per creare, modificare, eliminare, descrivere ed elencare database e tabelle. È inoltre possibile utilizzare la console per eseguire interrogazioni.

**Topics**
+ [Tutorial](#console_timestream.db-w-sample-data)
+ [Creazione di un database](#console_timestream.db.using-console)
+ [Creare una tabella](#console_timestream.table.using-console)
+ [Esecuzione di una query](#console_timestream.queries.using-console)
+ [Crea una query pianificata](#console_timestream.scheduledquery.using-console)
+ [Eliminare un'interrogazione pianificata](#console_timestream.scheduledquerydeletedisable.using-console)
+ [Eliminazione di una tabella](#console_timestream.delete-table.using-console)
+ [Eliminazione di un database](#console_timestream.delete-db.using-console)
+ [Modifica una tabella](#console_timestream.edit-table.using-console)
+ [Modifica un database](#console_timestream.edit-db.using-console)

## Tutorial
<a name="console_timestream.db-w-sample-data"></a>

 Questo tutorial mostra come creare un database popolato con set di dati di esempio ed eseguire query di esempio. I set di dati di esempio utilizzati in questo tutorial sono spesso presenti nell'IoT e negli DevOps scenari. Il set di dati IoT contiene dati di serie temporali come la velocità, la posizione e il carico di un camion, per semplificare la gestione della flotta e identificare opportunità di ottimizzazione. Il DevOps set di dati contiene parametri delle istanze EC2 come l'utilizzo di CPU, rete e memoria per migliorare le prestazioni e la disponibilità delle applicazioni. Ecco un [video tutorial](https://www.youtube.com/watch?v=YBWCGDd4ChQ) per le istruzioni descritte in questa sezione 

Segui questi passaggi per creare un database popolato con i set di dati di esempio ed eseguire query di esempio utilizzando la AWS Console.

1. [Apri la console.AWS](https://console.aws.amazon.com/timestream)

1. Nel riquadro di navigazione, scegli **Database**

1. Fai clic su **Crea database**.

1. Nella pagina di creazione del database, inserisci quanto segue:
   + **Scegli la configurazione**: seleziona il **database di esempio**.
   + **Nome**: inserisci un nome di database a tua scelta.
   + **Scegli set di dati di esempio**: seleziona **IoT** e. **DevOps**
   +  Fai clic su **Crea database** per creare un database contenente due tabelle, IoT e DevOps popolato con dati di esempio. 

1. **Nel riquadro di navigazione, scegli Query editor**

1. Seleziona **Query di esempio** dal menu in alto.

1. Fai clic su una delle query di esempio. Si tornerà all'editor di query con l'editor popolato con la query di esempio.

1. Fate clic su **Esegui** per eseguire la query e visualizzare i risultati della query.

## Creazione di un database
<a name="console_timestream.db.using-console"></a>

Segui questi passaggi per creare un database utilizzando la AWS console.

1. Apri la [AWS console](https://console.aws.amazon.com/timestream).

1. Nel riquadro di navigazione, scegli **Database**

1. Fai clic su **Crea database**.

1. Nella pagina di creazione del database, inserisci quanto segue.
   + **Scegli configurazione**: seleziona **Database standard**.
   + **Nome**: inserisci un nome di database a tua scelta.
   + **Crittografia**: scegli una chiave KMS o utilizza l'opzione predefinita, in cui Timestream Live Analytics creerà una chiave KMS nel tuo account se non ne esiste già una.

1.  Fai clic su **Crea database per creare un database**.

## Creare una tabella
<a name="console_timestream.table.using-console"></a>

Segui questi passaggi per creare una tabella utilizzando la AWS console.

1. Apri la [AWS console](https://console.aws.amazon.com/timestream).

1. Nel riquadro di navigazione, scegli **Tabelle**

1. Fai clic su **Crea tabella**.

1. Nella pagina di creazione della tabella, inserisci quanto segue.
   + **Nome database**: selezionare il nome del database creato in[Creazione di un database](#console_timestream.db.using-console).
   + **Nome tabella**: immetti un nome di tabella a tua scelta.
   + **Conservazione nell'archivio di memoria**: specifica per quanto tempo desideri conservare i dati nell'archivio di memoria. L'archivio di memoria elabora i dati in entrata, compresi i dati in arrivo in ritardo (dati con un timestamp precedente all'ora corrente) ed è ottimizzato per le query veloci. point-in-time
   + **Conservazione dell'archivio magnetico**: specifica per quanto tempo desideri conservare i dati nell'archivio magnetico. L'archivio magnetico è pensato per l'archiviazione a lungo termine ed è ottimizzato per query analitiche veloci.

1.  Fai clic su **Crea tabella.**

## Esecuzione di una query
<a name="console_timestream.queries.using-console"></a>

Segui questi passaggi per eseguire le query utilizzando la AWS console.

1. Apri la [AWS console](https://console.aws.amazon.com/timestream).

1. Nel riquadro di navigazione, scegli **Query editor**

1. Nel riquadro sinistro, seleziona il database creato in[Creazione di un database](#console_timestream.db.using-console).

1. Nel riquadro sinistro, seleziona il database creato in[Creare una tabella](#console_timestream.table.using-console).

1. Nell'editor di query, è possibile eseguire una query. Per visualizzare le ultime 10 righe della tabella, esegui: 

   ```
   SELECT * FROM <database_name>.<table_name> ORDER BY time DESC LIMIT 10
   ```

1. (Facoltativo) **Attiva Enable Insights** per ottenere informazioni sull'efficienza delle tue query. 

## Crea una query pianificata
<a name="console_timestream.scheduledquery.using-console"></a>

Segui questi passaggi per creare un'interrogazione pianificata utilizzando la AWS console.

1. Apri la [AWS console](https://console.aws.amazon.com/timestream).

1. Nel riquadro di navigazione, scegli **Interrogazioni pianificate**.

1. Fai clic su **Crea interrogazione pianificata**.

1. Nelle sezioni **Nome della query** e **Tabella di destinazione**, inserisci quanto segue.
   + **Nome**: immettere il nome di una query.
   + **Nome del database**: selezionare il nome del database creato in. [Creazione di un database](#console_timestream.db.using-console)
   + **Nome tabella**: seleziona il nome della tabella creata in. [Creare una tabella](#console_timestream.table.using-console)

1. Nella sezione **Query Statement**, immettete un'istruzione di interrogazione valida. Quindi fai clic su **Convalida interrogazione**.

1. Da **Modello di tabella di destinazione**, definite il modello per tutti gli attributi non definiti. È possibile utilizzare **Visual Builder o JSON**.

1. Nella sezione **Esegui pianificazione**, scegli **Frequenza fissa** o **Espressione Chron. Per le espressioni chron**, consulta Schedule Expressions for Scheduled [Queries per maggiori dettagli sulle espressioni di pianificazione](https://docs.aws.amazon.com/timestream/latest/developerguide/scheduledqueries-schedule.html). 

1. Nella sezione dell'**argomento SNS, inserisci l'argomento** SNS a cui verrà utilizzato per la notifica.

1. Nella sezione **Report del registro degli errori**, inserisci la posizione S3 che verrà utilizzata per segnalare gli errori.

   Scegli un valore per **Encryption key type** (Tipo di chiave di crittografia).

1. Nella sezione **Impostazioni di sicurezza** della **chiave AWS KMS**, scegli il tipo di chiave AWS KMS.

   Inserisci il **ruolo IAM** che Timestream for LiveAnalytics utilizzerà per eseguire la query pianificata. Fai riferimento agli [esempi di policy IAM per le query pianificate](https://docs.aws.amazon.com/timestream/latest/developerguide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-sheduledqueries) per i dettagli sulle autorizzazioni richieste e sulla relazione di fiducia per il ruolo.

1.  Fai clic su **Crea interrogazione pianificata**.

## Eliminare un'interrogazione pianificata
<a name="console_timestream.scheduledquerydeletedisable.using-console"></a>

Segui questi passaggi per eliminare o disabilitare un'interrogazione pianificata utilizzando la AWS Console.

1. Apri la [AWS console](https://console.aws.amazon.com/timestream).

1. Nel riquadro di navigazione, scegli Interrogazioni **pianificate**

1. Seleziona l'interrogazione pianificata creata in[Crea una query pianificata](#console_timestream.scheduledquery.using-console).

1. Seleziona **Azioni**.

1. Scegli **Disabilita** o **Elimina**.

1. Se hai selezionato Elimina, conferma l'azione e seleziona **Elimina**.

## Eliminazione di una tabella
<a name="console_timestream.delete-table.using-console"></a>

Segui questi passaggi per eliminare un database utilizzando la AWS console.

1. Apri la [AWS console](https://console.aws.amazon.com/timestream).

1. Nel riquadro di navigazione, scegli **Tabelle**

1. Seleziona la tabella in cui hai creato[Creare una tabella](#console_timestream.table.using-console).

1. Fai clic su **Delete** (Elimina).

1. Digita *delete* nella casella di conferma.

## Eliminazione di un database
<a name="console_timestream.delete-db.using-console"></a>

Segui questi passaggi per eliminare un database utilizzando la AWS console: 

1. Apri la [AWS console](https://console.aws.amazon.com/timestream).

1. Nel riquadro di navigazione, scegli **Database**

1. Seleziona il database che hai creato in **Crea un database**.

1. Fai clic su **Delete** (Elimina).

1. Digita *delete* nella casella di conferma.

## Modifica una tabella
<a name="console_timestream.edit-table.using-console"></a>

Segui questi passaggi per modificare una tabella utilizzando la AWS console.

1. Apri la [AWS console](https://console.aws.amazon.com/timestream).

1. Nel riquadro di navigazione, scegli **Tabelle**

1. Seleziona la tabella in cui hai creato[Creare una tabella](#console_timestream.table.using-console).

1. Fate clic su **Modifica**

1. Modifica i dettagli della tabella e salva.
   + **Conservazione dell'archivio di memoria**: specifica per quanto tempo desideri conservare i dati nell'archivio di memoria. L'archivio di memoria elabora i dati in entrata, compresi i dati in arrivo in ritardo (dati con un timestamp precedente all'ora corrente) ed è ottimizzato per le query veloci. point-in-time
   + **Conservazione dell'archivio magnetico**: specifica per quanto tempo desideri conservare i dati nell'archivio magnetico. L'archivio magnetico è pensato per l'archiviazione a lungo termine ed è ottimizzato per query analitiche veloci.

## Modifica un database
<a name="console_timestream.edit-db.using-console"></a>

Segui questi passaggi per modificare un database utilizzando la AWS console.

1. Apri la [AWS console](https://console.aws.amazon.com/timestream).

1. Nel riquadro di navigazione, scegli **Database**

1. Seleziona il database che hai creato in **Crea un database**.

1. Fai clic su **Modifica**

1. Modifica i dettagli del database e salva.

# Accesso ad Amazon Timestream LiveAnalytics per l'utilizzo di AWS CLI
<a name="Tools.CLI"></a>

 È possibile utilizzare il AWS Command Line Interface (AWS CLI) per controllare più AWS servizi dalla riga di comando e automatizzarli tramite script. È possibile utilizzare il AWS CLI per operazioni ad hoc. Puoi anche usarlo per incorporare Amazon LiveAnalytics Timestream for operations all'interno di script di utilità.

 Prima di poterlo utilizzare AWS CLI con Timestream per LiveAnalytics, devi configurare l'accesso programmatico. Per ulteriori informazioni, consulta [Concessione dell'accesso programmatico](accessing.md#programmatic-access). 

[Per un elenco completo di tutti i comandi disponibili per l'API Timestream for LiveAnalytics Query in AWS CLI, consulta il Command Reference.AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/timestream-query/index.html)

[Per un elenco completo di tutti i comandi disponibili per l'API Timestream for LiveAnalytics Write in AWS CLI, consulta il Command Reference.AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/timestream-write/index.html)

**Topics**
+ [Scaricamento e configurazione di AWS CLI](#Tools.CLI.DownloadingAndRunning)
+ [Utilizzo di con Timestream per AWS CLI LiveAnalytics](#Tools.CLI.UsingWithQLDB)

## Scaricamento e configurazione di AWS CLI
<a name="Tools.CLI.DownloadingAndRunning"></a>

 AWS CLI Funziona su Windows, macOS o Linux. Per scaricarlo, installarlo e configurarlo, procedi nel seguente modo:

1. Scaricala AWS CLI da [http://aws.amazon.com/cli](https://aws.amazon.com/cli).

1. *Segui le istruzioni per l'[installazione della AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) e la [configurazione della AWS CLI nella Guida](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) per l'utente.AWS Command Line Interface *

## Utilizzo di con Timestream per AWS CLI LiveAnalytics
<a name="Tools.CLI.UsingWithQLDB"></a>

Il formato della riga di comando è costituito da un Amazon Timestream LiveAnalytics per il nome dell'operazione, seguito dai parametri per tale operazione. AWS CLI Supporta una sintassi abbreviata per i valori dei parametri, oltre a JSON.

 Usa `help` per elencare tutti i comandi disponibili in Timestream per. LiveAnalytics Esempio: 

```
aws timestream-write help
```

```
aws timestream-query help
```

 Puoi anche usare `help` per descrivere un comando specifico e saperne di più sul suo utilizzo: 

```
aws timestream-write create-database help
```

 Ad esempio, per creare un database: 

```
aws timestream-write create-database --database-name myFirstDatabase
```

 Per creare una tabella con le scritture magnetiche abilitate: 

```
aws timestream-write create-table \
--database-name metricsdb \
--table-name metrics \
--magnetic-store-write-properties "{\"EnableMagneticStoreWrites\": true}"
```

Per scrivere dati utilizzando record a misura singola:

```
aws timestream-write write-records \
--database-name metricsdb \
--table-name metrics \
--common-attributes "{\"Dimensions\":[{\"Name\":\"asset_id\", \"Value\":\"100\"}], \"Time\":\"1631051324000\",\"TimeUnit\":\"MILLISECONDS\"}" \
--records "[{\"MeasureName\":\"temperature\", \"MeasureValueType\":\"DOUBLE\",\"MeasureValue\":\"30\"},{\"MeasureName\":\"windspeed\", \"MeasureValueType\":\"DOUBLE\",\"MeasureValue\":\"7\"},{\"MeasureName\":\"humidity\", \"MeasureValueType\":\"DOUBLE\",\"MeasureValue\":\"15\"},{\"MeasureName\":\"brightness\", \"MeasureValueType\":\"DOUBLE\",\"MeasureValue\":\"17\"}]"
```

Per scrivere dati utilizzando record a più misure:

```
# wide model helper method to create Multi-measure records
function ingest_multi_measure_records {
  epoch=`date +%s`
  epoch+=$i

  # multi-measure records
  aws timestream-write write-records \
  --database-name $src_db_wide \
  --table-name $src_tbl_wide \
  --common-attributes "{\"Dimensions\":[{\"Name\":\"device_id\", \
              \"Value\":\"12345678\"},\
            {\"Name\":\"device_type\", \"Value\":\"iPhone\"}, \
            {\"Name\":\"os_version\", \"Value\":\"14.8\"}, \
            {\"Name\":\"region\", \"Value\":\"us-east-1\"} ], \
            \"Time\":\"$epoch\",\"TimeUnit\":\"MILLISECONDS\"}" \
--records "[{\"MeasureName\":\"video_metrics\", \"MeasureValueType\":\"MULTI\", \
  \"MeasureValues\": \
  [{\"Name\":\"video_startup_time\",\"Value\":\"0\",\"Type\":\"BIGINT\"}, \
  {\"Name\":\"rebuffering_ratio\",\"Value\":\"0.5\",\"Type\":\"DOUBLE\"}, \
  {\"Name\":\"video_playback_failures\",\"Value\":\"0\",\"Type\":\"BIGINT\"}, \
  {\"Name\":\"average_frame_rate\",\"Value\":\"0.5\",\"Type\":\"DOUBLE\"}]}]" \
--endpoint-url $ingest_endpoint \
  --region  $region
}

# create 5 records
for i in {100..105};
  do ingest_multi_measure_records $i;
done
```

Esecuzione di query su una tabella: 

```
aws timestream-query query \
--query-string "SELECT time, device_id, device_type, os_version, 
region, video_startup_time, rebuffering_ratio, video_playback_failures, \
average_frame_rate \
FROM metricsdb.metrics \
where time >= ago (15m)"
```

Per creare un'interrogazione pianificata: 

```
aws timestream-query create-scheduled-query \
  --name scheduled_query_name \
  --query-string "select bin(time, 1m) as time, \
          avg(measure_value::double) as avg_cpu, min(measure_value::double) as min_cpu, region \
          from $src_db.$src_tbl where measure_name = 'cpu' \
          and time BETWEEN @scheduled_runtime - (interval '5' minute)  AND @scheduled_runtime \
          group by region, bin(time, 1m)" \
  --schedule-configuration "{\"ScheduleExpression\":\"$cron_exp\"}" \
  --notification-configuration "{\"SnsConfiguration\":{\"TopicArn\":\"$sns_topic_arn\"}}" \
  --scheduled-query-execution-role-arn "arn:aws:iam::452360119086:role/TimestreamSQExecutionRole" \
  --target-configuration "{\"TimestreamConfiguration\":{\
          \"DatabaseName\": \"$dest_db\",\
          \"TableName\": \"$dest_tbl\",\
          \"TimeColumn\":\"time\",\
          \"DimensionMappings\":[{\
            \"Name\": \"region\", \"DimensionValueType\": \"VARCHAR\"
          }],\
          \"MultiMeasureMappings\":{\
            \"TargetMultiMeasureName\": \"mma_name\",
            \"MultiMeasureAttributeMappings\":[{\
              \"SourceColumn\": \"avg_cpu\", \"MeasureValueType\": \"DOUBLE\", \"TargetMultiMeasureAttributeName\": \"target_avg_cpu\"
            },\
            { \
              \"SourceColumn\": \"min_cpu\", \"MeasureValueType\": \"DOUBLE\", \"TargetMultiMeasureAttributeName\": \"target_min_cpu\"
            }] \
          }\
          }}" \
  --error-report-configuration "{\"S3Configuration\": {\
        \"BucketName\": \"$s3_err_bucket\",\
        \"ObjectKeyPrefix\": \"scherrors\",\
        \"EncryptionOption\": \"SSE_S3\"\
        }\
      }"
```

# Utilizzo dell’API
<a name="Using.API"></a>

 Oltre a [SDKs](getting-started-sdks.md), Amazon Timestream LiveAnalytics for fornisce l'accesso diretto all'API REST tramite il pattern di rilevamento *degli* endpoint. Il modello di rilevamento degli endpoint è descritto di seguito, insieme ai relativi casi d'uso. 

## Il modello di scoperta degli endpoint
<a name="Using-API.endpoint-discovery"></a>

Poiché Timestream Live Analytics è SDKs progettato per funzionare in modo trasparente con l'architettura del servizio, inclusa la gestione e la mappatura degli endpoint del servizio, si consiglia di utilizzarlo per la maggior parte delle applicazioni. SDKs Tuttavia, ci sono alcuni casi in cui è necessario utilizzare il modello di rilevamento degli endpoint dell'API Timestream for LiveAnalytics REST: 
+ Stai utilizzando [endpoint VPC (AWS PrivateLink)](VPCEndpoints.md) con Timestream per LiveAnalytics
+ L'applicazione utilizza un linguaggio di programmazione che non supporta ancora l'SDK
+ È necessario un controllo migliore sull'implementazione lato client

Questa sezione include informazioni su come funziona il pattern di rilevamento degli endpoint, su come implementarlo e note sull'utilizzo. Seleziona uno degli argomenti seguenti per saperne di più. 

**Topics**
+ [Il modello di scoperta degli endpoint](#Using-API.endpoint-discovery)
+ [Come funziona il modello di scoperta degli endpoint](Using-API.endpoint-discovery.how-it-works.md)
+ [Implementazione del modello di rilevamento degli endpoint](Using-API.endpoint-discovery.describe-endpoints.implementation.md)

# Come funziona il modello di scoperta degli endpoint
<a name="Using-API.endpoint-discovery.how-it-works"></a>

 Timestream è costruito utilizzando un'[architettura cellulare](architecture.md#cells) per garantire una migliore scalabilità e proprietà di isolamento del traffico. Poiché ogni account cliente è mappato su una cella specifica in una regione, l'applicazione deve utilizzare gli endpoint corretti specifici della cella a cui è stato mappato l'account. Quando si utilizza SDKs, questa mappatura viene gestita in modo trasparente e non è necessario gestire gli endpoint specifici della cella. Tuttavia, quando accedi direttamente all'API REST, dovrai gestire e mappare personalmente gli endpoint corretti. Questo processo, il *modello di rilevamento degli endpoint*, è descritto di seguito: 

1.  Il pattern di rilevamento degli endpoint inizia con una chiamata all'`DescribeEndpoints`azione (descritta nella [https://docs.aws.amazon.com/timestream/latest/developerguide/API_Reference.html](https://docs.aws.amazon.com/timestream/latest/developerguide/API_Reference.html)sezione). 

1.  L'endpoint deve essere memorizzato nella cache e riutilizzato per il periodo di tempo specificato dal valore time-to-live (TTL) restituito (the). [https://docs.aws.amazon.com/timestream/latest/developerguide/API_Endpoint.html#timestream-Type-Endpoint-CachePeriodInMinutes.html](https://docs.aws.amazon.com/timestream/latest/developerguide/API_Endpoint.html#timestream-Type-Endpoint-CachePeriodInMinutes.html) Le chiamate all'API Timestream Live Analytics possono quindi essere effettuate per la durata del TTL. 

1.  Dopo la scadenza del TTL, è necessario effettuare una nuova chiamata a per DescribeEndpoints aggiornare l'endpoint (in altre parole, ricominciare dalla Fase 1). 

**Nota**  
 [La sintassi, i parametri e altre informazioni sull'utilizzo dell'`DescribeEndpoints`azione sono descritte nell'API Reference.](https://docs.aws.amazon.com/timestream/latest/developerguide/API_DescribeEndpoints.html) Tieni presente che l'`DescribeEndpoints`azione è disponibile tramite entrambi SDKs ed è identica per ciascuno. 

Per l'implementazione del modello di rilevamento degli endpoint, vedere[Implementazione del modello di rilevamento degli endpoint](Using-API.endpoint-discovery.describe-endpoints.implementation.md).

# Implementazione del modello di rilevamento degli endpoint
<a name="Using-API.endpoint-discovery.describe-endpoints.implementation"></a>

 Per implementare il modello di rilevamento degli endpoint, scegli un'API (Write o Query), crea una **DescribeEndpoints**richiesta e utilizza gli endpoint restituiti per la durata dei valori TTL restituiti. La procedura di implementazione è descritta di seguito. 

**Nota**  
Assicurati di avere familiarità con le [note sull'utilizzo](#Using-API.endpoint-discovery.describe-endpoints.usage-notes).

## Procedura di implementazione
<a name="Using-API.endpoint-discovery.describe-endpoints.implementation.procedure"></a>

1.  Acquisisci l'endpoint per l'API verso cui desideri effettuare chiamate ([Write](https://docs.aws.amazon.com/timestream/latest/developerguide/API_Operations_Amazon_Timestream_Write.html) o [Query](https://docs.aws.amazon.com/timestream/latest/developerguide/API_Operations_Amazon_Timestream_Query.html)). utilizzando la richiesta. [https://docs.aws.amazon.com/timestream/latest/developerguide/API_DescribeEndpoints.html](https://docs.aws.amazon.com/timestream/latest/developerguide/API_DescribeEndpoints.html) 

   1.  Crea una richiesta [https://docs.aws.amazon.com/timestream/latest/developerguide/API_DescribeEndpoints.html](https://docs.aws.amazon.com/timestream/latest/developerguide/API_DescribeEndpoints.html)corrispondente all'API di interesse ([Write](https://docs.aws.amazon.com/timestream/latest/developerguide/API_Operations_Amazon_Timestream_Write.html) o [Query](https://docs.aws.amazon.com/timestream/latest/developerguide/API_Operations_Amazon_Timestream_Query.html)) utilizzando uno dei due endpoint descritti di seguito. Non ci sono parametri di input per la richiesta. Assicurati di leggere le note riportate di seguito.   
*Scrivi SDK:*  

      ```
      ingest.timestream.<region>.amazonaws.com
      ```  
*SDK di interrogazione:*  

      ```
      query.timestream.<region>.amazonaws.com
      ```

      Segue un esempio di chiamata CLI per la regione. `us-east-1`

      ```
      REGION_ENDPOINT="https://query.timestream.us-east-1.amazonaws.com"
      REGION=us-east-1
      aws timestream-write describe-endpoints \
      --endpoint-url $REGION_ENDPOINT \
      --region $REGION
      ```
**Nota**  
 L'intestazione HTTP «Host» *deve* contenere anche l'endpoint dell'API. La richiesta avrà esito negativo se l'intestazione non è compilata. Questo è un requisito standard per tutte le richieste HTTP/1.1. Se utilizzi una libreria HTTP che supporta 1.1 o versioni successive, la libreria HTTP dovrebbe compilare automaticamente l'intestazione per te.
**Nota**  
*<region>*Sostituiscila con l'identificatore di regione la regione in cui viene effettuata la richiesta, ad es. `us-east-1`

   1. Analizza la risposta per estrarre gli endpoint e memorizza nella cache i valori TTL. [La risposta è una matrice di uno o più oggetti. `Endpoint`](https://docs.aws.amazon.com/timestream/latest/developerguide/API_Endpoint.html) Ogni `Endpoint` oggetto contiene un indirizzo endpoint (`Address`) e il TTL per quell'endpoint (). `CachePeriodInMinutes` 

1.  Memorizza l'endpoint nella cache fino al TTL specificato. 

1.  Quando il TTL scade, recupera un nuovo endpoint ricominciando dalla fase 1 dell'implementazione. 

## Note d'uso per il pattern di rilevamento degli endpoint
<a name="Using-API.endpoint-discovery.describe-endpoints.usage-notes"></a>
+ L'**DescribeEndpoints**azione è l'unica azione riconosciuta dagli endpoint regionali di Timestream Live Analytics. 
+ La risposta contiene un elenco di endpoint contro cui effettuare chiamate all'API Timestream Live Analytics. 
+  In caso di risposta corretta, dovrebbe esserci almeno un endpoint nell'elenco. Se nell'elenco è presente più di un endpoint, ognuno di essi è ugualmente utilizzabile per le chiamate API e il chiamante può scegliere l'endpoint da utilizzare a caso. 
+ Oltre all'indirizzo DNS dell'endpoint, ogni endpoint nell'elenco specificherà un time to live (TTL) consentito per l'utilizzo dell'endpoint specificato in minuti.
+ L'endpoint deve essere memorizzato nella cache e riutilizzato per il periodo di tempo specificato dal valore TTL restituito (in minuti). Dopo la scadenza del TTL, è **DescribeEndpoints**necessario effettuare una nuova chiamata per aggiornare l'endpoint da utilizzare, poiché l'endpoint non funzionerà più dopo la scadenza del TTL.

# Usando il AWS SDKs
<a name="getting-started-sdks"></a>

 Puoi accedere ad Amazon Timestream utilizzando. AWS SDKs Timestream ne supporta due SDKs per lingua, vale a dire Write SDK e Query SDK. L'SDK di scrittura viene utilizzato per eseguire operazioni CRUD e per inserire i dati delle serie temporali in Timestream. L'SDK Query viene utilizzato per interrogare i dati delle serie temporali esistenti archiviati in Timestream. 

Dopo aver completato i prerequisiti necessari per il tuo SDK preferito, puoi iniziare con. [Esempi di codice](code-samples.md)

**Topics**
+ [Java](getting-started.java.md)
+ [Java v2](getting-started.java-v2.md)
+ [Go](getting-started.go.md)
+ [Python](getting-started.python.md)
+ [Node.js](getting-started.node-js.md)
+ [.NET](getting-started.dot-net.md)

# Java
<a name="getting-started.java"></a>

Per iniziare a usare [Java 1.0 SDK](https://aws.amazon.com/sdk-for-java/) e Amazon Timestream, completa i prerequisiti descritti di seguito.

Dopo aver completato i prerequisiti necessari per Java SDK, puoi iniziare con. [Esempi di codice](code-samples.md)

## Prerequisiti
<a name="getting-started.java.prereqs"></a>

Prima di iniziare a usare Java, devi fare quanto segue:

1. Segui le istruzioni AWS di configurazione riportate in[Accesso a Timestream per LiveAnalytics](accessing.md).

1. Configura un ambiente di sviluppo Java scaricando e installando quanto segue:
   + Kit di sviluppo Java SE 8 (ad esempio [Amazon Corretto 8](https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/downloads-list.html)).
   + IDE Java (come [Eclipse](http://www.eclipse.org) o [IntelliJ](https://www.jetbrains.com/idea/)).

      Per ulteriori informazioni, consulta [Guida introduttiva a AWS SDK per Java](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html) 

1. Configura AWS le tue credenziali e la regione per lo sviluppo:
   + Imposta le tue credenziali AWS di sicurezza da utilizzare con. AWS SDK per Java
   + Imposta la tua AWS regione per determinare il tuo Timestream predefinito per l'endpoint. LiveAnalytics 

## Utilizzo di Apache Maven
<a name="getting-started.java.with-maven"></a>

 Puoi usare [Apache Maven](https://maven.apache.org/) per configurare e creare progetti. AWS SDK per Java 

**Nota**  
Per utilizzare Apache Maven, assicurati che Java SDK e runtime siano 1.8 o superiori.

[Puoi configurare l' AWS SDK come dipendenza di Maven come descritto in Uso dell'SDK con Apache Maven.](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-project-maven.html) 

Puoi eseguire la compilazione ed eseguire il codice sorgente con il seguente comando:

```
mvn clean compile
mvn exec:java -Dexec.mainClass=<your source code Main class>
```

**Nota**  
 `<your source code Main class>`è il percorso della classe principale del codice sorgente Java. 

## Impostazione delle AWS credenziali
<a name="getting-started.java.credentials"></a>

È [AWS SDK per Java](https://aws.amazon.com/sdk-for-java)necessario fornire AWS le credenziali all'applicazione in fase di esecuzione. *Gli esempi di codice in questa guida presuppongono che si stia utilizzando un file di AWS credenziali, come descritto nella sezione [Configurazione AWS delle credenziali e della regione per lo sviluppo nella Guida per](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup-credentials.html) gli AWS SDK per Java sviluppatori.*

Di seguito è riportato un esempio di file di AWS credenziali denominato`~/.aws/credentials`, in cui il carattere tilde (`~`) rappresenta la directory home.

```
[default] 
aws_access_key_id = AWS access key ID goes here 
aws_secret_access_key = Secret key goes here
```

# Java v2
<a name="getting-started.java-v2"></a>

Per iniziare a usare [Java 2.0 SDK](https://aws.amazon.com/sdk-for-java/) e Amazon Timestream, completa i prerequisiti descritti di seguito.

Dopo aver completato i prerequisiti necessari per l'SDK Java 2.0, puoi iniziare con. [Esempi di codice](code-samples.md)

## Prerequisiti
<a name="getting-started.java-v2.prereqs"></a>

Prima di iniziare a usare Java, è necessario effettuare le seguenti operazioni:

1. Segui le istruzioni AWS di configurazione riportate in[Accesso a Timestream per LiveAnalytics](accessing.md).

1. È possibile configurare l' AWS SDK come dipendenza di Maven come descritto in [Uso dell'SDK](https://docs.aws.amazon.com/sdk-for-java/v2/developer-guide/welcome.html) con Apache Maven. 

1. Configura un ambiente di sviluppo Java scaricando e installando quanto segue:
   + Kit di sviluppo Java SE 8 (ad esempio [Amazon Corretto 8](https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/downloads-list.html)).
   + IDE Java (come [Eclipse](http://www.eclipse.org) o [IntelliJ](https://www.jetbrains.com/idea/)).

      Per ulteriori informazioni, consulta [Guida introduttiva a AWS SDK per Java](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html) 

## Utilizzo di Apache Maven
<a name="getting-started.java-v2.with-maven"></a>

 Puoi usare [Apache Maven](https://maven.apache.org/) per configurare e creare progetti. AWS SDK per Java 

**Nota**  
Per utilizzare Apache Maven, assicurati che Java SDK e runtime siano 1.8 o superiori.

[Puoi configurare l' AWS SDK come dipendenza di Maven come descritto in Uso dell'SDK con Apache Maven.](https://docs.aws.amazon.com/sdk-for-java/v2/developer-guide/welcome.html) [Le modifiche richieste al file pom.xml sono descritte qui.](https://docs.aws.amazon.com/sdk-for-java/v2/migration-guide/whats-different.html#adding-v2) 

È possibile eseguire compile ed eseguire il codice sorgente con il seguente comando:

```
mvn clean compile
mvn exec:java -Dexec.mainClass=<your source code Main class>
```

**Nota**  
 `<your source code Main class>`è il percorso della classe principale del codice sorgente Java. 

# Go
<a name="getting-started.go"></a>

Per iniziare a usare [Go SDK](https://aws.amazon.com/sdk-for-go/) e Amazon Timestream, completa i prerequisiti descritti di seguito.

Dopo aver completato i prerequisiti necessari per Go SDK, puoi iniziare con. [Esempi di codice](code-samples.md)

## Prerequisiti
<a name="getting-started.prereqs.go"></a>

1.  [Scarica GO SDK 1.14](https://golang.org/doc/install). 

1.  [Configura GO SDK](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html). 

1.  [Costruisci il tuo cliente.](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html) 

# Python
<a name="getting-started.python"></a>

Per iniziare a usare [Python SDK](https://aws.amazon.com/sdk-for-python/) e Amazon Timestream, completa i prerequisiti descritti di seguito.

Dopo aver completato i prerequisiti necessari per l'SDK Python, puoi iniziare con. [Esempi di codice](code-samples.md)

## Prerequisiti
<a name="getting-started.python.prereqs"></a>

[Per usare Python, installa e configura Boto3 seguendo le istruzioni qui.](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)

# Node.js
<a name="getting-started.node-js"></a>

Per iniziare a usare l'[SDK Node.js](https://aws.amazon.com/sdk-for-node-js/) e Amazon Timestream, completa i prerequisiti descritti di seguito.

Dopo aver completato i prerequisiti necessari per l'SDK Node.js, puoi iniziare con. [Esempi di codice](code-samples.md)

## Prerequisiti
<a name="getting-started.node-js.prereqs"></a>

Prima di iniziare con Node.js, devi fare quanto segue:

1. [Installa Node.js](https://nodejs.org/en/).

1.  [Installa l' AWS SDK per JavaScript](https://aws.amazon.com/sdk-for-node-js/). 

# .NET
<a name="getting-started.dot-net"></a>

Per iniziare a usare [il.NET SDK](https://aws.amazon.com/sdk-for-net/) e Amazon Timestream, completa i prerequisiti descritti di seguito.

Una volta completati i prerequisiti necessari per .NET SDK, puoi iniziare con. [Esempi di codice](code-samples.md)

## Prerequisiti
<a name="getting-started.dot-net.prereqs"></a>

Prima di iniziare a usare .NET, installa i NuGet pacchetti richiesti e assicurati che la AWSSDK versione.Core sia la 3.3.107 o successiva eseguendo i seguenti comandi: 

```
dotnet add package AWSSDK.Core
dotnet add package AWSSDK.TimestreamWrite
dotnet add package AWSSDK.TimestreamQuery
```

# Nozioni di base
<a name="getting-started"></a>

Questa sezione include un tutorial per iniziare a usare Amazon Timestream Live Analytics, oltre a istruzioni per configurare un'applicazione di esempio completamente funzionale. Puoi iniziare con il tutorial o l'applicazione di esempio selezionando uno dei link sottostanti.

**Topics**
+ [Tutorial](getting-started.db-w-sample-data.md)
+ [Applicazione di esempio](sample-apps.md)

# Tutorial
<a name="getting-started.db-w-sample-data"></a>

 Questo tutorial mostra come creare un database popolato con set di dati di esempio ed eseguire query di esempio. I set di dati di esempio utilizzati in questo tutorial sono spesso presenti nell'IoT e negli DevOps scenari. Il set di dati IoT contiene dati di serie temporali come la velocità, la posizione e il carico di un camion, per semplificare la gestione della flotta e identificare opportunità di ottimizzazione. Il set di DevOps dati contiene parametri delle istanze EC2 come l'utilizzo di CPU, rete e memoria per migliorare le prestazioni e la disponibilità delle applicazioni. Ecco un [video tutorial](https://www.youtube.com/watch?v=YBWCGDd4ChQ) per le istruzioni descritte in questa sezione. 

Segui questi passaggi per creare un database popolato con i set di dati di esempio ed eseguire query di esempio utilizzando la AWS Console: 

## Utilizzo della console
<a name="getting-started.db-w-sample-data.using-console"></a>

Segui questi passaggi per creare un database popolato con i set di dati di esempio ed eseguire query di esempio utilizzando la Console: AWS 

1. [Apri la console.AWS](https://console.aws.amazon.com/timestream)

1. Nel pannello di navigazione, seleziona **Database**.

1. Fai clic su **Crea database**.

1. Nella pagina di creazione del database, inserisci quanto segue:
   + **Scegli la configurazione**: seleziona il **database di esempio**.
   + **Nome**: inserisci un nome di database a tua scelta. 
**Nota**  
Dopo aver creato un database con set di dati di esempio, per utilizzare le query di esempio disponibili nella console, è possibile modificare il nome del database a cui si fa riferimento nella query in modo che corrisponda al nome del database immesso qui. Sono disponibili query di esempio per ogni combinazione di set di dati di esempio e tipo di record di serie temporali. 
   + **Scegli set di dati di esempio**: seleziona **IoT** e **DevOps**.
   + **Scegli il tipo di record delle serie temporali —Seleziona record** **multimisura**.
   +  Fai clic su **Crea database** per creare un database contenente due tabelle popolate con dati di esempio. I nomi delle tabelle per i set di dati di esempio con record multimisura sono `DevOpsMulti` e. `IoTMulti` I nomi delle tabelle per set di dati di esempio con record a misura singola sono e. `DevOps` `IoT`

1. Nel riquadro di navigazione, scegli **Query Editor (Editor della query)**.

1. Seleziona **Query di esempio** dal menu in alto.

1. Fai clic su una delle query di esempio per un set di dati scelto durante la creazione del database di esempio. In questo modo si torna all'editor di query con l'editor popolato con la query di esempio.

1. Modifica il nome del database per la query di esempio.

1. Fate clic su **Esegui** per eseguire la query e visualizzare i risultati della query.

## Usando il SDKs
<a name="getting-started.db-w-sample-data.using-sdks"></a>

 Timestream Live Analytics fornisce un'applicazione di esempio completamente funzionale che mostra come creare un database e una tabella, popolare la tabella con \$1126.000 righe di dati di esempio ed eseguire query di esempio. L'applicazione di esempio è disponibile in [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps)Java, Python, Node.js, Go e.NET. 

1. Clona le applicazioni di esempio del GitHub repository Timestream Live Analytics seguendo le istruzioni di. GitHub

1. Configura l' AWS SDK per connetterti ad Amazon Timestream Live Analytics seguendo le istruzioni descritte in. [Usando il AWS SDKs](getting-started-sdks.md)

1. Compila ed esegui l'applicazione di esempio utilizzando le istruzioni seguenti:
   + Istruzioni per l'[applicazione di esempio Java](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps/java/README.md).
   + Istruzioni per l'[applicazione di esempio Java v2](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps/javaV2/README.md).
   + Istruzioni per l'[applicazione di esempio Go](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/sample_apps/goV2/README.md).
   + Istruzioni per l'applicazione di [esempio Python](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps/python/README.md).
   + Istruzioni per l'[applicazione di esempio Node.js](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps/js/README.md).
   + Istruzioni per l'[applicazione di esempio.NET](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps/dotnet/README.md).

# Applicazione di esempio
<a name="sample-apps"></a>

Timestream viene fornito con un'applicazione di esempio completamente funzionale che mostra come creare un database e una tabella, popolare la tabella con \$1126.000 righe di dati di esempio ed eseguire query di esempio. Segui i passaggi seguenti per iniziare a utilizzare l'applicazione di esempio in una delle lingue supportate:

------
#### [  Java  ]

1. Clona il GitHub repository [Timestream per applicazioni di LiveAnalytics esempio seguendo le istruzioni](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) di. [GitHub](https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/cloning-a-repository)

1. Configura l' AWS SDK per connetterti a Timestream e segui le istruzioni LiveAnalytics descritte in Guida introduttiva a. [Java](getting-started.java.md)

1. [Esegui l'[applicazione di esempio Java](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps/java) seguendo le istruzioni descritte qui](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps/java/README.md) 

------
#### [  Java v2  ]

1. Clona il GitHub repository [Timestream per applicazioni di LiveAnalytics esempio seguendo le istruzioni](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) di. [GitHub](https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/cloning-a-repository)

1. Configura l' AWS SDK per connetterti ad Amazon LiveAnalytics Timestream per seguire le istruzioni descritte in Getting Started with. [Java v2](getting-started.java-v2.md)

1. [Esegui l'[applicazione di esempio Java 2.0](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps/javaV2) seguendo le istruzioni descritte qui](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps/javaV2/README.md) 

------
#### [  Go  ]

1. Clona il GitHub repository [Timestream per applicazioni di LiveAnalytics esempio seguendo le istruzioni](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) di. [GitHub](https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/cloning-a-repository)

1. Configura l' AWS SDK per connetterti ad Amazon LiveAnalytics Timestream per seguire le istruzioni descritte in Getting Started with. [Go](getting-started.go.md)

1. [Esegui l'[applicazione di esempio Go](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/goV2) seguendo le istruzioni descritte qui](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/sample_apps/goV2/README.md) 

------
#### [  Python  ]

1. Clona il GitHub repository [Timestream per applicazioni di LiveAnalytics esempio seguendo le istruzioni](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) di. [GitHub](https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/cloning-a-repository)

1. Configura l' AWS SDK per connetterti ad Amazon LiveAnalytics Timestream per seguire le istruzioni descritte in. [Python](getting-started.python.md)

1. [Esegui l'[applicazione di esempio Python](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps/python) seguendo le istruzioni qui descritte](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps/python/README.md) 

------
#### [  Node.js  ]

1. Clona il GitHub repository [Timestream per applicazioni di LiveAnalytics esempio](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) seguendo le istruzioni di. [GitHub](https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/cloning-a-repository)

1. Configura l' AWS SDK per connetterti ad Amazon LiveAnalytics Timestream per seguire le istruzioni descritte in Getting Started with. [Node.js](getting-started.node-js.md)

1. [Esegui l'[applicazione di esempio Node.js](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps/js) seguendo le istruzioni descritte qui](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps/js/README.md) 

------
#### [  .NET  ]

1. Clona il GitHub repository [Timestream per applicazioni di LiveAnalytics esempio seguendo le istruzioni](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) di. [GitHub](https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/cloning-a-repository)

1. Configura l' AWS SDK per connetterti ad Amazon LiveAnalytics Timestream per seguire le istruzioni descritte in Getting Started with. [.NET](getting-started.dot-net.md)

1. [Esegui l'[applicazione di esempio.NET](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps/dotnet) seguendo le istruzioni descritte qui](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps/dotnet/README.md) 

------

# Esempi di codice
<a name="code-samples"></a>

Puoi accedere ad Amazon Timestream utilizzando. AWS SDKs Timestream ne supporta due SDKs per lingua, vale a dire Write SDK e Query SDK. L'SDK di scrittura viene utilizzato per eseguire operazioni CRUD e per inserire i dati delle serie temporali in Timestream. L'SDK Query viene utilizzato per interrogare i dati delle serie temporali esistenti archiviati in Timestream. Seleziona un argomento dall'elenco seguente per maggiori dettagli, inclusi esempi di codice per ciascuno dei supporti. SDKs

**Topics**
+ [Scrivere un client SDK](code-samples.write-client.md)
+ [Client Query SDK](code-samples.query-client.md)
+ [Crea database](code-samples.create-db.md)
+ [Descrizione del database](code-samples.describe-db.md)
+ [Aggiorna database](code-samples.update-db.md)
+ [Eliminare il database](code-samples.delete-db.md)
+ [Elenca database](code-samples.list-db.md)
+ [Create table (Crea tabella)](code-samples.create-table.md)
+ [Descrivi tabella](code-samples.describe-table.md)
+ [Update Table (Aggiorna tabella)](code-samples.update-table.md)
+ [Delete Table (Elimina tabella)](code-samples.delete-table.md)
+ [Elencare tabelle](code-samples.list-table.md)
+ [Scrivere dati (inserti e sconvolgimenti)](code-samples.write.md)
+ [Esegui interrogazione](code-samples.run-query.md)
+ [Esegui la query UNLOAD](code-samples.run-query-unload.md)
+ [Annulla interrogazione](code-samples.cancel-query.md)
+ [Crea attività di caricamento in batch](code-samples.create-batch-load.md)
+ [Descrizione dell'attività di caricamento in batch](code-samples.describe-batch-load.md)
+ [Elenca le attività di caricamento in batch](code-samples.list-batch-load-tasks.md)
+ [Riprendi l'operazione di caricamento in batch](code-samples.resume-batch-load-task.md)
+ [Crea una query pianificata](code-samples.create-scheduledquery.md)
+ [Elenca le query pianificate](code-samples.list-scheduledquery.md)
+ [Descrivi una query pian](code-samples.describe-scheduledquery.md)
+ [Esegui interrogazione pianificata](code-samples.execute-scheduledquery.md)
+ [Aggiorna interrogazione pianificata](code-samples.update-scheduledquery.md)
+ [Eliminare una query pianificata](code-samples.delete-scheduledquery.md)

# Scrivere un client SDK
<a name="code-samples.write-client"></a>

Puoi utilizzare i seguenti frammenti di codice per creare un client Timestream per Write SDK. L'SDK di scrittura viene utilizzato per eseguire operazioni CRUD e per inserire i dati delle serie temporali in Timestream.

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, consulta. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
    private static AmazonTimestreamWrite buildWriteClient() {
        final ClientConfiguration clientConfiguration = new ClientConfiguration()
                .withMaxConnections(5000)
                .withRequestTimeout(20 * 1000)
                .withMaxErrorRetry(10);

        return AmazonTimestreamWriteClientBuilder
                .standard()
                .withRegion("us-east-1")
                .withClientConfiguration(clientConfiguration)
                .build();
    }
```

------
#### [  Java v2  ]

```
    private static TimestreamWriteClient buildWriteClient() {
        ApacheHttpClient.Builder httpClientBuilder =
                ApacheHttpClient.builder();
        httpClientBuilder.maxConnections(5000);

        RetryPolicy.Builder retryPolicy =
                RetryPolicy.builder();
        retryPolicy.numRetries(10);

        ClientOverrideConfiguration.Builder overrideConfig =
                ClientOverrideConfiguration.builder();
        overrideConfig.apiCallAttemptTimeout(Duration.ofSeconds(20));
        overrideConfig.retryPolicy(retryPolicy.build());

        return TimestreamWriteClient.builder()
                .httpClientBuilder(httpClientBuilder)
                .overrideConfiguration(overrideConfig.build())
                .region(Region.US_EAST_1)
                .build();
    }
```

------
#### [  Go  ]

```
tr := &http.Transport{
        ResponseHeaderTimeout: 20 * time.Second,
        // Using DefaultTransport values for other parameters: https://golang.org/pkg/net/http/#RoundTripper
        Proxy: http.ProxyFromEnvironment,
        DialContext: (&net.Dialer{
            KeepAlive: 30 * time.Second,
            DualStack: true,
            Timeout:   30 * time.Second,
        }).DialContext,
        MaxIdleConns:          100,
        IdleConnTimeout:       90 * time.Second,
        TLSHandshakeTimeout:   10 * time.Second,
        ExpectContinueTimeout: 1 * time.Second,
    }

    // So client makes HTTP/2 requests
    http2.ConfigureTransport(tr)

    sess, err := session.NewSession(&aws.Config{ Region: aws.String("us-east-1"), MaxRetries: aws.Int(10), HTTPClient: &http.Client{ Transport: tr }})
    writeSvc := timestreamwrite.New(sess)
```

------
#### [  Python  ]

```
write_client = session.client('timestream-write', config=Config(read_timeout=20, max_pool_connections = 5000, retries={'max_attempts': 10})) 
```

------
#### [  Node.js  ]

Il seguente frammento utilizza AWS SDK per la versione 3. JavaScript Per ulteriori informazioni su come installare il client e sull'utilizzo, consulta [Timestream Write](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/index.html) Client - SDK per v3. AWS JavaScript 

Qui viene mostrata un'ulteriore importazione di comandi. L'`CreateDatabaseCommand`importazione non è richiesta per creare il client.

```
import { TimestreamWriteClient, CreateDatabaseCommand } from "@aws-sdk/client-timestream-write";
const writeClient = new TimestreamWriteClient({ region: "us-east-1" });
```

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
var https = require('https');
var agent = new https.Agent({
    maxSockets: 5000
});
writeClient = new AWS.TimestreamWrite({
        maxRetries: 10,
        httpOptions: {
            timeout: 20000,
            agent: agent
        }
    });
```

------
#### [  .NET  ]

```
var writeClientConfig = new AmazonTimestreamWriteConfig
{
    RegionEndpoint = RegionEndpoint.USEast1,
    Timeout = TimeSpan.FromSeconds(20),
    MaxErrorRetry = 10
};

var writeClient = new AmazonTimestreamWriteClient(writeClientConfig);
```

------

Ti consigliamo di utilizzare la seguente configurazione.
+ Imposta il numero di tentativi SDK su. `10`
+ Utilizza `SDK DEFAULT_BACKOFF_STRATEGY`.
+ Imposta su `RequestTimeout` secondi. `20`
+ Imposta il numero massimo di connessioni `5000` pari o superiore.

# Client Query SDK
<a name="code-samples.query-client"></a>

È possibile utilizzare i seguenti frammenti di codice per creare un client Timestream per Query SDK. L'SDK Query viene utilizzato per interrogare i dati delle serie temporali esistenti archiviati in Timestream.

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, consulta. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
    private static AmazonTimestreamQuery buildQueryClient() {
        AmazonTimestreamQuery client = AmazonTimestreamQueryClient.builder().withRegion("us-east-1").build();
        return client;
    }
```

------
#### [  Java v2  ]

```
    private static TimestreamQueryClient buildQueryClient() {
        return TimestreamQueryClient.builder()
                .region(Region.US_EAST_1)
                .build();
    }
```

------
#### [  Go  ]

```
sess, err := session.NewSession(&aws.Config{Region: aws.String("us-east-1")})
```

------
#### [  Python  ]

```
query_client = session.client('timestream-query')
```

------
#### [  Node.js  ]

Il seguente frammento utilizza AWS SDK per la versione 3. JavaScript Per ulteriori informazioni su come installare il client e sull'utilizzo, consulta [Timestream Query Client](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-query/index.html) -, SDK for v3.AWS JavaScript 

Qui viene mostrata un'ulteriore importazione di comandi. L'`QueryCommand`importazione non è richiesta per creare il client.

```
import { TimestreamQueryClient, QueryCommand } from "@aws-sdk/client-timestream-query";
const queryClient = new TimestreamQueryClient({ region: "us-east-1" });
```

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
queryClient = new AWS.TimestreamQuery();
```

------
#### [  .NET  ]

```
var queryClientConfig = new AmazonTimestreamQueryConfig 
{ 
    RegionEndpoint = RegionEndpoint.USEast1 
}; 

var queryClient = new AmazonTimestreamQueryClient(queryClientConfig);
```

------

# Crea database
<a name="code-samples.create-db"></a>

È possibile utilizzare i seguenti frammenti di codice per creare un database.

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, consulta. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
   public void createDatabase() {
        System.out.println("Creating database");
        CreateDatabaseRequest request = new CreateDatabaseRequest();
        request.setDatabaseName(DATABASE_NAME);
        try {
            amazonTimestreamWrite.createDatabase(request);
            System.out.println("Database [" + DATABASE_NAME + "] created successfully");
        } catch (ConflictException e) {
            System.out.println("Database [" + DATABASE_NAME + "] exists. Skipping database creation");
        }
    }
```

------
#### [  Java v2  ]

```
    public void createDatabase() {
        System.out.println("Creating database");
        CreateDatabaseRequest request = CreateDatabaseRequest.builder().databaseName(DATABASE_NAME).build();
        try {
            timestreamWriteClient.createDatabase(request);
            System.out.println("Database [" + DATABASE_NAME + "] created successfully");
        } catch (ConflictException e) {
            System.out.println("Database [" + DATABASE_NAME + "] exists. Skipping database creation");
        }
    }
```

------
#### [  Go  ]

```
// Create database.
    createDatabaseInput := &timestreamwrite.CreateDatabaseInput{
        DatabaseName: aws.String(*databaseName),
    }

    _, err = writeSvc.CreateDatabase(createDatabaseInput)

    if err != nil {
        fmt.Println("Error:")
        fmt.Println(err)
    } else {
        fmt.Println("Database successfully created")
    }

    fmt.Println("Describing the database, hit enter to continue")
```

------
#### [  Python  ]

```
    def create_database(self):
        print("Creating Database")
        try:
            self.client.create_database(DatabaseName=Constant.DATABASE_NAME)
            print("Database [%s] created successfully." % Constant.DATABASE_NAME)
        except self.client.exceptions.ConflictException:
            print("Database [%s] exists. Skipping database creation" % Constant.DATABASE_NAME)
        except Exception as err:
            print("Create database failed:", err)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza AWS SDK per la versione 3. JavaScript Per ulteriori informazioni su come installare il client e sull'utilizzo, consulta [Timestream Write](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/index.html) Client - SDK per v3. AWS JavaScript 

[Vedi anche Class and. CreateDatabaseCommand [CreateDatabase](https://docs.aws.amazon.com/timestream/latest/developerguide/API_CreateDatabase.html)](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/classes/createdatabasecommand.html)

```
import { TimestreamWriteClient, CreateDatabaseCommand } from "@aws-sdk/client-timestream-write";
const writeClient = new TimestreamWriteClient({ region: "us-east-1" });

const params = {
    DatabaseName: "testDbFromNode"
};

const command = new CreateDatabaseCommand(params);

try {
    const data = await writeClient.send(command);
    console.log(`Database ${data.Database.DatabaseName} created successfully`);
} catch (error) {
    if (error.code === 'ConflictException') {
        console.log(`Database ${params.DatabaseName} already exists. Skipping creation.`);
    } else {
        console.log("Error creating database", error);
    }
}
```

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
async function createDatabase() {
    console.log("Creating Database");
    const params = {
        DatabaseName: constants.DATABASE_NAME
    };
 
    const promise = writeClient.createDatabase(params).promise();
 
    await promise.then(
        (data) => {
            console.log(`Database ${data.Database.DatabaseName} created successfully`);
        },
        (err) => {
            if (err.code === 'ConflictException') {
                console.log(`Database ${params.DatabaseName} already exists. Skipping creation.`);
            } else {
                console.log("Error creating database", err);
            }
        }
    );
}
```

------
#### [  .NET  ]

```
        public async Task CreateDatabase()
        {
            Console.WriteLine("Creating Database");

            try
            {
                var createDatabaseRequest = new CreateDatabaseRequest
                {
                    DatabaseName = Constants.DATABASE_NAME
                };
                CreateDatabaseResponse response = await writeClient.CreateDatabaseAsync(createDatabaseRequest);
                Console.WriteLine($"Database {Constants.DATABASE_NAME} created");
            }
            catch (ConflictException)
            {
                Console.WriteLine("Database already exists.");
            }
            catch (Exception e)
            {
                Console.WriteLine("Create database failed:" + e.ToString());
            }

        }
```

------

# Descrizione del database
<a name="code-samples.describe-db"></a>

È possibile utilizzare i seguenti frammenti di codice per ottenere informazioni sugli attributi del database appena creato.

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, consulta. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
    public void describeDatabase() {
        System.out.println("Describing database");
        final DescribeDatabaseRequest describeDatabaseRequest = new DescribeDatabaseRequest();
        describeDatabaseRequest.setDatabaseName(DATABASE_NAME);
        try {
            DescribeDatabaseResult result = amazonTimestreamWrite.describeDatabase(describeDatabaseRequest);
            final Database databaseRecord = result.getDatabase();
            final String databaseId = databaseRecord.getArn();
            System.out.println("Database " + DATABASE_NAME + " has id " + databaseId);
        } catch (final Exception e) {
            System.out.println("Database doesn't exist = " + e);
            throw e;
        }
    }
```

------
#### [  Java v2  ]

```
    public void describeDatabase() {
        System.out.println("Describing database");
        final DescribeDatabaseRequest describeDatabaseRequest = DescribeDatabaseRequest.builder()
                .databaseName(DATABASE_NAME).build();
        try {
            DescribeDatabaseResponse response = timestreamWriteClient.describeDatabase(describeDatabaseRequest);
            final Database databaseRecord = response.database();
            final String databaseId = databaseRecord.arn();
            System.out.println("Database " + DATABASE_NAME + " has id " + databaseId);
        } catch (final Exception e) {
            System.out.println("Database doesn't exist = " + e);
            throw e;
        }
    }
```

------
#### [  Go  ]

```
describeDatabaseOutput, err := writeSvc.DescribeDatabase(describeDatabaseInput)

    if err != nil {
        fmt.Println("Error:")
        fmt.Println(err)
    } else {
        fmt.Println("Describe database is successful, below is the output:")
        fmt.Println(describeDatabaseOutput)
    }
```

------
#### [  Python  ]

```
    def describe_database(self):
        print("Describing database")
        try:
            result = self.client.describe_database(DatabaseName=Constant.DATABASE_NAME)
            print("Database [%s] has id [%s]" % (Constant.DATABASE_NAME, result['Database']['Arn']))
        except self.client.exceptions.ResourceNotFoundException:
            print("Database doesn't exist")
        except Exception as err:
            print("Describe database failed:", err)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza AWS SDK per la versione 3. JavaScript Per ulteriori informazioni su come installare il client e sull'utilizzo, consulta [Timestream Write](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/index.html) Client - SDK per v3. AWS JavaScript 

[Vedi anche Class and. DescribeDatabaseCommand [DescribeDatabase](https://docs.aws.amazon.com/timestream/latest/developerguide/API_DescribeDatabase.html)](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/classes/describedatabasecommand.html)

```
import { TimestreamWriteClient, DescribeDatabaseCommand } from "@aws-sdk/client-timestream-write";
const writeClient = new TimestreamWriteClient({ region: "us-east-1" });

const params = {
    DatabaseName: "testDbFromNode"
};

const command = new DescribeDatabaseCommand(params);

try {
    const data = await writeClient.send(command);
    console.log(`Database ${data.Database.DatabaseName} has id ${data.Database.Arn}`);
} catch (error) {
    if (error.code === 'ResourceNotFoundException') {
        console.log("Database doesn't exist.");
    } else {
        console.log("Describe database failed.", error);
        throw error;
    }
}
```

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
async function describeDatabase () {
    console.log("Describing Database");
    const params = {
        DatabaseName: constants.DATABASE_NAME
    };
 
    const promise = writeClient.describeDatabase(params).promise();
 
    await promise.then(
        (data) => {
            console.log(`Database ${data.Database.DatabaseName} has id ${data.Database.Arn}`);
        },
        (err) => {
            if (err.code === 'ResourceNotFoundException') {
                console.log("Database doesn't exist.");
            } else {
                console.log("Describe database failed.", err);
                throw err;
            }
        }
    );
}
```

------
#### [  .NET  ]

```
        public async Task DescribeDatabase()
        {
            Console.WriteLine("Describing Database");

            try
            {
                var describeDatabaseRequest = new DescribeDatabaseRequest
                {
                    DatabaseName = Constants.DATABASE_NAME
                };
                DescribeDatabaseResponse response = await writeClient.DescribeDatabaseAsync(describeDatabaseRequest);
                Console.WriteLine($"Database {Constants.DATABASE_NAME} has id:{response.Database.Arn}");
            }
            catch (ResourceNotFoundException)
            {
                Console.WriteLine("Database does not exist.");
            }
            catch (Exception e)
            {
                Console.WriteLine("Describe database failed:" + e.ToString());
            }

        }
```

------

# Aggiorna database
<a name="code-samples.update-db"></a>

È possibile utilizzare i seguenti frammenti di codice per aggiornare i database.

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, consulta. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
    public void updateDatabase(String kmsId) {
        System.out.println("Updating kmsId to " + kmsId);
        UpdateDatabaseRequest request = new UpdateDatabaseRequest();
        request.setDatabaseName(DATABASE_NAME);
        request.setKmsKeyId(kmsId);
        try {
            UpdateDatabaseResult result = amazonTimestreamWrite.updateDatabase(request);
            System.out.println("Update Database complete");
        } catch (final ValidationException e) {
            System.out.println("Update database failed:");
            e.printStackTrace();
        } catch (final ResourceNotFoundException e) {
            System.out.println("Database " + DATABASE_NAME + " doesn't exist = " + e);
        } catch (final Exception e) {
            System.out.println("Could not update Database " + DATABASE_NAME + " = " + e);
            throw e;
        }
    }
```

------
#### [  Java v2  ]

```
    public void updateDatabase(String kmsKeyId) {

        if (kmsKeyId == null) {
            System.out.println("Skipping UpdateDatabase because KmsKeyId was not given");
            return;
        }

        System.out.println("Updating database");

        UpdateDatabaseRequest request = UpdateDatabaseRequest.builder()
                .databaseName(DATABASE_NAME)
                .kmsKeyId(kmsKeyId)
                .build();
        try {
            timestreamWriteClient.updateDatabase(request);
            System.out.println("Database [" + DATABASE_NAME + "] updated successfully with kmsKeyId " + kmsKeyId);
        } catch (ResourceNotFoundException e) {
            System.out.println("Database [" + DATABASE_NAME + "] does not exist. Skipping UpdateDatabase");
        } catch (Exception e) {
            System.out.println("UpdateDatabase failed: " + e);
        }
    }
```

------
#### [  Go  ]

```
// Update Database.
        updateDatabaseInput := &timestreamwrite.UpdateDatabaseInput {
            DatabaseName: aws.String(*databaseName),
            KmsKeyId: aws.String(*kmsKeyId),
        }

        updateDatabaseOutput, err := writeSvc.UpdateDatabase(updateDatabaseInput)

        if err != nil {
            fmt.Println("Error:")
            fmt.Println(err)
        } else {
            fmt.Println("Update database is successful, below is the output:")
            fmt.Println(updateDatabaseOutput)
        }
```

------
#### [  Python  ]

```
    def update_database(self, kms_id):
        print("Updating database")
        try:
            result = self.client.update_database(DatabaseName=Constant.DATABASE_NAME, KmsKeyId=kms_id)
            print("Database [%s] was updated to use kms [%s] successfully" % (Constant.DATABASE_NAME,
                                                                              result['Database']['KmsKeyId']))
        except self.client.exceptions.ResourceNotFoundException:
            print("Database doesn't exist")
        except Exception as err:
            print("Update database failed:", err)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza AWS SDK per la versione 3. JavaScript Per ulteriori informazioni su come installare il client e sull'utilizzo, consulta [Timestream Write](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/index.html) Client - SDK per v3. AWS JavaScript 

[Vedi anche Class and. UpdateDatabaseCommand [UpdateDatabase](https://docs.aws.amazon.com/timestream/latest/developerguide/API_UpdateDatabase.html)](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/classes/updatedatabasecommand.html)

```
import { TimestreamWriteClient, UpdateDatabaseCommand } from "@aws-sdk/client-timestream-write";
const writeClient = new TimestreamWriteClient({ region: "us-east-1" });
let updatedKmsKeyId = "<updatedKmsKeyId>";

const params = {
    DatabaseName: "testDbFromNode",
    KmsKeyId: updatedKmsKeyId
};

const command = new UpdateDatabaseCommand(params);

try {
    const data = await writeClient.send(command);
    console.log(`Database ${data.Database.DatabaseName} updated kmsKeyId to ${updatedKmsKeyId}`);
} catch (error) {
    if (error.code === 'ResourceNotFoundException') {
        console.log("Database doesn't exist.");
    } else {
        console.log("Update database failed.", error);
    }
}
```

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
async function updateDatabase(updatedKmsKeyId) { 
 
    if (updatedKmsKeyId === undefined) { 
        console.log("Skipping UpdateDatabase; KmsKeyId was not given"); 
        return; 
    } 
    console.log("Updating Database"); 
    const params = { 
        DatabaseName: constants.DATABASE_NAME, 
        KmsKeyId: updatedKmsKeyId 
    } 
 
    const promise = writeClient.updateDatabase(params).promise(); 
 
    await promise.then( 
        (data) => { 
            console.log(`Database ${data.Database.DatabaseName} updated kmsKeyId to ${updatedKmsKeyId}`); 
        }, 
        (err) => { 
            if (err.code === 'ResourceNotFoundException') { 
                console.log("Database doesn't exist."); 
            } else { 
                console.log("Update database failed.", err); 
            } 
        } 
    ); 
}
```

------
#### [  .NET  ]

```
        public async Task UpdateDatabase(String updatedKmsKeyId)
        {
            Console.WriteLine("Updating Database");

            try
            {
                var updateDatabaseRequest = new UpdateDatabaseRequest
                {
                    DatabaseName = Constants.DATABASE_NAME,
                    KmsKeyId = updatedKmsKeyId
                };
                UpdateDatabaseResponse response = await writeClient.UpdateDatabaseAsync(updateDatabaseRequest);
                Console.WriteLine($"Database {Constants.DATABASE_NAME} updated with KmsKeyId {updatedKmsKeyId}");
            }
            catch (ResourceNotFoundException)
            {
                Console.WriteLine("Database does not exist.");
            }
            catch (Exception e)
            {
                Console.WriteLine("Update database failed: " + e.ToString());
            }

        }
                
        private void PrintDatabases(List<Database> databases)
        {
            foreach (Database database in databases)
                Console.WriteLine($"Database:{database.DatabaseName}");
        }
```

------

# Eliminare il database
<a name="code-samples.delete-db"></a>

È possibile utilizzare il seguente frammento di codice per eliminare un database.

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, consulta. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
    public void deleteDatabase() {
        System.out.println("Deleting database");
        final DeleteDatabaseRequest deleteDatabaseRequest = new DeleteDatabaseRequest();
        deleteDatabaseRequest.setDatabaseName(DATABASE_NAME);
        try {
            DeleteDatabaseResult result =
                    amazonTimestreamWrite.deleteDatabase(deleteDatabaseRequest);
            System.out.println("Delete database status: " + result.getSdkHttpMetadata().getHttpStatusCode());
        } catch (final ResourceNotFoundException e) {
            System.out.println("Database " + DATABASE_NAME + " doesn't exist = " + e);
            throw e;
        } catch (final Exception e) {
            System.out.println("Could not delete Database " + DATABASE_NAME + " = " + e);
            throw e;
        }
    }
```

------
#### [  Java v2  ]

```
    public void deleteDatabase() {
        System.out.println("Deleting database");
        final DeleteDatabaseRequest deleteDatabaseRequest = new DeleteDatabaseRequest();
        deleteDatabaseRequest.setDatabaseName(DATABASE_NAME);
        try {
            DeleteDatabaseResult result =
                    amazonTimestreamWrite.deleteDatabase(deleteDatabaseRequest);
            System.out.println("Delete database status: " + result.getSdkHttpMetadata().getHttpStatusCode());
        } catch (final ResourceNotFoundException e) {
            System.out.println("Database " + DATABASE_NAME + " doesn't exist = " + e);
            throw e;
        } catch (final Exception e) {
            System.out.println("Could not delete Database " + DATABASE_NAME + " = " + e);
            throw e;
        }
    }
```

------
#### [  Go  ]

```
deleteDatabaseInput := &timestreamwrite.DeleteDatabaseInput{
        DatabaseName:   aws.String(*databaseName),
    }

    _, err = writeSvc.DeleteDatabase(deleteDatabaseInput)

    if err != nil {
        fmt.Println("Error:")
        fmt.Println(err)
    } else {
        fmt.Println("Database deleted:", *databaseName)
    }
```

------
#### [  Python  ]

```
    def delete_database(self):
        print("Deleting Database")
        try:
            result = self.client.delete_database(DatabaseName=Constant.DATABASE_NAME)
            print("Delete database status [%s]" % result['ResponseMetadata']['HTTPStatusCode'])
        except self.client.exceptions.ResourceNotFoundException:
            print("database [%s] doesn't exist" % Constant.DATABASE_NAME)
        except Exception as err:
            print("Delete database failed:", err)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza AWS SDK per la versione 3. JavaScript Per ulteriori informazioni su come installare il client e sull'utilizzo, consulta [Timestream Write](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/index.html) Client - SDK per v3. AWS JavaScript 

[Vedi anche Class and. DeleteDatabaseCommand [DeleteDatabase](https://docs.aws.amazon.com/timestream/latest/developerguide/API_DeleteDatabase.html)](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/classes/deletedatabasecommand.html)

```
import { TimestreamWriteClient, DeleteDatabaseCommand } from "@aws-sdk/client-timestream-write";
const writeClient = new TimestreamWriteClient({ region: "us-east-1" });

const params = {
    DatabaseName: "testDbFromNode"
};

const command = new DeleteDatabaseCommand(params);

try {
    const data = await writeClient.send(command);
    console.log("Deleted database"); 
} catch (error) {
    if (error.code === 'ResourceNotFoundException') { 
        console.log(`Database ${params.DatabaseName} doesn't exists.`); 
    } else { 
        console.log("Delete database failed.", error); 
        throw error; 
    } 
}
```

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
async function deleteDatabase() { 
    console.log("Deleting Database"); 
    const params = { 
        DatabaseName: constants.DATABASE_NAME 
    }; 
 
    const promise = writeClient.deleteDatabase(params).promise(); 
 
    await promise.then( 
        function (data) { 
            console.log("Deleted database"); 
         }, 
        function(err) { 
            if (err.code === 'ResourceNotFoundException') { 
                console.log(`Database ${params.DatabaseName} doesn't exists.`); 
            } else { 
                console.log("Delete database failed.", err); 
                throw err; 
            } 
        } 
    ); 
}
```

------
#### [  .NET  ]

```
        public async Task DeleteDatabase()
        {
            Console.WriteLine("Deleting database");
            try
            {
                var deleteDatabaseRequest = new DeleteDatabaseRequest
                {
                    DatabaseName = Constants.DATABASE_NAME
                };
                DeleteDatabaseResponse response = await writeClient.DeleteDatabaseAsync(deleteDatabaseRequest);
                Console.WriteLine($"Database {Constants.DATABASE_NAME} delete request status:{response.HttpStatusCode}");
            }
            catch (ResourceNotFoundException)
            {
                Console.WriteLine($"Database {Constants.DATABASE_NAME} does not exists");
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception while deleting database:" + e.ToString());
            }
        }
```

------

# Elenca database
<a name="code-samples.list-db"></a>

È possibile utilizzare i seguenti frammenti di codice per elencare i database.

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, consulta. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
    public void listDatabases() {
        System.out.println("Listing databases");
        ListDatabasesRequest request = new ListDatabasesRequest();
        ListDatabasesResult result = amazonTimestreamWrite.listDatabases(request);
        final List<Database> databases = result.getDatabases();
        printDatabases(databases);

        String nextToken = result.getNextToken();
        while (nextToken != null && !nextToken.isEmpty()) {
            request.setNextToken(nextToken);
            ListDatabasesResult nextResult = amazonTimestreamWrite.listDatabases(request);
            final List<Database> nextDatabases = nextResult.getDatabases();
            printDatabases(nextDatabases);
            nextToken = nextResult.getNextToken();
        }
    }
    
    private void printDatabases(List<Database> databases) {
        for (Database db : databases) {
            System.out.println(db.getDatabaseName());
        }
    }
```

------
#### [  Java v2  ]

```
    public void listDatabases() {
        System.out.println("Listing databases");
        ListDatabasesRequest request = ListDatabasesRequest.builder().maxResults(2).build();
        ListDatabasesIterable listDatabasesIterable = timestreamWriteClient.listDatabasesPaginator(request);
        for(ListDatabasesResponse listDatabasesResponse : listDatabasesIterable) {
            final List<Database> databases = listDatabasesResponse.databases();
            databases.forEach(database -> System.out.println(database.databaseName()));
        }
    }
```

------
#### [  Go  ]

```
// List databases.
    listDatabasesMaxResult := int64(15)

    listDatabasesInput := &timestreamwrite.ListDatabasesInput{
        MaxResults: &listDatabasesMaxResult,
    }

    listDatabasesOutput, err := writeSvc.ListDatabases(listDatabasesInput)

    if err != nil {
        fmt.Println("Error:")
        fmt.Println(err)
    } else {
        fmt.Println("List databases is successful, below is the output:")
        fmt.Println(listDatabasesOutput)
    }
```

------
#### [  Python  ]

```
    def list_databases(self):
        print("Listing databases")
        try:
            result = self.client.list_databases(MaxResults=5)
            self._print_databases(result['Databases'])
            next_token = result.get('NextToken', None)
            while next_token:
                result = self.client.list_databases(NextToken=next_token, MaxResults=5)
                self._print_databases(result['Databases'])
                next_token = result.get('NextToken', None)
        except Exception as err:
            print("List databases failed:", err)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza AWS SDK per la versione 3. JavaScript Per ulteriori informazioni su come installare il client e sull'utilizzo, consulta [Timestream Write](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/index.html) Client - SDK per v3. AWS JavaScript 

[Vedi anche Class and. ListDatabasesCommand [ListDatabases](https://docs.aws.amazon.com/timestream/latest/developerguide/API_ListDatabases.html)](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/classes/listdatabasescommand.html)

```
import { TimestreamWriteClient, ListDatabasesCommand } from "@aws-sdk/client-timestream-write";
const writeClient = new TimestreamWriteClient({ region: "us-east-1" });

const params = {
    MaxResults: 15
};

const command = new ListDatabasesCommand(params);

getDatabasesList(null);

async function getDatabasesList(nextToken) {
    if (nextToken) {
        params.NextToken = nextToken;
    }

    try {
        const data = await writeClient.send(command);

        data.Databases.forEach(function (database) {
            console.log(database.DatabaseName);
        });

        if (data.NextToken) {
            return getDatabasesList(data.NextToken);
        }
    } catch (error) {
        console.log("Error while listing databases", error);
    }
}
```

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
async function listDatabases() {
    console.log("Listing databases:");
    const databases = await getDatabasesList(null);
    databases.forEach(function(database){
        console.log(database.DatabaseName);
    });
}

function getDatabasesList(nextToken, databases = []) {
    var params = {
        MaxResults: 15
    };

    if(nextToken) {
        params.NextToken = nextToken;
    }

    return writeClient.listDatabases(params).promise()
        .then(
            (data) => {
                databases.push.apply(databases, data.Databases);
                if (data.NextToken) {
                    return getDatabasesList(data.NextToken, databases);
                } else {
                    return databases;
                }
            },
            (err) => {
                console.log("Error while listing databases", err);
            });
}
```

------
#### [  .NET  ]

```
        public async Task ListDatabases()
        {
            Console.WriteLine("Listing Databases");

            try
            {
                var listDatabasesRequest = new ListDatabasesRequest
                {
                    MaxResults = 5
                };
                ListDatabasesResponse response = await writeClient.ListDatabasesAsync(listDatabasesRequest);
                PrintDatabases(response.Databases);
                var nextToken = response.NextToken;
                while (nextToken != null)
                {
                    listDatabasesRequest.NextToken = nextToken;
                    response = await writeClient.ListDatabasesAsync(listDatabasesRequest);
                    PrintDatabases(response.Databases);
                    nextToken = response.NextToken;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("List database failed:" + e.ToString());
            }

        }
```

------

# Create table (Crea tabella)
<a name="code-samples.create-table"></a>

**Topics**
+ [Memory Store scrive](#code-samples.create-table-memorystore)
+ [Magnetic Store scrive](#code-samples.create-table-magneticstore)

## Memory Store scrive
<a name="code-samples.create-table-memorystore"></a>

È possibile utilizzare il seguente frammento di codice per creare una tabella con le scritture magnetiche disattivate, di conseguenza è possibile scrivere dati solo nella finestra di conservazione dell'archivio di memoria.

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, vedere. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
    public void createTable() {
        System.out.println("Creating table");
        CreateTableRequest createTableRequest = new CreateTableRequest();
        createTableRequest.setDatabaseName(DATABASE_NAME);
        createTableRequest.setTableName(TABLE_NAME);
        final RetentionProperties retentionProperties = new RetentionProperties()
                .withMemoryStoreRetentionPeriodInHours(HT_TTL_HOURS)
                .withMagneticStoreRetentionPeriodInDays(CT_TTL_DAYS);
        createTableRequest.setRetentionProperties(retentionProperties);

        try {
            amazonTimestreamWrite.createTable(createTableRequest);
            System.out.println("Table [" + TABLE_NAME + "] successfully created.");
        } catch (ConflictException e) {
            System.out.println("Table [" + TABLE_NAME + "] exists on database [" + DATABASE_NAME + "] . Skipping database creation");
        }
    }
```

------
#### [  Java v2  ]

```
    public void createTable() {
        System.out.println("Creating table");

        final RetentionProperties retentionProperties = RetentionProperties.builder()
                .memoryStoreRetentionPeriodInHours(HT_TTL_HOURS)
                .magneticStoreRetentionPeriodInDays(CT_TTL_DAYS).build();
        final CreateTableRequest createTableRequest = CreateTableRequest.builder()
                .databaseName(DATABASE_NAME).tableName(TABLE_NAME).retentionProperties(retentionProperties).build();

        try {
            timestreamWriteClient.createTable(createTableRequest);
            System.out.println("Table [" + TABLE_NAME + "] successfully created.");
        } catch (ConflictException e) {
            System.out.println("Table [" + TABLE_NAME + "] exists on database [" + DATABASE_NAME + "] . Skipping database creation");
        }
    }
```

------
#### [  Go  ]

```
// Create table.
    createTableInput := &timestreamwrite.CreateTableInput{
        DatabaseName: aws.String(*databaseName),
        TableName:    aws.String(*tableName),
    }
    _, err = writeSvc.CreateTable(createTableInput)

    if err != nil {
        fmt.Println("Error:")
        fmt.Println(err)
    } else {
        fmt.Println("Create table is successful")
    }
```

------
#### [  Python  ]

```
    def create_table(self):
        print("Creating table")
        retention_properties = {
            'MemoryStoreRetentionPeriodInHours': Constant.HT_TTL_HOURS,
            'MagneticStoreRetentionPeriodInDays': Constant.CT_TTL_DAYS
        }
        try:
            self.client.create_table(DatabaseName=Constant.DATABASE_NAME, TableName=Constant.TABLE_NAME,
                                     RetentionProperties=retention_properties)
            print("Table [%s] successfully created." % Constant.TABLE_NAME)
        except self.client.exceptions.ConflictException:
            print("Table [%s] exists on database [%s]. Skipping table creation" % (
                Constant.TABLE_NAME, Constant.DATABASE_NAME))
        except Exception as err:
            print("Create table failed:", err)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza AWS SDK per la versione 3. JavaScript Per ulteriori informazioni su come installare il client e sull'utilizzo, consulta [Timestream Write](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/index.html) Client - SDK per v3. AWS JavaScript 

[Vedi anche Class and. CreateTableCommand [CreateTable](https://docs.aws.amazon.com/timestream/latest/developerguide/API_CreateTable.html)](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/classes/createtablecommand.html)

```
import { TimestreamWriteClient, CreateTableCommand } from "@aws-sdk/client-timestream-write";
const writeClient = new TimestreamWriteClient({ region: "us-east-1" });

const params = {
    DatabaseName: "testDbFromNode",
    TableName: "testTableFromNode",
    RetentionProperties: {
        MemoryStoreRetentionPeriodInHours: 24,
        MagneticStoreRetentionPeriodInDays: 365
    }
};

const command = new CreateTableCommand(params);

try {
    const data = await writeClient.send(command);
    console.log(`Table ${data.Table.TableName} created successfully`);
} catch (error) {
    if (error.code === 'ConflictException') {
        console.log(`Table ${params.TableName} already exists on db ${params.DatabaseName}. Skipping creation.`);
    } else {
        console.log("Error creating table. ", error);
        throw error;
    }
}
```

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
async function createTable() {
    console.log("Creating Table");
    const params = {
        DatabaseName: constants.DATABASE_NAME,
        TableName: constants.TABLE_NAME,
        RetentionProperties: {
            MemoryStoreRetentionPeriodInHours: constants.HT_TTL_HOURS,
            MagneticStoreRetentionPeriodInDays: constants.CT_TTL_DAYS
        }
    };

    const promise = writeClient.createTable(params).promise();

    await promise.then(
        (data) => {
            console.log(`Table ${data.Table.TableName} created successfully`);
        },
        (err) => {
            if (err.code === 'ConflictException') {
                console.log(`Table ${params.TableName} already exists on db ${params.DatabaseName}. Skipping creation.`);
            } else {
                console.log("Error creating table. ", err);
                throw err;
            }
        }
    );
}
```

------
#### [  .NET  ]

```
        public async Task CreateTable()
        {
            Console.WriteLine("Creating Table");

            try
            {
                var createTableRequest = new CreateTableRequest
                {
                    DatabaseName = Constants.DATABASE_NAME,
                    TableName = Constants.TABLE_NAME,
                    RetentionProperties = new RetentionProperties
                    {
                        MagneticStoreRetentionPeriodInDays = Constants.CT_TTL_DAYS,
                        MemoryStoreRetentionPeriodInHours = Constants.HT_TTL_HOURS
                    }
                };
                CreateTableResponse response = await writeClient.CreateTableAsync(createTableRequest);
                Console.WriteLine($"Table {Constants.TABLE_NAME} created");
            }
            catch (ConflictException)
            {
                Console.WriteLine("Table already exists.");
            }
            catch (Exception e)
            {
                Console.WriteLine("Create table failed:" + e.ToString());
            }

        }
```

------

## Magnetic Store scrive
<a name="code-samples.create-table-magneticstore"></a>

È possibile utilizzare il seguente frammento di codice per creare una tabella con le scritture magnetiche abilitate. Con le scritture magnetiche è possibile scrivere dati sia nella finestra di conservazione dell'archivio di memoria che nella finestra di conservazione dell'archivio magnetico.

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, vedere. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
    public void createTable(String databaseName, String tableName) {
        System.out.println("Creating table");
        CreateTableRequest createTableRequest = new CreateTableRequest();
        createTableRequest.setDatabaseName(databaseName);
        createTableRequest.setTableName(tableName);
        final RetentionProperties retentionProperties = new RetentionProperties()
                .withMemoryStoreRetentionPeriodInHours(HT_TTL_HOURS)
                .withMagneticStoreRetentionPeriodInDays(CT_TTL_DAYS);
        createTableRequest.setRetentionProperties(retentionProperties);
        // Enable MagneticStoreWrite
        final MagneticStoreWriteProperties magneticStoreWriteProperties = new MagneticStoreWriteProperties()
                .withEnableMagneticStoreWrites(true);
        createTableRequest.setMagneticStoreWriteProperties(magneticStoreWriteProperties);
        try {
            amazonTimestreamWrite.createTable(createTableRequest);
            System.out.println("Table [" + tableName + "] successfully created.");
        } catch (ConflictException e) {
            System.out.println("Table [" + tableName + "] exists on database [" + databaseName + "] . Skipping table creation");
            //We do not throw exception here, we use the existing table instead
        }
    }
```

------
#### [  Java v2  ]

```
    public void createTable(String databaseName, String tableName) {
        System.out.println("Creating table");

        // Enable MagneticStoreWrite
        final MagneticStoreWriteProperties magneticStoreWriteProperties =
                MagneticStoreWriteProperties.builder()
                        .enableMagneticStoreWrites(true)
                        .build();

        CreateTableRequest createTableRequest =
                CreateTableRequest.builder()
                        .databaseName(databaseName)
                        .tableName(tableName)
                        .retentionProperties(RetentionProperties.builder()
                                .memoryStoreRetentionPeriodInHours(HT_TTL_HOURS)
                                .magneticStoreRetentionPeriodInDays(CT_TTL_DAYS)
                                .build())
                        .magneticStoreWriteProperties(magneticStoreWriteProperties)
                        .build();
        try {
            timestreamWriteClient.createTable(createTableRequest);
            System.out.println("Table [" + tableName + "] successfully created.");
        } catch (ConflictException e) {
            System.out.println("Table [" + tableName + "] exists in database [" + databaseName + "] . Skipping table creation");
        }
    }
```

------
#### [  Go  ]

```
// Create table.
    createTableInput := &timestreamwrite.CreateTableInput{
        DatabaseName: aws.String(*databaseName),
        TableName:    aws.String(*tableName),
    // Enable MagneticStoreWrite
        MagneticStoreWriteProperties: &timestreamwrite.MagneticStoreWriteProperties{
            EnableMagneticStoreWrites: aws.Bool(true),
             },
      }
    _, err = writeSvc.CreateTable(createTableInput)
```

------
#### [  Python  ]

```
    def create_table(self):
        print("Creating table")
        retention_properties = {
            'MemoryStoreRetentionPeriodInHours': Constant.HT_TTL_HOURS,
            'MagneticStoreRetentionPeriodInDays': Constant.CT_TTL_DAYS
        }
        magnetic_store_write_properties = {
            'EnableMagneticStoreWrites': True
        }
        try:
            self.client.create_table(DatabaseName=Constant.DATABASE_NAME, TableName=Constant.TABLE_NAME,
                                     RetentionProperties=retention_properties,
                                     MagneticStoreWriteProperties=magnetic_store_write_properties)
            print("Table [%s] successfully created." % Constant.TABLE_NAME)
        except self.client.exceptions.ConflictException:
            print("Table [%s] exists on database [%s]. Skipping table creation" % (
                Constant.TABLE_NAME, Constant.DATABASE_NAME))
        except Exception as err:
            print("Create table failed:", err)
```

------
#### [  Node.js  ]

```
async function createTable() {
    console.log("Creating Table");

    const params = {
        DatabaseName: constants.DATABASE_NAME,
        TableName: constants.TABLE_NAME,
        RetentionProperties: {
            MemoryStoreRetentionPeriodInHours: constants.HT_TTL_HOURS,
            MagneticStoreRetentionPeriodInDays: constants.CT_TTL_DAYS
        },
        MagneticStoreWriteProperties: {
            EnableMagneticStoreWrites: true
        }
    };

    const promise = writeClient.createTable(params).promise();

    await promise.then(
        (data) => {
            console.log(`Table ${data.Table.TableName} created successfully`);
        },
        (err) => {
            if (err.code === 'ConflictException') {
                console.log(`Table ${params.TableName} already exists on db ${params.DatabaseName}. Skipping creation.`);
            } else {
                console.log("Error creating table. ", err);
                throw err;
            }
        }
    );
}
```

------
#### [  .NET  ]

```
        public async Task CreateTable()
        {
            Console.WriteLine("Creating Table");

            try
            {
                var createTableRequest = new CreateTableRequest
                {
                    DatabaseName = Constants.DATABASE_NAME,
                    TableName = Constants.TABLE_NAME,
                    RetentionProperties = new RetentionProperties
                    {
                        MagneticStoreRetentionPeriodInDays = Constants.CT_TTL_DAYS,
                        MemoryStoreRetentionPeriodInHours = Constants.HT_TTL_HOURS
                    },
                    // Enable MagneticStoreWrite
                    MagneticStoreWriteProperties = new MagneticStoreWriteProperties 
                    {
                        EnableMagneticStoreWrites = true,
                    }
                };
                CreateTableResponse response = await writeClient.CreateTableAsync(createTableRequest);
                Console.WriteLine($"Table {Constants.TABLE_NAME} created");
            }
            catch (ConflictException)
            {
                Console.WriteLine("Table already exists.");
            }
            catch (Exception e)
            {
                Console.WriteLine("Create table failed:" + e.ToString());
            }

        }
```

------

# Descrivi tabella
<a name="code-samples.describe-table"></a>

È possibile utilizzare i seguenti frammenti di codice per ottenere informazioni sugli attributi della tabella.

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, consulta. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
    public void describeTable() {
        System.out.println("Describing table");
        final DescribeTableRequest describeTableRequest = new DescribeTableRequest();
        describeTableRequest.setDatabaseName(DATABASE_NAME);
        describeTableRequest.setTableName(TABLE_NAME);
        try {
            DescribeTableResult result = amazonTimestreamWrite.describeTable(describeTableRequest);
            String tableId = result.getTable().getArn();
            System.out.println("Table " + TABLE_NAME + " has id " + tableId);
        } catch (final Exception e) {
            System.out.println("Table " + TABLE_NAME + " doesn't exist = " + e);
            throw e;
        }
    }
```

------
#### [  Java v2  ]

```
    public void describeTable() {
        System.out.println("Describing table");
        final DescribeTableRequest describeTableRequest = DescribeTableRequest.builder()
                .databaseName(DATABASE_NAME).tableName(TABLE_NAME).build();
        try {
            DescribeTableResponse response = timestreamWriteClient.describeTable(describeTableRequest);
            String tableId = response.table().arn();
            System.out.println("Table " + TABLE_NAME + " has id " + tableId);
        } catch (final Exception e) {
            System.out.println("Table " + TABLE_NAME + " doesn't exist = " + e);
            throw e;
        }
    }
```

------
#### [  Go  ]

```
// Describe table.
    describeTableInput := &timestreamwrite.DescribeTableInput{
        DatabaseName: aws.String(*databaseName),
        TableName:    aws.String(*tableName),
    }
    describeTableOutput, err := writeSvc.DescribeTable(describeTableInput)

    if err != nil {
        fmt.Println("Error:")
        fmt.Println(err)
    } else {
        fmt.Println("Describe table is successful, below is the output:")
        fmt.Println(describeTableOutput)
    }
```

------
#### [  Python  ]

```
    def describe_table(self):
        print("Describing table")
        try:
            result = self.client.describe_table(DatabaseName=Constant.DATABASE_NAME, TableName=Constant.TABLE_NAME)
            print("Table [%s] has id [%s]" % (Constant.TABLE_NAME, result['Table']['Arn']))
        except self.client.exceptions.ResourceNotFoundException:
            print("Table doesn't exist")
        except Exception as err:
            print("Describe table failed:", err)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza AWS SDK per la versione 3. JavaScript Per ulteriori informazioni su come installare il client e sull'utilizzo, consulta [Timestream Write](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/index.html) Client - SDK per v3. AWS JavaScript 

[Vedi anche Class and. DescribeTableCommand [DescribeTable](https://docs.aws.amazon.com/timestream/latest/developerguide/API_DescribeTable.html)](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/classes/describedatabasecommand.html)

```
import { TimestreamWriteClient, DescribeTableCommand } from "@aws-sdk/client-timestream-write";
const writeClient = new TimestreamWriteClient({ region: "us-east-1" });

const params = {
    DatabaseName: "testDbFromNode",
    TableName: "testTableFromNode"
};

const command = new DescribeTableCommand(params);

try {
    const data = await writeClient.send(command);
    console.log(`Table ${data.Table.TableName} has id ${data.Table.Arn}`);
} catch (error) {
    if (error.code === 'ResourceNotFoundException') {
        console.log("Table or Database doesn't exist.");
    } else {
        console.log("Describe table failed.", error);
        throw error;
    }
}
```

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
async function describeTable() {
    console.log("Describing Table");
    const params = {
        DatabaseName: constants.DATABASE_NAME,
        TableName: constants.TABLE_NAME
    };

    const promise = writeClient.describeTable(params).promise();

    await promise.then(
        (data) => {
            console.log(`Table ${data.Table.TableName} has id ${data.Table.Arn}`);
        },
        (err) => {
            if (err.code === 'ResourceNotFoundException') {
                console.log("Table or Database doesn't exists.");
            } else {
                console.log("Describe table failed.", err);
                throw err;
            }
        }
    );
}
```

------
#### [  .NET  ]

```
        public async Task DescribeTable()
        {
            Console.WriteLine("Describing Table");

            try
            {
                var describeTableRequest = new DescribeTableRequest
                {
                    DatabaseName = Constants.DATABASE_NAME,
                    TableName = Constants.TABLE_NAME
                };
                DescribeTableResponse response = await writeClient.DescribeTableAsync(describeTableRequest);
                Console.WriteLine($"Table {Constants.TABLE_NAME} has id:{response.Table.Arn}");
            }
            catch (ResourceNotFoundException)
            {
                Console.WriteLine("Table does not exist.");
            }
            catch (Exception e)
            {
                Console.WriteLine("Describe table failed:" + e.ToString());
            }

        }
```

------

# Update Table (Aggiorna tabella)
<a name="code-samples.update-table"></a>

È possibile utilizzare i seguenti frammenti di codice per aggiornare una tabella.

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, consulta. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
    public void updateTable() {
        System.out.println("Updating table");
        UpdateTableRequest updateTableRequest = new UpdateTableRequest();
        updateTableRequest.setDatabaseName(DATABASE_NAME);
        updateTableRequest.setTableName(TABLE_NAME);

        final RetentionProperties retentionProperties = new RetentionProperties()
                .withMemoryStoreRetentionPeriodInHours(HT_TTL_HOURS)
                .withMagneticStoreRetentionPeriodInDays(CT_TTL_DAYS);

        updateTableRequest.setRetentionProperties(retentionProperties);

        amazonTimestreamWrite.updateTable(updateTableRequest);
        System.out.println("Table updated");
    }
```

------
#### [  Java v2  ]

```
    public void updateTable() {
        System.out.println("Updating table");

        final RetentionProperties retentionProperties = RetentionProperties.builder()
                .memoryStoreRetentionPeriodInHours(HT_TTL_HOURS)
                .magneticStoreRetentionPeriodInDays(CT_TTL_DAYS).build();
        final UpdateTableRequest updateTableRequest = UpdateTableRequest.builder()
                .databaseName(DATABASE_NAME).tableName(TABLE_NAME).retentionProperties(retentionProperties).build();

        timestreamWriteClient.updateTable(updateTableRequest);
        System.out.println("Table updated");
    }
```

------
#### [  Go  ]

```
// Update table.
    magneticStoreRetentionPeriodInDays := int64(7 * 365)
    memoryStoreRetentionPeriodInHours := int64(24)

    updateTableInput := &timestreamwrite.UpdateTableInput{
        DatabaseName: aws.String(*databaseName),
        TableName:    aws.String(*tableName),
        RetentionProperties: &timestreamwrite.RetentionProperties{
            MagneticStoreRetentionPeriodInDays: &magneticStoreRetentionPeriodInDays,
            MemoryStoreRetentionPeriodInHours:  &memoryStoreRetentionPeriodInHours,
        },
    }
    updateTableOutput, err := writeSvc.UpdateTable(updateTableInput)

    if err != nil {
        fmt.Println("Error:")
        fmt.Println(err)
    } else {
        fmt.Println("Update table is successful, below is the output:")
        fmt.Println(updateTableOutput)
    }
```

------
#### [  Python  ]

```
    def update_table(self):
        print("Updating table")
        retention_properties = {
            'MemoryStoreRetentionPeriodInHours': Constant.HT_TTL_HOURS,
            'MagneticStoreRetentionPeriodInDays': Constant.CT_TTL_DAYS
        }
        try:
            self.client.update_table(DatabaseName=Constant.DATABASE_NAME, TableName=Constant.TABLE_NAME,
                                     RetentionProperties=retention_properties)
            print("Table updated.")
        except Exception as err:
            print("Update table failed:", err)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza AWS SDK per la versione 3. JavaScript Per ulteriori informazioni su come installare il client e sull'utilizzo, consulta [Timestream Write](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/index.html) Client - SDK per v3. AWS JavaScript 

[Vedi anche Class and. UpdateTableCommand [UpdateTable](https://docs.aws.amazon.com/timestream/latest/developerguide/API_UpdateTable.html)](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/classes/updatetablecommand.html)

```
import { TimestreamWriteClient, UpdateTableCommand } from "@aws-sdk/client-timestream-write";
const writeClient = new TimestreamWriteClient({ region: "us-east-1" });

const params = {
    DatabaseName: "testDbFromNode",
    TableName: "testTableFromNode",
    RetentionProperties: {
        MemoryStoreRetentionPeriodInHours: 24,
        MagneticStoreRetentionPeriodInDays: 180
    }
};

const command = new UpdateTableCommand(params);

try {
    const data = await writeClient.send(command);
    console.log("Table updated")
} catch (error) {
    console.log("Error updating table. ", error);
}
```

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
async function updateTable() {
    console.log("Updating Table");
    const params = {
        DatabaseName: constants.DATABASE_NAME,
        TableName: constants.TABLE_NAME,
        RetentionProperties: {
            MemoryStoreRetentionPeriodInHours: constants.HT_TTL_HOURS,
            MagneticStoreRetentionPeriodInDays: constants.CT_TTL_DAYS
        }
    };

    const promise = writeClient.updateTable(params).promise();

    await promise.then(
        (data) => {
            console.log("Table updated")
        },
        (err) => {
            console.log("Error updating table. ", err);
            throw err;
        }
    );
}
```

------
#### [  .NET  ]

```
        public async Task UpdateTable()
        {
            Console.WriteLine("Updating Table");

            try
            {
                var updateTableRequest = new UpdateTableRequest
                {
                    DatabaseName = Constants.DATABASE_NAME,
                    TableName = Constants.TABLE_NAME,
                    RetentionProperties = new RetentionProperties
                    {
                        MagneticStoreRetentionPeriodInDays = Constants.CT_TTL_DAYS,
                        MemoryStoreRetentionPeriodInHours = Constants.HT_TTL_HOURS
                    }
                };
                UpdateTableResponse response = await writeClient.UpdateTableAsync(updateTableRequest);
                Console.WriteLine($"Table {Constants.TABLE_NAME} updated");
            }
            catch (ResourceNotFoundException)
            {
                Console.WriteLine("Table does not exist.");
            }
            catch (Exception e)
            {
                Console.WriteLine("Update table failed:" + e.ToString());
            }

        }
```

------

# Delete Table (Elimina tabella)
<a name="code-samples.delete-table"></a>

È possibile utilizzare i seguenti frammenti di codice per eliminare una tabella.

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, consulta. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
    public void deleteTable() {
        System.out.println("Deleting table");
        final DeleteTableRequest deleteTableRequest = new DeleteTableRequest();
        deleteTableRequest.setDatabaseName(DATABASE_NAME);
        deleteTableRequest.setTableName(TABLE_NAME);
        try {
            DeleteTableResult result =
                    amazonTimestreamWrite.deleteTable(deleteTableRequest);
            System.out.println("Delete table status: " + result.getSdkHttpMetadata().getHttpStatusCode());
        } catch (final ResourceNotFoundException e) {
            System.out.println("Table " + TABLE_NAME + " doesn't exist = " + e);
            throw e;
        } catch (final Exception e) {
            System.out.println("Could not delete table " + TABLE_NAME + " = " + e);
            throw e;
        }
    }
```

------
#### [  Java v2  ]

```
    public void deleteTable() {
        System.out.println("Deleting table");
        final DeleteTableRequest deleteTableRequest = DeleteTableRequest.builder()
                .databaseName(DATABASE_NAME).tableName(TABLE_NAME).build();
        try {
            DeleteTableResponse response =
                    timestreamWriteClient.deleteTable(deleteTableRequest);
            System.out.println("Delete table status: " + response.sdkHttpResponse().statusCode());
        } catch (final ResourceNotFoundException e) {
            System.out.println("Table " + TABLE_NAME + " doesn't exist = " + e);
            throw e;
        } catch (final Exception e) {
            System.out.println("Could not delete table " + TABLE_NAME + " = " + e);
            throw e;
        }
    }
```

------
#### [  Go  ]

```
deleteTableInput := &timestreamwrite.DeleteTableInput{
        DatabaseName:   aws.String(*databaseName),
        TableName:    aws.String(*tableName),
    }
    _, err = writeSvc.DeleteTable(deleteTableInput)

    if err != nil {
        fmt.Println("Error:")
        fmt.Println(err)
    } else {
        fmt.Println("Table deleted", *tableName)
    }
```

------
#### [  Python  ]

```
    def delete_table(self):
        print("Deleting Table")
        try:
            result = self.client.delete_table(DatabaseName=Constant.DATABASE_NAME, TableName=Constant.TABLE_NAME)
            print("Delete table status [%s]" % result['ResponseMetadata']['HTTPStatusCode'])
        except self.client.exceptions.ResourceNotFoundException:
            print("Table [%s] doesn't exist" % Constant.TABLE_NAME)
        except Exception as err:
            print("Delete table failed:", err)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza AWS SDK per la versione 3. JavaScript Per ulteriori informazioni su come installare il client e sull'utilizzo, consulta [Timestream Write](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/index.html) Client - SDK per v3. AWS JavaScript 

[Vedi anche Class and. DeleteTableCommand [DeleteTable](https://docs.aws.amazon.com/timestream/latest/developerguide/API_DeleteTable.html)](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/classes/deletetablecommand.html)

```
import { TimestreamWriteClient, DeleteTableCommand } from "@aws-sdk/client-timestream-write";
const writeClient = new TimestreamWriteClient({ region: "us-east-1" });

const params = {
    DatabaseName: "testDbFromNode",
    TableName: "testTableFromNode"
};

const command = new DeleteTableCommand(params);

try {
    const data = await writeClient.send(command);
    console.log("Deleted table"); 
} catch (error) {
    if (error.code === 'ResourceNotFoundException') { 
        console.log(`Table ${params.TableName} or Database ${params.DatabaseName} doesn't exist.`); 
    } else { 
        console.log("Delete table failed.", error); 
        throw error; 
    } 
}
```

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
async function deleteTable() { 
    console.log("Deleting Table"); 
    const params = { 
        DatabaseName: constants.DATABASE_NAME, 
        TableName: constants.TABLE_NAME 
    }; 
 
    const promise = writeClient.deleteTable(params).promise(); 

    await promise.then( 
        function (data) { 
            console.log("Deleted table"); 
        }, 
        function(err) { 
            if (err.code === 'ResourceNotFoundException') { 
                console.log(`Table ${params.TableName} or Database ${params.DatabaseName} doesn't exists.`); 
            } else { 
                console.log("Delete table failed.", err); 
                throw err; 
            } 
        } 
    ); 
}
```

------
#### [  .NET  ]

```
        public async Task DeleteTable()
        {
            Console.WriteLine("Deleting table");
            try
            {
                var deleteTableRequest = new DeleteTableRequest
                {
                    DatabaseName = Constants.DATABASE_NAME,
                    TableName = Constants.TABLE_NAME
                };
                DeleteTableResponse response = await writeClient.DeleteTableAsync(deleteTableRequest);
                Console.WriteLine($"Table {Constants.TABLE_NAME} delete request status: {response.HttpStatusCode}");
            }
            catch (ResourceNotFoundException)
            {
                Console.WriteLine($"Table {Constants.TABLE_NAME} does not exists");
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception while deleting table:" + e.ToString());
            }
        }
```

------

# Elencare tabelle
<a name="code-samples.list-table"></a>

È possibile utilizzare i seguenti frammenti di codice per elencare le tabelle.

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, consulta. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
    public void listTables() {
        System.out.println("Listing tables");
        ListTablesRequest request = new ListTablesRequest();
        request.setDatabaseName(DATABASE_NAME);
        ListTablesResult result = amazonTimestreamWrite.listTables(request);
        printTables(result.getTables());

        String nextToken = result.getNextToken();
        while (nextToken != null && !nextToken.isEmpty()) {
            request.setNextToken(nextToken);
            ListTablesResult nextResult = amazonTimestreamWrite.listTables(request);

            printTables(nextResult.getTables());
            nextToken = nextResult.getNextToken();
        }
    }
    
     private void printTables(List<Table> tables) {
        for (Table table : tables) {
            System.out.println(table.getTableName());
        }
    }
```

------
#### [  Java v2  ]

```
    public void listTables() {
        System.out.println("Listing tables");
        ListTablesRequest request = ListTablesRequest.builder().databaseName(DATABASE_NAME).maxResults(2).build();
        ListTablesIterable listTablesIterable = timestreamWriteClient.listTablesPaginator(request);
        for(ListTablesResponse listTablesResponse : listTablesIterable) {
            final List<Table> tables = listTablesResponse.tables();
            tables.forEach(table -> System.out.println(table.tableName()));
        }
    }
```

------
#### [  Go  ]

```
listTablesMaxResult := int64(15)

    listTablesInput := &timestreamwrite.ListTablesInput{
        DatabaseName: aws.String(*databaseName),
        MaxResults:   &listTablesMaxResult,
    }
    listTablesOutput, err := writeSvc.ListTables(listTablesInput)

    if err != nil {
        fmt.Println("Error:")
        fmt.Println(err)
    } else {
        fmt.Println("List tables is successful, below is the output:")
        fmt.Println(listTablesOutput)
    }
```

------
#### [  Python  ]

```
    def list_tables(self):
        print("Listing tables")
        try:
            result = self.client.list_tables(DatabaseName=Constant.DATABASE_NAME, MaxResults=5)
            self.__print_tables(result['Tables'])
            next_token = result.get('NextToken', None)
            while next_token:
                result = self.client.list_tables(DatabaseName=Constant.DATABASE_NAME,
                                                 NextToken=next_token, MaxResults=5)
                self.__print_tables(result['Tables'])
                next_token = result.get('NextToken', None)
        except Exception as err:
            print("List tables failed:", err)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza AWS SDK per la versione 3. JavaScript Per ulteriori informazioni su come installare il client e sull'utilizzo, consulta [Timestream Write](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/index.html) Client - SDK per v3. AWS JavaScript 

[Vedi anche Class and. ListTablesCommand [ListTables](https://docs.aws.amazon.com/timestream/latest/developerguide/API_ListTables.html)](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/classes/listtablescommand.html)

```
import { TimestreamWriteClient, ListTablesCommand } from "@aws-sdk/client-timestream-write";
const writeClient = new TimestreamWriteClient({ region: "us-east-1" });

const params = {
    DatabaseName: "testDbFromNode",
    MaxResults: 15
};

const command = new ListTablesCommand(params);

getTablesList(null);

async function getTablesList(nextToken) {
    if (nextToken) {
        params.NextToken = nextToken;
    }

    try {
        const data = await writeClient.send(command);

        data.Tables.forEach(function (table) {
            console.log(table.TableName);
        });

        if (data.NextToken) {
            return getTablesList(data.NextToken);
        }
    } catch (error) {
        console.log("Error while listing tables", error);
    }
}
```

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
async function listTables() {
    console.log("Listing tables:");
    const tables = await getTablesList(null);
    tables.forEach(function(table){
        console.log(table.TableName);
    });
}

function getTablesList(nextToken, tables = []) {
    var params = {
        DatabaseName: constants.DATABASE_NAME,
        MaxResults: 15
    };

    if(nextToken) {
        params.NextToken = nextToken;
    }

    return writeClient.listTables(params).promise()
        .then(
            (data) => {
                tables.push.apply(tables, data.Tables);
                if (data.NextToken) {
                    return getTablesList(data.NextToken, tables);
                } else {
                    return tables;
                }
            },
            (err) => {
                console.log("Error while listing databases", err);
            });
}
```

------
#### [  .NET  ]

```
        public async Task ListTables()
        {
            Console.WriteLine("Listing Tables");

            try
            {
                var listTablesRequest = new ListTablesRequest
                {
                    MaxResults = 5,
                    DatabaseName = Constants.DATABASE_NAME
                };
                ListTablesResponse response = await writeClient.ListTablesAsync(listTablesRequest);
                PrintTables(response.Tables);
                string nextToken = response.NextToken;
                while (nextToken != null)
                {
                    listTablesRequest.NextToken = nextToken;
                    response = await writeClient.ListTablesAsync(listTablesRequest);
                    PrintTables(response.Tables);
                    nextToken = response.NextToken;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("List table failed:" + e.ToString());
            }

        }

        private void PrintTables(List<Table> tables)
        {
            foreach (Table table in tables)
                Console.WriteLine($"Table: {table.TableName}");
        }
```

------

# Scrivere dati (inserti e sconvolgimenti)
<a name="code-samples.write"></a>

**Topics**
+ [Scrittura di batch di record](#code-samples.write.write-batches)
+ [Scrittura di batch di record con attributi comuni](#code-samples.write.write-batches-common-attrs)
+ [Sconvolgimento dei record](#code-samples.write.upserts)
+ [Esempio di attributo multimisura](#code-samples.write.data.multivalue)
+ [Gestione degli errori di scrittura](#code-samples.write.rejectedRecordException)

## Scrittura di batch di record
<a name="code-samples.write.write-batches"></a>

Puoi utilizzare i seguenti frammenti di codice per scrivere dati in una tabella Amazon Timestream. La scrittura di dati in batch aiuta a ottimizzare il costo delle scritture. Per ulteriori informazioni, consulta [Calcolo del numero di scritture](metering-and-pricing.writes.md#metering-and-pricing.writes.write-size-multiple-events). 

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, vedere. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
  public void writeRecords() {
    System.out.println("Writing records");
    // Specify repeated values for all records
    List<Record> records = new ArrayList<>();
    final long time = System.currentTimeMillis();

    List<Dimension> dimensions = new ArrayList<>();
    final Dimension region = new Dimension().withName("region").withValue("us-east-1");
    final Dimension az = new Dimension().withName("az").withValue("az1");
    final Dimension hostname = new Dimension().withName("hostname").withValue("host1");

    dimensions.add(region);
    dimensions.add(az);
    dimensions.add(hostname);

    Record cpuUtilization = new Record()
        .withDimensions(dimensions)
        .withMeasureName("cpu_utilization")
        .withMeasureValue("13.5")
        .withMeasureValueType(MeasureValueType.DOUBLE)
        .withTime(String.valueOf(time));
    Record memoryUtilization = new Record()
        .withDimensions(dimensions)
        .withMeasureName("memory_utilization")
        .withMeasureValue("40")
        .withMeasureValueType(MeasureValueType.DOUBLE)
        .withTime(String.valueOf(time));

    records.add(cpuUtilization);
    records.add(memoryUtilization);

    WriteRecordsRequest writeRecordsRequest = new WriteRecordsRequest()
        .withDatabaseName(DATABASE_NAME)
        .withTableName(TABLE_NAME)
        .withRecords(records);

    try {
      WriteRecordsResult writeRecordsResult = amazonTimestreamWrite.writeRecords(writeRecordsRequest);
      System.out.println("WriteRecords Status: " + writeRecordsResult.getSdkHttpMetadata().getHttpStatusCode());
    } catch (RejectedRecordsException e) {
      System.out.println("RejectedRecords: " + e);
      for (RejectedRecord rejectedRecord : e.getRejectedRecords()) {
        System.out.println("Rejected Index " + rejectedRecord.getRecordIndex() + ": "
            + rejectedRecord.getReason());
      }
      System.out.println("Other records were written successfully. ");
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }
  }
```

------
#### [  Java v2  ]

```
  public void writeRecords() {
    System.out.println("Writing records");
    // Specify repeated values for all records
    List<Record> records = new ArrayList<>();
    final long time = System.currentTimeMillis();

    List<Dimension> dimensions = new ArrayList<>();
    final Dimension region = Dimension.builder().name("region").value("us-east-1").build();
    final Dimension az = Dimension.builder().name("az").value("az1").build();
    final Dimension hostname = Dimension.builder().name("hostname").value("host1").build();

    dimensions.add(region);
    dimensions.add(az);
    dimensions.add(hostname);

    Record cpuUtilization = Record.builder()
        .dimensions(dimensions)
        .measureValueType(MeasureValueType.DOUBLE)
        .measureName("cpu_utilization")
        .measureValue("13.5")
        .time(String.valueOf(time)).build();

    Record memoryUtilization = Record.builder()
        .dimensions(dimensions)
        .measureValueType(MeasureValueType.DOUBLE)
        .measureName("memory_utilization")
        .measureValue("40")
        .time(String.valueOf(time)).build();

    records.add(cpuUtilization);
    records.add(memoryUtilization);

    WriteRecordsRequest writeRecordsRequest = WriteRecordsRequest.builder()
        .databaseName(DATABASE_NAME).tableName(TABLE_NAME).records(records).build();

    try {
      WriteRecordsResponse writeRecordsResponse = timestreamWriteClient.writeRecords(writeRecordsRequest);
      System.out.println("WriteRecords Status: " + writeRecordsResponse.sdkHttpResponse().statusCode());
    } catch (RejectedRecordsException e) {
      System.out.println("RejectedRecords: " + e);
      for (RejectedRecord rejectedRecord : e.rejectedRecords()) {
        System.out.println("Rejected Index " + rejectedRecord.recordIndex() + ": "
            + rejectedRecord.reason());
      }
      System.out.println("Other records were written successfully. ");
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }
  }
```

------
#### [  Go  ]

```
now := time.Now()
currentTimeInSeconds := now.Unix()
writeRecordsInput := &timestreamwrite.WriteRecordsInput{
  DatabaseName: aws.String(*databaseName),
  TableName:  aws.String(*tableName),
  Records: []*timestreamwrite.Record{
    &timestreamwrite.Record{
      Dimensions: []*timestreamwrite.Dimension{
        &timestreamwrite.Dimension{
          Name:  aws.String("region"),
          Value: aws.String("us-east-1"),
        },
        &timestreamwrite.Dimension{
          Name:  aws.String("az"),
          Value: aws.String("az1"),
        },
        &timestreamwrite.Dimension{
          Name:  aws.String("hostname"),
          Value: aws.String("host1"),
        },
      },
      MeasureName:    aws.String("cpu_utilization"),
      MeasureValue:   aws.String("13.5"),
      MeasureValueType: aws.String("DOUBLE"),
      Time:       aws.String(strconv.FormatInt(currentTimeInSeconds, 10)),
      TimeUnit:  aws.String("SECONDS"),
    },
    &timestreamwrite.Record{
      Dimensions: []*timestreamwrite.Dimension{
        &timestreamwrite.Dimension{
          Name:  aws.String("region"),
          Value: aws.String("us-east-1"),
        },
        &timestreamwrite.Dimension{
          Name:  aws.String("az"),
          Value: aws.String("az1"),
        },
        &timestreamwrite.Dimension{
          Name:  aws.String("hostname"),
          Value: aws.String("host1"),
        },
      },
      MeasureName:    aws.String("memory_utilization"),
      MeasureValue:   aws.String("40"),
      MeasureValueType: aws.String("DOUBLE"),
      Time:       aws.String(strconv.FormatInt(currentTimeInSeconds, 10)),
      TimeUnit:  aws.String("SECONDS"),
    },
  },
}

_, err = writeSvc.WriteRecords(writeRecordsInput)

if err != nil {
  fmt.Println("Error:")
  fmt.Println(err)
} else {
  fmt.Println("Write records is successful")
}
```

------
#### [  Python  ]

```
  def write_records(self):
    print("Writing records")
    current_time = self._current_milli_time()

    dimensions = [
      {'Name': 'region', 'Value': 'us-east-1'},
      {'Name': 'az', 'Value': 'az1'},
      {'Name': 'hostname', 'Value': 'host1'}
    ]

    cpu_utilization = {
      'Dimensions': dimensions,
      'MeasureName': 'cpu_utilization',
      'MeasureValue': '13.5',
      'MeasureValueType': 'DOUBLE',
      'Time': current_time
    }

    memory_utilization = {
      'Dimensions': dimensions,
      'MeasureName': 'memory_utilization',
      'MeasureValue': '40',
      'MeasureValueType': 'DOUBLE',
      'Time': current_time
    }

    records = [cpu_utilization, memory_utilization]

    try:
      result = self.client.write_records(DatabaseName=Constant.DATABASE_NAME, TableName=Constant.TABLE_NAME,
                         Records=records, CommonAttributes={})
      print("WriteRecords Status: [%s]" % result['ResponseMetadata']['HTTPStatusCode'])
    except self.client.exceptions.RejectedRecordsException as err:
      self._print_rejected_records_exceptions(err)
    except Exception as err:
      print("Error:", err)

  @staticmethod
  def _print_rejected_records_exceptions(err):
    print("RejectedRecords: ", err)
    for rr in err.response["RejectedRecords"]:
      print("Rejected Index " + str(rr["RecordIndex"]) + ": " + rr["Reason"])
      if "ExistingVersion" in rr:
        print("Rejected record existing version: ", rr["ExistingVersion"])

  @staticmethod
  def _current_milli_time():
    return str(int(round(time.time() * 1000)))
```

------
#### [  Node.js  ]

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
async function writeRecords() {
  console.log("Writing records");
  const currentTime = Date.now().toString(); // Unix time in milliseconds

  const dimensions = [
    {'Name': 'region', 'Value': 'us-east-1'},
    {'Name': 'az', 'Value': 'az1'},
    {'Name': 'hostname', 'Value': 'host1'}
  ];

  const cpuUtilization = {
    'Dimensions': dimensions,
    'MeasureName': 'cpu_utilization',
    'MeasureValue': '13.5',
    'MeasureValueType': 'DOUBLE',
    'Time': currentTime.toString()
  };

  const memoryUtilization = {
    'Dimensions': dimensions,
    'MeasureName': 'memory_utilization',
    'MeasureValue': '40',
    'MeasureValueType': 'DOUBLE',
    'Time': currentTime.toString()
  };

  const records = [cpuUtilization, memoryUtilization];

  const params = {
    DatabaseName: constants.DATABASE_NAME,
    TableName: constants.TABLE_NAME,
    Records: records
  };

  const request = writeClient.writeRecords(params);

  await request.promise().then(
    (data) => {
      console.log("Write records successful");
    },
    (err) => {
      console.log("Error writing records:", err);
      if (err.code === 'RejectedRecordsException') {
        const responsePayload = JSON.parse(request.response.httpResponse.body.toString());
        console.log("RejectedRecords: ", responsePayload.RejectedRecords);
        console.log("Other records were written successfully. ");
      }
    }
  );
}
```

------
#### [  .NET  ]

```
   public async Task WriteRecords()
   {
     Console.WriteLine("Writing records");

     DateTimeOffset now = DateTimeOffset.UtcNow;
     string currentTimeString = (now.ToUnixTimeMilliseconds()).ToString();

     List<Dimension> dimensions = new List<Dimension>{
       new Dimension { Name = "region", Value = "us-east-1" },
       new Dimension { Name = "az", Value = "az1" },
       new Dimension { Name = "hostname", Value = "host1" }
     };

     var cpuUtilization = new Record
     {
       Dimensions = dimensions,
       MeasureName = "cpu_utilization",
       MeasureValue = "13.6",
       MeasureValueType = MeasureValueType.DOUBLE,
       Time = currentTimeString
     };

     var memoryUtilization = new Record
     {
       Dimensions = dimensions,
       MeasureName = "memory_utilization",
       MeasureValue = "40",
       MeasureValueType = MeasureValueType.DOUBLE,
       Time = currentTimeString
     };


     List<Record> records = new List<Record> {
       cpuUtilization,
       memoryUtilization
     };

     try
     {
       var writeRecordsRequest = new WriteRecordsRequest
       {
         DatabaseName = Constants.DATABASE_NAME,
         TableName = Constants.TABLE_NAME,
         Records = records
       };
       WriteRecordsResponse response = await writeClient.WriteRecordsAsync(writeRecordsRequest);
       Console.WriteLine($"Write records status code: {response.HttpStatusCode.ToString()}");
     }
     catch (RejectedRecordsException e) {
       Console.WriteLine("RejectedRecordsException:" + e.ToString());
       foreach (RejectedRecord rr in e.RejectedRecords) {
         Console.WriteLine("RecordIndex " + rr.RecordIndex + " : " + rr.Reason);
       }
       Console.WriteLine("Other records were written successfully. ");
     }
     catch (Exception e)
     {
       Console.WriteLine("Write records failure:" + e.ToString());
     }
   }
```

------

## Scrittura di batch di record con attributi comuni
<a name="code-samples.write.write-batches-common-attrs"></a>

Se i dati delle serie temporali hanno misure e/o dimensioni comuni a molti punti dati, puoi anche utilizzare la seguente versione ottimizzata dell'API WriteRecords per inserire dati in Timestream for. LiveAnalytics L'utilizzo di attributi comuni con il batching può ottimizzare ulteriormente il costo delle scritture, come descritto in. [Calcolo del numero di scritture](metering-and-pricing.writes.md#metering-and-pricing.writes.write-size-multiple-events) 

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, vedere. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
  public void writeRecordsWithCommonAttributes() {
    System.out.println("Writing records with extracting common attributes");
    // Specify repeated values for all records
    List<Record> records = new ArrayList<>();
    final long time = System.currentTimeMillis();

    List<Dimension> dimensions = new ArrayList<>();
    final Dimension region = new Dimension().withName("region").withValue("us-east-1");
    final Dimension az = new Dimension().withName("az").withValue("az1");
    final Dimension hostname = new Dimension().withName("hostname").withValue("host1");

    dimensions.add(region);
    dimensions.add(az);
    dimensions.add(hostname);

    Record commonAttributes = new Record()
        .withDimensions(dimensions)
        .withMeasureValueType(MeasureValueType.DOUBLE)
        .withTime(String.valueOf(time));

    Record cpuUtilization = new Record()
        .withMeasureName("cpu_utilization")
        .withMeasureValue("13.5");
    Record memoryUtilization = new Record()
        .withMeasureName("memory_utilization")
        .withMeasureValue("40");

    records.add(cpuUtilization);
    records.add(memoryUtilization);

    WriteRecordsRequest writeRecordsRequest = new WriteRecordsRequest()
        .withDatabaseName(DATABASE_NAME)
        .withTableName(TABLE_NAME)
        .withCommonAttributes(commonAttributes);
    writeRecordsRequest.setRecords(records);

    try {
      WriteRecordsResult writeRecordsResult = amazonTimestreamWrite.writeRecords(writeRecordsRequest);
      System.out.println("writeRecordsWithCommonAttributes Status: " + writeRecordsResult.getSdkHttpMetadata().getHttpStatusCode());
    } catch (RejectedRecordsException e) {
      System.out.println("RejectedRecords: " + e);
      for (RejectedRecord rejectedRecord : e.getRejectedRecords()) {
        System.out.println("Rejected Index " + rejectedRecord.getRecordIndex() + ": "
            + rejectedRecord.getReason());
      }
      System.out.println("Other records were written successfully. ");
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }
  }
```

------
#### [  Java v2  ]

```
  public void writeRecordsWithCommonAttributes() {
    System.out.println("Writing records with extracting common attributes");
    // Specify repeated values for all records
    List<Record> records = new ArrayList<>();
    final long time = System.currentTimeMillis();

    List<Dimension> dimensions = new ArrayList<>();
    final Dimension region = Dimension.builder().name("region").value("us-east-1").build();
    final Dimension az = Dimension.builder().name("az").value("az1").build();
    final Dimension hostname = Dimension.builder().name("hostname").value("host1").build();

    dimensions.add(region);
    dimensions.add(az);
    dimensions.add(hostname);

    Record commonAttributes = Record.builder()
        .dimensions(dimensions)
        .measureValueType(MeasureValueType.DOUBLE)
        .time(String.valueOf(time)).build();

    Record cpuUtilization = Record.builder()
        .measureName("cpu_utilization")
        .measureValue("13.5").build();
    Record memoryUtilization = Record.builder()
        .measureName("memory_utilization")
        .measureValue("40").build();

    records.add(cpuUtilization);
    records.add(memoryUtilization);

    WriteRecordsRequest writeRecordsRequest = WriteRecordsRequest.builder()
        .databaseName(DATABASE_NAME)
        .tableName(TABLE_NAME)
        .commonAttributes(commonAttributes)
        .records(records).build();

    try {
      WriteRecordsResponse writeRecordsResponse = timestreamWriteClient.writeRecords(writeRecordsRequest);
      System.out.println("writeRecordsWithCommonAttributes Status: " + writeRecordsResponse.sdkHttpResponse().statusCode());
    } catch (RejectedRecordsException e) {
      System.out.println("RejectedRecords: " + e);
      for (RejectedRecord rejectedRecord : e.rejectedRecords()) {
        System.out.println("Rejected Index " + rejectedRecord.recordIndex() + ": "
            + rejectedRecord.reason());
      }
      System.out.println("Other records were written successfully. ");
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }
  }
```

------
#### [  Go  ]

```
now = time.Now()
currentTimeInSeconds = now.Unix()
writeRecordsCommonAttributesInput := &timestreamwrite.WriteRecordsInput{
	DatabaseName: aws.String(*databaseName),
	TableName:  aws.String(*tableName),
	CommonAttributes: &timestreamwrite.Record{
		Dimensions: []*timestreamwrite.Dimension{
			&timestreamwrite.Dimension{
				Name:  aws.String("region"),
				Value: aws.String("us-east-1"),
			},
			&timestreamwrite.Dimension{
				Name:  aws.String("az"),
				Value: aws.String("az1"),
			},
			&timestreamwrite.Dimension{
				Name:  aws.String("hostname"),
				Value: aws.String("host1"),
			},
		},
		MeasureValueType: aws.String("DOUBLE"),
		Time:       aws.String(strconv.FormatInt(currentTimeInSeconds, 10)),
		TimeUnit:     aws.String("SECONDS"),
	},
	Records: []*timestreamwrite.Record{
		&timestreamwrite.Record{
			MeasureName:  aws.String("cpu_utilization"),
			MeasureValue: aws.String("13.5"),
		},
		&timestreamwrite.Record{
			MeasureName:  aws.String("memory_utilization"),
			MeasureValue: aws.String("40"),
		},
	},
}

_, err = writeSvc.WriteRecords(writeRecordsCommonAttributesInput)

if err != nil {
	fmt.Println("Error:")
	fmt.Println(err)
} else {
	fmt.Println("Ingest records is successful")
}
```

------
#### [  Python  ]

```
  def write_records_with_common_attributes(self):
    print("Writing records extracting common attributes")
    current_time = self._current_milli_time()

    dimensions = [
      {'Name': 'region', 'Value': 'us-east-1'},
      {'Name': 'az', 'Value': 'az1'},
      {'Name': 'hostname', 'Value': 'host1'}
    ]

    common_attributes = {
      'Dimensions': dimensions,
      'MeasureValueType': 'DOUBLE',
      'Time': current_time
    }

    cpu_utilization = {
      'MeasureName': 'cpu_utilization',
      'MeasureValue': '13.5'
    }

    memory_utilization = {
      'MeasureName': 'memory_utilization',
      'MeasureValue': '40'
    }

    records = [cpu_utilization, memory_utilization]

    try:
      result = self.client.write_records(DatabaseName=Constant.DATABASE_NAME, TableName=Constant.TABLE_NAME,
                         Records=records, CommonAttributes=common_attributes)
      print("WriteRecords Status: [%s]" % result['ResponseMetadata']['HTTPStatusCode'])
    except self.client.exceptions.RejectedRecordsException as err:
      self._print_rejected_records_exceptions(err)
    except Exception as err:
      print("Error:", err)

  @staticmethod
  def _print_rejected_records_exceptions(err):
    print("RejectedRecords: ", err)
    for rr in err.response["RejectedRecords"]:
      print("Rejected Index " + str(rr["RecordIndex"]) + ": " + rr["Reason"])
      if "ExistingVersion" in rr:
        print("Rejected record existing version: ", rr["ExistingVersion"])

  @staticmethod
  def _current_milli_time():
    return str(int(round(time.time() * 1000)))
```

------
#### [  Node.js  ]

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
async function writeRecordsWithCommonAttributes() {
  console.log("Writing records with common attributes");
  const currentTime = Date.now().toString(); // Unix time in milliseconds

  const dimensions = [
    {'Name': 'region', 'Value': 'us-east-1'},
    {'Name': 'az', 'Value': 'az1'},
    {'Name': 'hostname', 'Value': 'host1'}
  ];

  const commonAttributes = {
    'Dimensions': dimensions,
    'MeasureValueType': 'DOUBLE',
    'Time': currentTime.toString()
  };

  const cpuUtilization = {
    'MeasureName': 'cpu_utilization',
    'MeasureValue': '13.5'
  };

  const memoryUtilization = {
    'MeasureName': 'memory_utilization',
    'MeasureValue': '40'
  };

  const records = [cpuUtilization, memoryUtilization];

  const params = {
    DatabaseName: constants.DATABASE_NAME,
    TableName: constants.TABLE_NAME,
    Records: records,
    CommonAttributes: commonAttributes
  };

  const request = writeClient.writeRecords(params);

  await request.promise().then(
    (data) => {
      console.log("Write records successful");
    },
    (err) => {
      console.log("Error writing records:", err);
      if (err.code === 'RejectedRecordsException') {
        const responsePayload = JSON.parse(request.response.httpResponse.body.toString());
        console.log("RejectedRecords: ", responsePayload.RejectedRecords);
        console.log("Other records were written successfully. ");
      }
    }
  );
}
```

------
#### [  .NET  ]

```
  public async Task WriteRecordsWithCommonAttributes()
  {
    Console.WriteLine("Writing records with common attributes");

    DateTimeOffset now = DateTimeOffset.UtcNow;
    string currentTimeString = (now.ToUnixTimeMilliseconds()).ToString();

    List<Dimension> dimensions = new List<Dimension>{
      new Dimension { Name = "region", Value = "us-east-1" },
      new Dimension { Name = "az", Value = "az1" },
      new Dimension { Name = "hostname", Value = "host1" }
    };

    var commonAttributes = new Record
    {
      Dimensions = dimensions,
      MeasureValueType = MeasureValueType.DOUBLE,
      Time = currentTimeString
    };

    var cpuUtilization = new Record
    {
      MeasureName = "cpu_utilization",
      MeasureValue = "13.6"
    };

    var memoryUtilization = new Record
    {
      MeasureName = "memory_utilization",
      MeasureValue = "40"
    };


    List<Record> records = new List<Record>();
    records.Add(cpuUtilization);
    records.Add(memoryUtilization);

    try
    {
      var writeRecordsRequest = new WriteRecordsRequest
      {
        DatabaseName = Constants.DATABASE_NAME,
        TableName = Constants.TABLE_NAME,
        Records = records,
        CommonAttributes = commonAttributes
      };
      WriteRecordsResponse response = await writeClient.WriteRecordsAsync(writeRecordsRequest);
      Console.WriteLine($"Write records status code: {response.HttpStatusCode.ToString()}");
    }
    catch (RejectedRecordsException e) {
      Console.WriteLine("RejectedRecordsException:" + e.ToString());
      foreach (RejectedRecord rr in e.RejectedRecords) {
        Console.WriteLine("RecordIndex " + rr.RecordIndex + " : " + rr.Reason);
      }
      Console.WriteLine("Other records were written successfully. ");
    }
    catch (Exception e)
    {
      Console.WriteLine("Write records failure:" + e.ToString());
    }
  }
```

------

## Sconvolgimento dei record
<a name="code-samples.write.upserts"></a>

Mentre le scritture predefinite in Amazon Timestream seguono *la semantica del primo scrittore* vince, in cui i dati vengono archiviati solo come aggiunta e i record duplicati vengono rifiutati, alcune applicazioni richiedono la possibilità di scrivere dati in Amazon Timestream utilizzando la semantica *last writer wins, in cui il record con la* versione più alta viene archiviato nel sistema. Esistono anche applicazioni che richiedono la possibilità di aggiornare i record esistenti. *Per affrontare questi scenari, Amazon Timestream offre la possibilità di modificare i dati.* Upsert è un'operazione che inserisce un record nel sistema quando il record non esiste o aggiorna il record, quando ne esiste uno. 

È possibile alterare i record includendo la definizione `Version` nel record durante l'invio di una richiesta. `WriteRecords` Amazon Timestream memorizzerà il record con il record con il valore più alto. `Version` L'esempio di codice seguente mostra come modificare i dati:

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, vedere. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
  public void writeRecordsWithUpsert() {
    System.out.println("Writing records with upsert");
    // Specify repeated values for all records
    List<Record> records = new ArrayList<>();
    final long time = System.currentTimeMillis();
    // To achieve upsert (last writer wins) semantic, one example is to use current time as the version if you are writing directly from the data source
    long version = System.currentTimeMillis();

    List<Dimension> dimensions = new ArrayList<>();
    final Dimension region = new Dimension().withName("region").withValue("us-east-1");
    final Dimension az = new Dimension().withName("az").withValue("az1");
    final Dimension hostname = new Dimension().withName("hostname").withValue("host1");

    dimensions.add(region);
    dimensions.add(az);
    dimensions.add(hostname);

    Record commonAttributes = new Record()
        .withDimensions(dimensions)
        .withMeasureValueType(MeasureValueType.DOUBLE)
        .withTime(String.valueOf(time))
        .withVersion(version);

    Record cpuUtilization = new Record()
        .withMeasureName("cpu_utilization")
        .withMeasureValue("13.5");
    Record memoryUtilization = new Record()
        .withMeasureName("memory_utilization")
        .withMeasureValue("40");

    records.add(cpuUtilization);
    records.add(memoryUtilization);

    WriteRecordsRequest writeRecordsRequest = new WriteRecordsRequest()
        .withDatabaseName(DATABASE_NAME)
        .withTableName(TABLE_NAME)
        .withCommonAttributes(commonAttributes);
    writeRecordsRequest.setRecords(records);

    // write records for first time
    try {
      WriteRecordsResult writeRecordsResult = amazonTimestreamWrite.writeRecords(writeRecordsRequest);
      System.out.println("WriteRecords Status for first time: " + writeRecordsResult.getSdkHttpMetadata().getHttpStatusCode());
    } catch (RejectedRecordsException e) {
      printRejectedRecordsException(e);
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }

    // Successfully retry same writeRecordsRequest with same records and versions, because writeRecords API is idempotent.
    try {
      WriteRecordsResult writeRecordsResult = amazonTimestreamWrite.writeRecords(writeRecordsRequest);
      System.out.println("WriteRecords Status for retry: " + writeRecordsResult.getSdkHttpMetadata().getHttpStatusCode());
    } catch (RejectedRecordsException e) {
      printRejectedRecordsException(e);
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }

    // upsert with lower version, this would fail because a higher version is required to update the measure value.
    version -= 1;
    commonAttributes.setVersion(version);

    cpuUtilization.setMeasureValue("14.5");
    memoryUtilization.setMeasureValue("50");

    List<Record> upsertedRecords = new ArrayList<>();
    upsertedRecords.add(cpuUtilization);
    upsertedRecords.add(memoryUtilization);

    WriteRecordsRequest writeRecordsUpsertRequest = new WriteRecordsRequest()
        .withDatabaseName(DATABASE_NAME)
        .withTableName(TABLE_NAME)
        .withCommonAttributes(commonAttributes);
    writeRecordsUpsertRequest.setRecords(upsertedRecords);

    try {
      WriteRecordsResult writeRecordsUpsertResult = amazonTimestreamWrite.writeRecords(writeRecordsUpsertRequest);
      System.out.println("WriteRecords Status for upsert with lower version: " + writeRecordsUpsertResult.getSdkHttpMetadata().getHttpStatusCode());
    } catch (RejectedRecordsException e) {
      System.out.println("WriteRecords Status for upsert with lower version: ");
      printRejectedRecordsException(e);
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }

    // upsert with higher version as new data in generated
    version = System.currentTimeMillis();
    commonAttributes.setVersion(version);

    writeRecordsUpsertRequest = new WriteRecordsRequest()
        .withDatabaseName(DATABASE_NAME)
        .withTableName(TABLE_NAME)
        .withCommonAttributes(commonAttributes);
    writeRecordsUpsertRequest.setRecords(upsertedRecords);

    try {
      WriteRecordsResult writeRecordsUpsertResult = amazonTimestreamWrite.writeRecords(writeRecordsUpsertRequest);
      System.out.println("WriteRecords Status for upsert with higher version: " + writeRecordsUpsertResult.getSdkHttpMetadata().getHttpStatusCode());
    } catch (RejectedRecordsException e) {
      printRejectedRecordsException(e);
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }
  }
```

------
#### [  Java v2  ]

```
  public void writeRecordsWithUpsert() {
    System.out.println("Writing records with upsert");
    // Specify repeated values for all records
    List<Record> records = new ArrayList<>();
    final long time = System.currentTimeMillis();
    // To achieve upsert (last writer wins) semantic, one example is to use current time as the version if you are writing directly from the data source
    long version = System.currentTimeMillis();

    List<Dimension> dimensions = new ArrayList<>();
    final Dimension region = Dimension.builder().name("region").value("us-east-1").build();
    final Dimension az = Dimension.builder().name("az").value("az1").build();
    final Dimension hostname = Dimension.builder().name("hostname").value("host1").build();

    dimensions.add(region);
    dimensions.add(az);
    dimensions.add(hostname);

    Record commonAttributes = Record.builder()
        .dimensions(dimensions)
        .measureValueType(MeasureValueType.DOUBLE)
        .time(String.valueOf(time))
        .version(version)
        .build();

    Record cpuUtilization = Record.builder()
        .measureName("cpu_utilization")
        .measureValue("13.5").build();
    Record memoryUtilization = Record.builder()
        .measureName("memory_utilization")
        .measureValue("40").build();

    records.add(cpuUtilization);
    records.add(memoryUtilization);

    WriteRecordsRequest writeRecordsRequest = WriteRecordsRequest.builder()
        .databaseName(DATABASE_NAME)
        .tableName(TABLE_NAME)
        .commonAttributes(commonAttributes)
        .records(records).build();

    // write records for first time
    try {
      WriteRecordsResponse writeRecordsResponse = timestreamWriteClient.writeRecords(writeRecordsRequest);
      System.out.println("WriteRecords Status for first time: " + writeRecordsResponse.sdkHttpResponse().statusCode());
    } catch (RejectedRecordsException e) {
      printRejectedRecordsException(e);
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }

    // Successfully retry same writeRecordsRequest with same records and versions, because writeRecords API is idempotent.
    try {
      WriteRecordsResponse writeRecordsResponse = timestreamWriteClient.writeRecords(writeRecordsRequest);
      System.out.println("WriteRecords Status for retry: " + writeRecordsResponse.sdkHttpResponse().statusCode());
    } catch (RejectedRecordsException e) {
      printRejectedRecordsException(e);
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }

    // upsert with lower version, this would fail because a higher version is required to update the measure value.
    version -= 1;
    commonAttributes = Record.builder()
        .dimensions(dimensions)
        .measureValueType(MeasureValueType.DOUBLE)
        .time(String.valueOf(time))
        .version(version)
        .build();

    cpuUtilization = Record.builder()
        .measureName("cpu_utilization")
        .measureValue("14.5").build();
    memoryUtilization = Record.builder()
        .measureName("memory_utilization")
        .measureValue("50").build();

    List<Record> upsertedRecords = new ArrayList<>();
    upsertedRecords.add(cpuUtilization);
    upsertedRecords.add(memoryUtilization);

    WriteRecordsRequest writeRecordsUpsertRequest = WriteRecordsRequest.builder()
        .databaseName(DATABASE_NAME)
        .tableName(TABLE_NAME)
        .commonAttributes(commonAttributes)
        .records(upsertedRecords).build();

    try {
      WriteRecordsResponse writeRecordsResponse = timestreamWriteClient.writeRecords(writeRecordsUpsertRequest);
      System.out.println("WriteRecords Status for upsert with lower version: " + writeRecordsResponse.sdkHttpResponse().statusCode());
    } catch (RejectedRecordsException e) {
      System.out.println("WriteRecords Status for upsert with lower version: ");
      printRejectedRecordsException(e);
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }

    // upsert with higher version as new data in generated
    version = System.currentTimeMillis();
    commonAttributes = Record.builder()
        .dimensions(dimensions)
        .measureValueType(MeasureValueType.DOUBLE)
        .time(String.valueOf(time))
        .version(version)
        .build();

    writeRecordsUpsertRequest = WriteRecordsRequest.builder()
        .databaseName(DATABASE_NAME)
        .tableName(TABLE_NAME)
        .commonAttributes(commonAttributes)
        .records(upsertedRecords).build();

    try {
      WriteRecordsResponse writeRecordsUpsertResponse = timestreamWriteClient.writeRecords(writeRecordsUpsertRequest);
      System.out.println("WriteRecords Status for upsert with higher version: " + writeRecordsUpsertResponse.sdkHttpResponse().statusCode());
    } catch (RejectedRecordsException e) {
      printRejectedRecordsException(e);
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }
  }
```

------
#### [  Go  ]

```
// Below code will ingest and upsert cpu_utilization and memory_utilization metric for a host on
// region=us-east-1, az=az1, and hostname=host1
fmt.Println("Ingesting records and set version as currentTimeInMills, hit enter to continue")
reader.ReadString('\n')

// Get current time in seconds.
now = time.Now()
currentTimeInSeconds = now.Unix()
// To achieve upsert (last writer wins) semantic, one example is to use current time as the version if you are writing directly from the data source
version := time.Now().Round(time.Millisecond).UnixNano() / 1e6   // set version as currentTimeInMills

writeRecordsCommonAttributesUpsertInput := &timestreamwrite.WriteRecordsInput{
	DatabaseName: aws.String(*databaseName),
	TableName:  aws.String(*tableName),
	CommonAttributes: &timestreamwrite.Record{
		Dimensions: []*timestreamwrite.Dimension{
			&timestreamwrite.Dimension{
				Name:  aws.String("region"),
				Value: aws.String("us-east-1"),
			},
			&timestreamwrite.Dimension{
				Name:  aws.String("az"),
				Value: aws.String("az1"),
			},
			&timestreamwrite.Dimension{
				Name:  aws.String("hostname"),
				Value: aws.String("host1"),
			},
		},
		MeasureValueType: aws.String("DOUBLE"),
		Time:       aws.String(strconv.FormatInt(currentTimeInSeconds, 10)),
		TimeUnit:  aws.String("SECONDS"),
		Version:      &version,
	},
	Records: []*timestreamwrite.Record{
		&timestreamwrite.Record{
			MeasureName:  aws.String("cpu_utilization"),
			MeasureValue: aws.String("13.5"),
		},
		&timestreamwrite.Record{
			MeasureName:  aws.String("memory_utilization"),
			MeasureValue: aws.String("40"),
		},
	},
}

// write records for first time
_, err = writeSvc.WriteRecords(writeRecordsCommonAttributesUpsertInput)

if err != nil {
	fmt.Println("Error:")
	fmt.Println(err)
} else {
	fmt.Println("Frist-time write records is successful")
}

fmt.Println("Retry same writeRecordsRequest with same records and versions. Because writeRecords API is idempotent, this will success. hit enter to continue")
reader.ReadString('\n')

_, err = writeSvc.WriteRecords(writeRecordsCommonAttributesUpsertInput)

if err != nil {
	fmt.Println("Error:")
	fmt.Println(err)
} else {
	fmt.Println("Retry write records for same request is successful")
}

fmt.Println("Upsert with lower version, this would fail because a higher version is required to update the measure value. hit enter to continue")
reader.ReadString('\n')
version -= 1
writeRecordsCommonAttributesUpsertInput.CommonAttributes.Version = &version

updated_cpu_utilization := &timestreamwrite.Record{
	MeasureName:    aws.String("cpu_utilization"),
	MeasureValue:   aws.String("14.5"),
}
updated_memory_utilization := &timestreamwrite.Record{
	MeasureName:    aws.String("memory_utilization"),
	MeasureValue:   aws.String("50"),
}


writeRecordsCommonAttributesUpsertInput.Records = []*timestreamwrite.Record{
	updated_cpu_utilization,
	updated_memory_utilization,
}

_, err = writeSvc.WriteRecords(writeRecordsCommonAttributesUpsertInput)

if err != nil {
	fmt.Println("Error:")
	fmt.Println(err)
} else {
	fmt.Println("Write records with lower version is successful")
}

fmt.Println("Upsert with higher version as new data in generated, this would success. hit enter to continue")
reader.ReadString('\n')

version = time.Now().Round(time.Millisecond).UnixNano() / 1e6  // set version as currentTimeInMills
writeRecordsCommonAttributesUpsertInput.CommonAttributes.Version = &version

_, err = writeSvc.WriteRecords(writeRecordsCommonAttributesUpsertInput)

if err != nil {
	fmt.Println("Error:")
	fmt.Println(err)
} else {
	fmt.Println("Write records with higher version is successful")
}
```

------
#### [  Python  ]

```
  def write_records_with_upsert(self):
    print("Writing records with upsert")
    current_time = self._current_milli_time()
    # To achieve upsert (last writer wins) semantic, one example is to use current time as the version if you are writing directly from the data source
    version = int(self._current_milli_time())

    dimensions = [
          {'Name': 'region', 'Value': 'us-east-1'},
          {'Name': 'az', 'Value': 'az1'},
          {'Name': 'hostname', 'Value': 'host1'}
        ]

    common_attributes = {
      'Dimensions': dimensions,
      'MeasureValueType': 'DOUBLE',
      'Time': current_time,
      'Version': version
    }

    cpu_utilization = {
      'MeasureName': 'cpu_utilization',
      'MeasureValue': '13.5'
    }

    memory_utilization = {
      'MeasureName': 'memory_utilization',
      'MeasureValue': '40'
    }

    records = [cpu_utilization, memory_utilization]

    # write records for first time
    try:
      result = self.client.write_records(DatabaseName=Constant.DATABASE_NAME, TableName=Constant.TABLE_NAME,
                         Records=records, CommonAttributes=common_attributes)
      print("WriteRecords Status for first time: [%s]" % result['ResponseMetadata']['HTTPStatusCode'])
    except self.client.exceptions.RejectedRecordsException as err:
      self._print_rejected_records_exceptions(err)
    except Exception as err:
      print("Error:", err)

    # Successfully retry same writeRecordsRequest with same records and versions, because writeRecords API is idempotent.
    try:
      result = self.client.write_records(DatabaseName=Constant.DATABASE_NAME, TableName=Constant.TABLE_NAME,
                         Records=records, CommonAttributes=common_attributes)
      print("WriteRecords Status for retry: [%s]" % result['ResponseMetadata']['HTTPStatusCode'])
    except self.client.exceptions.RejectedRecordsException as err:
      self._print_rejected_records_exceptions(err)
    except Exception as err:
      print("Error:", err)

    # upsert with lower version, this would fail because a higher version is required to update the measure value.
    version -= 1
    common_attributes["Version"] = version

    cpu_utilization["MeasureValue"] = '14.5'
    memory_utilization["MeasureValue"] = '50'

    upsertedRecords = [cpu_utilization, memory_utilization]

    try:
      upsertedResult = self.client.write_records(DatabaseName=Constant.DATABASE_NAME, TableName=Constant.TABLE_NAME,
                            Records=upsertedRecords, CommonAttributes=common_attributes)
      print("WriteRecords Status for upsert with lower version: [%s]" % upsertedResult['ResponseMetadata']['HTTPStatusCode'])
    except self.client.exceptions.RejectedRecordsException as err:
      self._print_rejected_records_exceptions(err)
    except Exception as err:
      print("Error:", err)


    # upsert with higher version as new data is generated
    version = int(self._current_milli_time())
    common_attributes["Version"] = version

    try:
      upsertedResult = self.client.write_records(DatabaseName=Constant.DATABASE_NAME, TableName=Constant.TABLE_NAME,
                            Records=upsertedRecords, CommonAttributes=common_attributes)
      print("WriteRecords Upsert Status: [%s]" % upsertedResult['ResponseMetadata']['HTTPStatusCode'])
    except self.client.exceptions.RejectedRecordsException as err:
      self._print_rejected_records_exceptions(err)
    except Exception as err:
      print("Error:", err)

  @staticmethod
  def _current_milli_time():
    return str(int(round(time.time() * 1000)))
```

------
#### [  Node.js  ]

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
async function writeRecordsWithUpsert() {
  console.log("Writing records with upsert");
  const currentTime = Date.now().toString(); // Unix time in milliseconds
  // To achieve upsert (last writer wins) semantic, one example is to use current time as the version if you are writing directly from the data source
  let version = Date.now();

  const dimensions = [
    {'Name': 'region', 'Value': 'us-east-1'},
    {'Name': 'az', 'Value': 'az1'},
    {'Name': 'hostname', 'Value': 'host1'}
  ];

  const commonAttributes = {
    'Dimensions': dimensions,
    'MeasureValueType': 'DOUBLE',
    'Time': currentTime.toString(),
    'Version': version
  };

  const cpuUtilization = {
    'MeasureName': 'cpu_utilization',
    'MeasureValue': '13.5'
  };

  const memoryUtilization = {
    'MeasureName': 'memory_utilization',
    'MeasureValue': '40'
  };

  const records = [cpuUtilization, memoryUtilization];

  const params = {
    DatabaseName: constants.DATABASE_NAME,
    TableName: constants.TABLE_NAME,
    Records: records,
    CommonAttributes: commonAttributes
  };

  const request = writeClient.writeRecords(params);

  // write records for first time
  await request.promise().then(
    (data) => {
      console.log("Write records successful for first time.");
    },
    (err) => {
      console.log("Error writing records:", err);
      if (err.code === 'RejectedRecordsException') {
        printRejectedRecordsException(request);
      }
    }
  );

  // Successfully retry same writeRecordsRequest with same records and versions, because writeRecords API is idempotent.
  await request.promise().then(
    (data) => {
      console.log("Write records successful for retry.");
    },
    (err) => {
      console.log("Error writing records:", err);
      if (err.code === 'RejectedRecordsException') {
        printRejectedRecordsException(request);
      }
    }
  );

  // upsert with lower version, this would fail because a higher version is required to update the measure value.
  version--;

  const commonAttributesWithLowerVersion = {
    'Dimensions': dimensions,
    'MeasureValueType': 'DOUBLE',
    'Time': currentTime.toString(),
    'Version': version
  };

  const updatedCpuUtilization = {
    'MeasureName': 'cpu_utilization',
    'MeasureValue': '14.5'
  };

  const updatedMemoryUtilization = {
    'MeasureName': 'memory_utilization',
    'MeasureValue': '50'
  };

  const upsertedRecords = [updatedCpuUtilization, updatedMemoryUtilization];

  const upsertedParamsWithLowerVersion = {
    DatabaseName: constants.DATABASE_NAME,
    TableName: constants.TABLE_NAME,
    Records: upsertedRecords,
    CommonAttributes: commonAttributesWithLowerVersion
  };

  const upsertRequestWithLowerVersion = writeClient.writeRecords(upsertedParamsWithLowerVersion);

  await upsertRequestWithLowerVersion.promise().then(
    (data) => {
      console.log("Write records for upsert with lower version successful");
    },
    (err) => {
      console.log("Error writing records:", err);
      if (err.code === 'RejectedRecordsException') {
        printRejectedRecordsException(upsertRequestWithLowerVersion);
      }
    }
  );

  // upsert with higher version as new data in generated
  version = Date.now();

  const commonAttributesWithHigherVersion = {
    'Dimensions': dimensions,
    'MeasureValueType': 'DOUBLE',
    'Time': currentTime.toString(),
    'Version': version
  };

  const upsertedParamsWithHigherVerion = {
    DatabaseName: constants.DATABASE_NAME,
    TableName: constants.TABLE_NAME,
    Records: upsertedRecords,
    CommonAttributes: commonAttributesWithHigherVersion
  };

  const upsertRequestWithHigherVersion = writeClient.writeRecords(upsertedParamsWithHigherVerion);

  await upsertRequestWithHigherVersion.promise().then(
    (data) => {
      console.log("Write records upsert successful with higher version");
    },
    (err) => {
      console.log("Error writing records:", err);
      if (err.code === 'RejectedRecordsException') {
        printRejectedRecordsException(upsertedParamsWithHigherVerion);
      }
    }
  );

}
```

------
#### [  .NET  ]

```
  public async Task WriteRecordsWithUpsert()
  {
    Console.WriteLine("Writing records with upsert");

    DateTimeOffset now = DateTimeOffset.UtcNow;
    string currentTimeString = (now.ToUnixTimeMilliseconds()).ToString();
    // To achieve upsert (last writer wins) semantic, one example is to use current time as the version if you are writing directly from the data source
    long version = now.ToUnixTimeMilliseconds();

    List<Dimension> dimensions = new List<Dimension>{
      new Dimension { Name = "region", Value = "us-east-1" },
      new Dimension { Name = "az", Value = "az1" },
      new Dimension { Name = "hostname", Value = "host1" }
    };

    var commonAttributes = new Record
    {
      Dimensions = dimensions,
      MeasureValueType = MeasureValueType.DOUBLE,
      Time = currentTimeString,
      Version = version
    };

    var cpuUtilization = new Record
    {
      MeasureName = "cpu_utilization",
      MeasureValue = "13.6"
    };

    var memoryUtilization = new Record
    {
      MeasureName = "memory_utilization",
      MeasureValue = "40"
    };


    List<Record> records = new List<Record>();
    records.Add(cpuUtilization);
    records.Add(memoryUtilization);

    // write records for first time
    try
    {
      var writeRecordsRequest = new WriteRecordsRequest
      {
        DatabaseName = Constants.DATABASE_NAME,
        TableName = Constants.TABLE_NAME,
        Records = records,
        CommonAttributes = commonAttributes
      };
      WriteRecordsResponse response = await writeClient.WriteRecordsAsync(writeRecordsRequest);
      Console.WriteLine($"WriteRecords Status for first time: {response.HttpStatusCode.ToString()}");
    }
    catch (RejectedRecordsException e) {
      PrintRejectedRecordsException(e);
    }
    catch (Exception e)
    {
      Console.WriteLine("Write records failure:" + e.ToString());
    }

    // Successfully retry same writeRecordsRequest with same records and versions, because writeRecords API is idempotent.
    try
    {
      var writeRecordsRequest = new WriteRecordsRequest
      {
        DatabaseName = Constants.DATABASE_NAME,
        TableName = Constants.TABLE_NAME,
        Records = records,
        CommonAttributes = commonAttributes
      };
      WriteRecordsResponse response = await writeClient.WriteRecordsAsync(writeRecordsRequest);
      Console.WriteLine($"WriteRecords Status for retry: {response.HttpStatusCode.ToString()}");
    }
    catch (RejectedRecordsException e) {
      PrintRejectedRecordsException(e);
    }
    catch (Exception e)
    {
      Console.WriteLine("Write records failure:" + e.ToString());
    }

    // upsert with lower version, this would fail because a higher version is required to update the measure value.
    version--;
    Type recordType = typeof(Record);
    recordType.GetProperty("Version").SetValue(commonAttributes, version);
    recordType.GetProperty("MeasureValue").SetValue(cpuUtilization, "14.6");
    recordType.GetProperty("MeasureValue").SetValue(memoryUtilization, "50");

    List<Record> upsertedRecords = new List<Record> {
      cpuUtilization,
      memoryUtilization
    };

    try
    {
      var writeRecordsUpsertRequest = new WriteRecordsRequest
      {
        DatabaseName = Constants.DATABASE_NAME,
        TableName = Constants.TABLE_NAME,
        Records = upsertedRecords,
        CommonAttributes = commonAttributes
      };
      WriteRecordsResponse upsertResponse = await writeClient.WriteRecordsAsync(writeRecordsUpsertRequest);
      Console.WriteLine($"WriteRecords Status for upsert with lower version: {upsertResponse.HttpStatusCode.ToString()}");
    }
    catch (RejectedRecordsException e) {
      PrintRejectedRecordsException(e);
    }
    catch (Exception e)
    {
      Console.WriteLine("Write records failure:" + e.ToString());
    }

    // upsert with higher version as new data in generated
    now = DateTimeOffset.UtcNow;
    version = now.ToUnixTimeMilliseconds();
    recordType.GetProperty("Version").SetValue(commonAttributes, version);

    try
    {
      var writeRecordsUpsertRequest = new WriteRecordsRequest
      {
        DatabaseName = Constants.DATABASE_NAME,
        TableName = Constants.TABLE_NAME,
        Records = upsertedRecords,
        CommonAttributes = commonAttributes
      };
      WriteRecordsResponse upsertResponse = await writeClient.WriteRecordsAsync(writeRecordsUpsertRequest);
      Console.WriteLine($"WriteRecords Status for upsert with higher version:  {upsertResponse.HttpStatusCode.ToString()}");
    }
    catch (RejectedRecordsException e) {
      PrintRejectedRecordsException(e);
    }
    catch (Exception e)
    {
      Console.WriteLine("Write records failure:" + e.ToString());
    }
  }
```

------

## Esempio di attributo multimisura
<a name="code-samples.write.data.multivalue"></a>

Questo esempio illustra la scrittura di attributi multimisura. [Gli attributi multimisura](data-modeling.md#data-modeling-multiVsinglerecords) sono utili quando un dispositivo o un'applicazione monitorata emette più metriche o eventi contemporaneamente.

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, vedere. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
package com.amazonaws.services.timestream;

import static com.amazonaws.services.timestream.Main.DATABASE_NAME;
import static com.amazonaws.services.timestream.Main.REGION;
import static com.amazonaws.services.timestream.Main.TABLE_NAME;

import java.util.ArrayList;
import java.util.List;

import com.amazonaws.services.timestreamwrite.AmazonTimestreamWrite;
import com.amazonaws.services.timestreamwrite.model.Dimension;
import com.amazonaws.services.timestreamwrite.model.MeasureValue;
import com.amazonaws.services.timestreamwrite.model.MeasureValueType;
import com.amazonaws.services.timestreamwrite.model.Record;
import com.amazonaws.services.timestreamwrite.model.RejectedRecordsException;
import com.amazonaws.services.timestreamwrite.model.WriteRecordsRequest;
import com.amazonaws.services.timestreamwrite.model.WriteRecordsResult;


public class multimeasureAttributeExample {
  AmazonTimestreamWrite timestreamWriteClient;

  public multimeasureAttributeExample(AmazonTimestreamWrite client) {
    this.timestreamWriteClient = client;
  }

  public void writeRecordsMultiMeasureValueSingleRecord() {
    System.out.println("Writing records with multi value attributes");

    List<Record> records = new ArrayList<>();
    final long time = System.currentTimeMillis();
    long version = System.currentTimeMillis();

    List<Dimension> dimensions = new ArrayList<>();
    final Dimension region = new Dimension().withName("region").withValue(REGION);
    final Dimension az = new Dimension().withName("az").withValue("az1");
    final Dimension hostname = new Dimension().withName("hostname").withValue("host1");

    dimensions.add(region);
    dimensions.add(az);
    dimensions.add(hostname);

    Record commonAttributes = new Record()
        .withDimensions(dimensions)
        .withTime(String.valueOf(time))
        .withVersion(version);

    MeasureValue cpuUtilization = new MeasureValue()
        .withName("cpu_utilization")
        .withType(MeasureValueType.DOUBLE)
        .withValue("13.5");
    MeasureValue memoryUtilization = new MeasureValue()
        .withName("memory_utilization")
        .withType(MeasureValueType.DOUBLE)
        .withValue("40");
    Record computationalResources = new Record()
        .withMeasureName("cpu_memory")
        .withMeasureValues(cpuUtilization, memoryUtilization)
        .withMeasureValueType(MeasureValueType.MULTI);

    records.add(computationalResources);

    WriteRecordsRequest writeRecordsRequest = new WriteRecordsRequest()
        .withDatabaseName(DATABASE_NAME)
        .withTableName(TABLE_NAME)
        .withCommonAttributes(commonAttributes)
        .withRecords(records);

    // write records for first time
    try {
      WriteRecordsResult writeRecordResult = timestreamWriteClient.writeRecords(writeRecordsRequest);
      System.out.println(
          "WriteRecords Status for multi value attributes: " + writeRecordResult
              .getSdkHttpMetadata().getHttpStatusCode());
    } catch (RejectedRecordsException e) {
      printRejectedRecordsException(e);
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }
  }

  public void writeRecordsMultiMeasureValueMultipleRecords() {
    System.out.println(
        "Writing records with multi value attributes mixture type");

    List<Record> records = new ArrayList<>();
    final long time = System.currentTimeMillis();
    long version = System.currentTimeMillis();

    List<Dimension> dimensions = new ArrayList<>();
    final Dimension region = new Dimension().withName("region").withValue(REGION);
    final Dimension az = new Dimension().withName("az").withValue("az1");
    final Dimension hostname = new Dimension().withName("hostname").withValue("host1");

    dimensions.add(region);
    dimensions.add(az);
    dimensions.add(hostname);

    Record commonAttributes = new Record()
        .withDimensions(dimensions)
        .withTime(String.valueOf(time))
        .withVersion(version);

    MeasureValue cpuUtilization = new MeasureValue()
        .withName("cpu_utilization")
        .withType(MeasureValueType.DOUBLE)
        .withValue("13");
    MeasureValue memoryUtilization =new MeasureValue()
        .withName("memory_utilization")
        .withType(MeasureValueType.DOUBLE)
        .withValue("40");
    MeasureValue activeCores = new MeasureValue()
        .withName("active_cores")
        .withType(MeasureValueType.BIGINT)
        .withValue("4");


    Record computationalResources = new Record()
        .withMeasureName("computational_utilization")
        .withMeasureValues(cpuUtilization, memoryUtilization, activeCores)
        .withMeasureValueType(MeasureValueType.MULTI);

    records.add(computationalResources);

    WriteRecordsRequest writeRecordsRequest = new WriteRecordsRequest()
        .withDatabaseName(DATABASE_NAME)
        .withTableName(TABLE_NAME)
        .withCommonAttributes(commonAttributes)
        .withRecords(records);

    // write records for first time
    try {
      WriteRecordsResult writeRecordResult = timestreamWriteClient.writeRecords(writeRecordsRequest);
      System.out.println(
          "WriteRecords Status for multi value attributes: " + writeRecordResult
              .getSdkHttpMetadata().getHttpStatusCode());
    } catch (RejectedRecordsException e) {
      printRejectedRecordsException(e);
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }
  }

  private void printRejectedRecordsException(RejectedRecordsException e) {
    System.out.println("RejectedRecords: " + e);
    e.getRejectedRecords().forEach(System.out::println);
  }
}
```

------
#### [  Java v2  ]

```
package com.amazonaws.services.timestream;

import java.util.ArrayList;
import java.util.List;

import software.amazon.awssdk.services.timestreamwrite.TimestreamWriteClient;
import software.amazon.awssdk.services.timestreamwrite.model.Dimension;
import software.amazon.awssdk.services.timestreamwrite.model.MeasureValue;
import software.amazon.awssdk.services.timestreamwrite.model.MeasureValueType;
import software.amazon.awssdk.services.timestreamwrite.model.Record;
import software.amazon.awssdk.services.timestreamwrite.model.RejectedRecordsException;
import software.amazon.awssdk.services.timestreamwrite.model.WriteRecordsRequest;
import software.amazon.awssdk.services.timestreamwrite.model.WriteRecordsResponse;

import static com.amazonaws.services.timestream.Main.DATABASE_NAME;
import static com.amazonaws.services.timestream.Main.TABLE_NAME;


public class multimeasureAttributeExample {

  TimestreamWriteClient timestreamWriteClient;

  public multimeasureAttributeExample(TimestreamWriteClient client) {
    this.timestreamWriteClient = client;
  }

  public void writeRecordsMultiMeasureValueSingleRecord() {
    System.out.println("Writing records with multi value attributes");

    List<Record> records = new ArrayList<>();
    final long time = System.currentTimeMillis();
    long version = System.currentTimeMillis();

    List<Dimension> dimensions = new ArrayList<>();
    final Dimension region =
        Dimension.builder().name("region").value("us-east-1").build();
    final Dimension az = Dimension.builder().name("az").value("az1").build();
    final Dimension hostname =
        Dimension.builder().name("hostname").value("host1").build();

    dimensions.add(region);
    dimensions.add(az);
    dimensions.add(hostname);

    Record commonAttributes = Record.builder()
        .dimensions(dimensions)
        .time(String.valueOf(time))
        .version(version)
        .build();

    MeasureValue cpuUtilization = MeasureValue.builder()
        .name("cpu_utilization")
        .type(MeasureValueType.DOUBLE)
        .value("13.5").build();
    MeasureValue memoryUtilization = MeasureValue.builder()
        .name("memory_utilization")
        .type(MeasureValueType.DOUBLE)
        .value("40").build();
    Record computationalResources = Record
        .builder()
        .measureName("cpu_memory")
        .measureValues(cpuUtilization, memoryUtilization)
        .measureValueType(MeasureValueType.MULTI)
        .build();

    records.add(computationalResources);

    WriteRecordsRequest writeRecordsRequest = WriteRecordsRequest.builder()
        .databaseName(DATABASE_NAME)
        .tableName(TABLE_NAME)
        .commonAttributes(commonAttributes)
        .records(records).build();

    // write records for first time
    try {
      WriteRecordsResponse writeRecordsResponse = timestreamWriteClient.writeRecords(writeRecordsRequest);
      System.out.println(
          "WriteRecords Status for multi value attributes: " + writeRecordsResponse
              .sdkHttpResponse()
              .statusCode());
    } catch (RejectedRecordsException e) {
      printRejectedRecordsException(e);
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }
  }

  public void writeRecordsMultiMeasureValueMultipleRecords() {
    System.out.println(
        "Writing records with multi value attributes mixture type");

    List<Record> records = new ArrayList<>();
    final long time = System.currentTimeMillis();
    long version = System.currentTimeMillis();

    List<Dimension> dimensions = new ArrayList<>();
    final Dimension region =
        Dimension.builder().name("region").value("us-east-1").build();
    final Dimension az = Dimension.builder().name("az").value("az1").build();
    final Dimension hostname =
        Dimension.builder().name("hostname").value("host1").build();

    dimensions.add(region);
    dimensions.add(az);
    dimensions.add(hostname);

    Record commonAttributes = Record.builder()
        .dimensions(dimensions)
        .time(String.valueOf(time))
        .version(version)
        .build();

    MeasureValue cpuUtilization = MeasureValue.builder()
        .name("cpu_utilization")
        .type(MeasureValueType.DOUBLE)
        .value("13.5").build();
    MeasureValue memoryUtilization = MeasureValue.builder()
        .name("memory_utilization")
        .type(MeasureValueType.DOUBLE)
        .value("40").build();
    MeasureValue activeCores = MeasureValue.builder()
        .name("active_cores")
        .type(MeasureValueType.BIGINT)
        .value("4").build();


    Record computationalResources = Record
        .builder()
        .measureName("computational_utilization")
        .measureValues(cpuUtilization, memoryUtilization, activeCores)
        .measureValueType(MeasureValueType.MULTI)
        .build();

    records.add(computationalResources);

    WriteRecordsRequest writeRecordsRequest = WriteRecordsRequest.builder()
        .databaseName(DATABASE_NAME)
        .tableName(TABLE_NAME)
        .commonAttributes(commonAttributes)
        .records(records).build();

    // write records for first time
    try {
      WriteRecordsResponse writeRecordsResponse = timestreamWriteClient.writeRecords(writeRecordsRequest);
      System.out.println(
          "WriteRecords Status for multi value attributes: " + writeRecordsResponse
              .sdkHttpResponse()
              .statusCode());
    } catch (RejectedRecordsException e) {
      printRejectedRecordsException(e);
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }
  }

  private void printRejectedRecordsException(RejectedRecordsException e) {
    System.out.println("RejectedRecords: " + e);
    e.rejectedRecords().forEach(System.out::println);
  }
}
```

------
#### [  Go  ]

```
  now := time.Now()
  currentTimeInSeconds := now.Unix()
  writeRecordsInput := &timestreamwrite.WriteRecordsInput{
    DatabaseName: aws.String(*databaseName),
    TableName:  aws.String(*tableName),
    Records: []*timestreamwrite.Record{
    &timestreamwrite.Record{
      Dimensions: []*timestreamwrite.Dimension{
      &timestreamwrite.Dimension{
        Name:  aws.String("region"),
        Value: aws.String("us-east-1"),
      },
      &timestreamwrite.Dimension{
        Name:  aws.String("az"),
        Value: aws.String("az1"),
      },
      &timestreamwrite.Dimension{
        Name:  aws.String("hostname"),
        Value: aws.String("host1"),
      },
      },
      MeasureName:  aws.String("metrics"),
      MeasureValueType: aws.String("MULTI"),
      Time:     aws.String(strconv.FormatInt(currentTimeInSeconds, 10)),
      TimeUnit:  aws.String("SECONDS"),
      MeasureValues: []*timestreamwrite.MeasureValue{
      &timestreamwrite.MeasureValue{
        Name:  aws.String("cpu_utilization"),
        Value: aws.String("13.5"),
        Type:  aws.String("DOUBLE"),
      }, 
      &timestreamwrite.MeasureValue{
        Name:  aws.String("memory_utilization"),
        Value: aws.String("40"),
        Type:  aws.String("DOUBLE"),
      },
      },
    },
    },
  }
   
  _, err = writeSvc.WriteRecords(writeRecordsInput)
   
  if err != nil {
    fmt.Println("Error:")
    fmt.Println(err)
  } else {
    fmt.Println("Write records is successful")
  }
```

------
#### [  Python  ]

```
import time
import boto3
import psutil
import os

from botocore.config import Config

DATABASE_NAME = os.environ['DATABASE_NAME']
TABLE_NAME = os.environ['TABLE_NAME']

COUNTRY = "UK"
CITY = "London"
HOSTNAME = "MyHostname" # You can make it dynamic using socket.gethostname()

INTERVAL = 1 # Seconds

def prepare_common_attributes():
  common_attributes = {
    'Dimensions': [
      {'Name': 'country', 'Value': COUNTRY},
      {'Name': 'city', 'Value': CITY},
      {'Name': 'hostname', 'Value': HOSTNAME}
    ],
    'MeasureName': 'utilization',
    'MeasureValueType': 'MULTI'
  }
  return common_attributes


def prepare_record(current_time):
  record = {
    'Time': str(current_time),
    'MeasureValues': []
  }
  return record


def prepare_measure(measure_name, measure_value):
  measure = {
    'Name': measure_name,
    'Value': str(measure_value),
    'Type': 'DOUBLE'
  }
  return measure


def write_records(records, common_attributes):
  try:
    result = write_client.write_records(DatabaseName=DATABASE_NAME,
                                        TableName=TABLE_NAME,
                                        CommonAttributes=common_attributes,
                                        Records=records)
    status = result['ResponseMetadata']['HTTPStatusCode']
    print("Processed %d records. WriteRecords HTTPStatusCode: %s" %
        (len(records), status))
  except Exception as err:
    print("Error:", err)


if __name__ == '__main__':

  print("writing data to database {} table {}".format(
    DATABASE_NAME, TABLE_NAME))

  session = boto3.Session()
  write_client = session.client('timestream-write', config=Config(
    read_timeout=20, max_pool_connections=5000, retries={'max_attempts': 10}))
  query_client = session.client('timestream-query') # Not used

  common_attributes = prepare_common_attributes()

  records = []

  while True:

    current_time = int(time.time() * 1000)
    cpu_utilization = psutil.cpu_percent()
    memory_utilization = psutil.virtual_memory().percent
    swap_utilization = psutil.swap_memory().percent
    disk_utilization = psutil.disk_usage('/').percent

    record = prepare_record(current_time)
    record['MeasureValues'].append(prepare_measure('cpu', cpu_utilization))
    record['MeasureValues'].append(prepare_measure('memory', memory_utilization))
    record['MeasureValues'].append(prepare_measure('swap', swap_utilization))
    record['MeasureValues'].append(prepare_measure('disk', disk_utilization))

    records.append(record)

    print("records {} - cpu {} - memory {} - swap {} - disk {}".format(
      len(records), cpu_utilization, memory_utilization,
      swap_utilization, disk_utilization))

    if len(records) == 100:
      write_records(records, common_attributes)
      records = []

    time.sleep(INTERVAL)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
  async function writeRecords() {
    console.log("Writing records");
    const currentTime = Date.now().toString(); // Unix time in milliseconds

    const dimensions = [
    {'Name': 'region', 'Value': 'us-east-1'},
    {'Name': 'az', 'Value': 'az1'},
    {'Name': 'hostname', 'Value': 'host1'}
    ];

    const record = {
    'Dimensions': dimensions,
    'MeasureName': 'metrics',
    'MeasureValues': [
      {
        'Name': 'cpu_utilization',
        'Value': '40',
        'Type': 'DOUBLE',
      },
      {
        'Name': 'memory_utilization',
        'Value': '13.5',
        'Type': 'DOUBLE',
      },
      ],
      'MeasureValueType': 'MULTI',
      'Time': currentTime.toString()
    }

    const records = [record];

    const params = {
    DatabaseName: 'DatabaseName',
    TableName: 'TableName',
    Records: records
    };

    const response = await writeClient.writeRecords(params);

    console.log(response);
  }
```

------
#### [  .NET  ]

```
using System;
using System.IO;
using System.Collections.Generic;
using Amazon.TimestreamWrite;
using Amazon.TimestreamWrite.Model;
using System.Threading.Tasks;

namespace TimestreamDotNetSample
{
  static class MultiMeasureValueConstants
  {
    public const string MultiMeasureValueSampleDb = "multiMeasureValueSampleDb";
    public const string MultiMeasureValueSampleTable = "multiMeasureValueSampleTable";
  }

  public class MultiValueAttributesExample
  {
    private readonly AmazonTimestreamWriteClient writeClient;

    public MultiValueAttributesExample(AmazonTimestreamWriteClient writeClient)
    {
      this.writeClient = writeClient;
    }

    public async Task WriteRecordsMultiMeasureValueSingleRecord()
    {
      Console.WriteLine("Writing records with multi value attributes");

      DateTimeOffset now = DateTimeOffset.UtcNow;
      string currentTimeString = (now.ToUnixTimeMilliseconds()).ToString();

      List<Dimension> dimensions = new List<Dimension>{
        new Dimension { Name = "region", Value = "us-east-1" },
        new Dimension { Name = "az", Value = "az1" },
        new Dimension { Name = "hostname", Value = "host1" }
      };

      var commonAttributes = new Record
      {
        Dimensions = dimensions,
        Time = currentTimeString
      };

      var cpuUtilization = new MeasureValue
      {
        Name = "cpu_utilization",
        Value = "13.6",
        Type = "DOUBLE"
      };

      var memoryUtilization = new MeasureValue
      {
        Name = "memory_utilization",
        Value = "40",
        Type = "DOUBLE"
      };

      var computationalRecord = new Record
      {
        MeasureName = "cpu_memory",
        MeasureValues = new List<MeasureValue> {cpuUtilization, memoryUtilization},
        MeasureValueType = "MULTI"
      };


      List<Record> records = new List<Record>();
      records.Add(computationalRecord);

      try
      {
        var writeRecordsRequest = new WriteRecordsRequest
        {
          DatabaseName = MultiMeasureValueConstants.MultiMeasureValueSampleDb,
          TableName = MultiMeasureValueConstants.MultiMeasureValueSampleTable,
          Records = records,
          CommonAttributes = commonAttributes
        };
        WriteRecordsResponse response = await writeClient.WriteRecordsAsync(writeRecordsRequest);
        Console.WriteLine($"Write records status code: {response.HttpStatusCode.ToString()}");
      }
      catch (Exception e)
      {
        Console.WriteLine("Write records failure:" + e.ToString());
      }
    }

    public async Task WriteRecordsMultiMeasureValueMultipleRecords()
    {
      Console.WriteLine("Writing records with multi value attributes mixture type");

      DateTimeOffset now = DateTimeOffset.UtcNow;
      string currentTimeString = (now.ToUnixTimeMilliseconds()).ToString();

      List<Dimension> dimensions = new List<Dimension>{
        new Dimension { Name = "region", Value = "us-east-1" },
        new Dimension { Name = "az", Value = "az1" },
        new Dimension { Name = "hostname", Value = "host1" }
      };

      var commonAttributes = new Record
      {
        Dimensions = dimensions,
        Time = currentTimeString
      };

      var cpuUtilization = new MeasureValue
      {
        Name = "cpu_utilization",
        Value = "13.6",
        Type = "DOUBLE"
      };

      var memoryUtilization = new MeasureValue
      {
        Name = "memory_utilization",
        Value = "40",
        Type = "DOUBLE"
      };

      var activeCores = new MeasureValue
      {
        Name = "active_cores",
        Value = "4",
        Type = "BIGINT"
      };

      var computationalRecord = new Record
      {
        MeasureName = "computational_utilization",
        MeasureValues = new List<MeasureValue> {cpuUtilization, memoryUtilization, activeCores},
        MeasureValueType = "MULTI"
      };

      var aliveRecord = new Record
      {
        MeasureName = "is_healthy",
        MeasureValue = "true",
        MeasureValueType = "BOOLEAN"
      };

      List<Record> records = new List<Record>();
      records.Add(computationalRecord);
      records.Add(aliveRecord);

      try
      {
        var writeRecordsRequest = new WriteRecordsRequest
        {
          DatabaseName = MultiMeasureValueConstants.MultiMeasureValueSampleDb,
          TableName = MultiMeasureValueConstants.MultiMeasureValueSampleTable,
          Records = records,
          CommonAttributes = commonAttributes
        };
        WriteRecordsResponse response = await writeClient.WriteRecordsAsync(writeRecordsRequest);
        Console.WriteLine($"Write records status code: {response.HttpStatusCode.ToString()}");
      }
      catch (Exception e)
      {
        Console.WriteLine("Write records failure:" + e.ToString());
      }
    }
  }
}
```

------

## Gestione degli errori di scrittura
<a name="code-samples.write.rejectedRecordException"></a>

Le scritture in Amazon Timestream possono avere esito negativo per uno o più dei seguenti motivi:
+ Esistono record con timestamp che non rientrano nella durata di conservazione dell'archivio di memoria.
+ Esistono record contenenti dimensioni e/o misure che superano i limiti definiti da Timestream.
+ Amazon Timestream ha rilevato record duplicati. I record vengono contrassegnati come duplicati quando sono presenti più record con le stesse dimensioni, timestamp e nomi di misure ma:
  + I valori di misura sono diversi.
  + La versione non è presente nella richiesta oppure il valore della versione nel nuovo record è uguale o inferiore al valore esistente. Se Amazon Timestream rifiuta i dati per questo motivo, `ExistingVersion` il campo in conterrà la versione corrente `RejectedRecords` del record archiviata in Amazon Timestream. Per forzare un aggiornamento, puoi inviare nuovamente la richiesta con una versione del record impostata su un valore maggiore di. `ExistingVersion`

Per ulteriori informazioni sugli errori e sui record rifiutati, vedere [Errori](https://docs.aws.amazon.com/timestream/latest/developerguide/API_WriteRecords.html#API_WriteRecords_Errors) e [RejectedRecord](https://docs.aws.amazon.com/timestream/latest/developerguide/API_RejectedRecord.html).

Se la tua applicazione riceve un messaggio `RejectedRecordsException` quando tenta di scrivere record su Timestream, puoi analizzare i record rifiutati per saperne di più sugli errori di scrittura, come mostrato di seguito.

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, vedere. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
  try {
    WriteRecordsResult writeRecordsResult = amazonTimestreamWrite.writeRecords(writeRecordsRequest);
    System.out.println("WriteRecords Status: " + writeRecordsResult.getSdkHttpMetadata().getHttpStatusCode());
  } catch (RejectedRecordsException e) {
    System.out.println("RejectedRecords: " + e);
    for (RejectedRecord rejectedRecord : e.getRejectedRecords()) {
      System.out.println("Rejected Index " + rejectedRecord.getRecordIndex() + ": "
          + rejectedRecord.getReason());
    }
    System.out.println("Other records were written successfully. ");
  } catch (Exception e) {
    System.out.println("Error: " + e);
  }
```

------
#### [  Java v2  ]

```
    try {
      WriteRecordsResponse writeRecordsResponse = timestreamWriteClient.writeRecords(writeRecordsRequest);
      System.out.println("writeRecordsWithCommonAttributes Status: " + writeRecordsResponse.sdkHttpResponse().statusCode());
    } catch (RejectedRecordsException e) {
      System.out.println("RejectedRecords: " + e);
      for (RejectedRecord rejectedRecord : e.rejectedRecords()) {
        System.out.println("Rejected Index " + rejectedRecord.recordIndex() + ": "
            + rejectedRecord.reason());
      }
      System.out.println("Other records were written successfully. ");
    } catch (Exception e) {
      System.out.println("Error: " + e);
    }
```

------
#### [  Go  ]

```
_, err = writeSvc.WriteRecords(writeRecordsInput)

if err != nil {
  fmt.Println("Error:")
  fmt.Println(err)
} else {
  fmt.Println("Write records is successful")
}
```

------
#### [  Python  ]

```
try:
  result = self.client.write_records(DatabaseName=Constant.DATABASE_NAME, TableName=Constant.TABLE_NAME, Records=records, CommonAttributes=common_attributes)
  print("WriteRecords Status: [%s]" % result['ResponseMetadata']['HTTPStatusCode'])
except self.client.exceptions.RejectedRecordsException as err:
  print("RejectedRecords: ", err)
  for rr in err.response["RejectedRecords"]:
    print("Rejected Index " + str(rr["RecordIndex"]) + ": " + rr["Reason"])
  print("Other records were written successfully. ")
except Exception as err:
  print("Error:", err)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
await request.promise().then(
    (data) => {
      console.log("Write records successful");
    },
    (err) => {
      console.log("Error writing records:", err);
      if (err.code === 'RejectedRecordsException') {
        const responsePayload = JSON.parse(request.response.httpResponse.body.toString());
        console.log("RejectedRecords: ", responsePayload.RejectedRecords);
        console.log("Other records were written successfully. ");
      }
    }
  );
```

------
#### [  .NET  ]

```
  try
  {
    var writeRecordsRequest = new WriteRecordsRequest
    {
      DatabaseName = Constants.DATABASE_NAME,
      TableName = Constants.TABLE_NAME,
      Records = records,
      CommonAttributes = commonAttributes
    };
    WriteRecordsResponse response = await writeClient.WriteRecordsAsync(writeRecordsRequest);
    Console.WriteLine($"Write records status code: {response.HttpStatusCode.ToString()}");
  }
  catch (RejectedRecordsException e) {
    Console.WriteLine("RejectedRecordsException:" + e.ToString());
    foreach (RejectedRecord rr in e.RejectedRecords) {
      Console.WriteLine("RecordIndex " + rr.RecordIndex + " : " + rr.Reason);
    }
    Console.WriteLine("Other records were written successfully. ");
  }
  catch (Exception e)
  {
    Console.WriteLine("Write records failure:" + e.ToString());
  }
```

------

# Esegui interrogazione
<a name="code-samples.run-query"></a>

**Topics**
+ [Impaginazione dei risultati](#code-samples.run-query.pagination)
+ [Analisi dei set di risultati](#code-samples.run-query.parsing)
+ [Accesso allo stato della query](#code-samples.run-query.query-status)

## Impaginazione dei risultati
<a name="code-samples.run-query.pagination"></a>

Quando si esegue una query, Timestream restituisce il set di risultati in modo impaginato per ottimizzare la reattività delle applicazioni. Il frammento di codice seguente mostra come è possibile impaginare il set di risultati. È necessario scorrere tutte le pagine del set di risultati finché non viene visualizzato un valore nullo. I token di paginazione scadono 3 ore dopo essere stati emessi da Timestream per. LiveAnalytics 

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, consulta. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
    private void runQuery(String queryString) {
        try {
            QueryRequest queryRequest = new QueryRequest();
            queryRequest.setQueryString(queryString);
            QueryResult queryResult = queryClient.query(queryRequest);
            while (true) {
                parseQueryResult(queryResult);
                if (queryResult.getNextToken() == null) {
                    break;
                }
                queryRequest.setNextToken(queryResult.getNextToken());
                queryResult = queryClient.query(queryRequest);
            }
        } catch (Exception e) {
            // Some queries might fail with 500 if the result of a sequence function has more than 10000 entries
            e.printStackTrace();
        }
    }
```

------
#### [  Java v2  ]

```
    private void runQuery(String queryString) {
        try {
            QueryRequest queryRequest = QueryRequest.builder().queryString(queryString).build();
            final QueryIterable queryResponseIterator = timestreamQueryClient.queryPaginator(queryRequest);
            for(QueryResponse queryResponse : queryResponseIterator) {
                parseQueryResult(queryResponse);
            }
        } catch (Exception e) {
            // Some queries might fail with 500 if the result of a sequence function has more than 10000 entries
            e.printStackTrace();
        }
    }
```

------
#### [  Go  ]

```
func runQuery(queryPtr *string, querySvc *timestreamquery.TimestreamQuery, f *os.File) {
    queryInput := &timestreamquery.QueryInput{
        QueryString: aws.String(*queryPtr),
    }
    fmt.Println("QueryInput:")
    fmt.Println(queryInput)
    // execute the query
    err := querySvc.QueryPages(queryInput,
        func(page *timestreamquery.QueryOutput, lastPage bool) bool {
            // process query response
            queryStatus := page.QueryStatus
            fmt.Println("Current query status:", queryStatus)
            // query response metadata
            // includes column names and types
            metadata := page.ColumnInfo
            // fmt.Println("Metadata:")
            fmt.Println(metadata)
            header := ""
            for i := 0; i < len(metadata); i++ {
                header += *metadata[i].Name
                if i != len(metadata)-1 {
                    header += ", "
                }
            }
            write(f, header)

            // query response data
            fmt.Println("Data:")
            // process rows
            rows := page.Rows
            for i := 0; i < len(rows); i++ {
                data := rows[i].Data
                value := processRowType(data, metadata)
                fmt.Println(value)
                write(f, value)
            }
            fmt.Println("Number of rows:", len(page.Rows))
            return true
        })
    if err != nil {
        fmt.Println("Error:")
        fmt.Println(err)
    }
}
```

------
#### [  Python  ]

```
    def run_query(self, query_string):
        try:
            page_iterator = self.paginator.paginate(QueryString=query_string)
            for page in page_iterator:
                self._parse_query_result(page)
        except Exception as err:
            print("Exception while running query:", err)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
async function getAllRows(query, nextToken) {
    const params = {
        QueryString: query
    };

    if (nextToken) {
        params.NextToken = nextToken;
    }

    await queryClient.query(params).promise()
        .then(
            (response) => {
                parseQueryResult(response);
                if (response.NextToken) {
                    getAllRows(query, response.NextToken);
                }
            },
            (err) => {
                console.error("Error while querying:", err);
            });
}
```

------
#### [  .NET  ]

```
        private async Task RunQueryAsync(string queryString)
        {
            try
            {
                QueryRequest queryRequest = new QueryRequest();
                queryRequest.QueryString = queryString;
                QueryResponse queryResponse = await queryClient.QueryAsync(queryRequest);
                while (true)
                {
                    ParseQueryResult(queryResponse);
                    if (queryResponse.NextToken == null)
                    {
                        break;
                    }
                    queryRequest.NextToken = queryResponse.NextToken;
                    queryResponse = await queryClient.QueryAsync(queryRequest);
                }
            } catch(Exception e)
            {
                // Some queries might fail with 500 if the result of a sequence function has more than 10000 entries
                Console.WriteLine(e.ToString());
            }
        }
```

------

## Analisi dei set di risultati
<a name="code-samples.run-query.parsing"></a>

È possibile utilizzare i seguenti frammenti di codice per estrarre dati dal set di risultati. I risultati delle query sono accessibili per un massimo di 24 ore dopo il completamento di una query.

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, consulta. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
    private static final DateTimeFormatter TIMESTAMP_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSSSS");
    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss.SSSSSSSSS");
    
    private static final long ONE_GB_IN_BYTES = 1073741824L;
    
    private void parseQueryResult(QueryResult response) {
        final QueryStatus currentStatusOfQuery = queryResult.getQueryStatus();
    
        System.out.println("Query progress so far: " + currentStatusOfQuery.getProgressPercentage() + "%");
        
        double bytesScannedSoFar = ((double) currentStatusOfQuery.getCumulativeBytesScanned() / ONE_GB_IN_BYTES);
        System.out.println("Bytes scanned so far: " + bytesScannedSoFar + " GB");
        
        double bytesMeteredSoFar = ((double) currentStatusOfQuery.getCumulativeBytesMetered() / ONE_GB_IN_BYTES);
        System.out.println("Bytes metered so far: " + bytesMeteredSoFar + " GB");
        
        List<ColumnInfo> columnInfo = response.getColumnInfo();
        List<Row> rows = response.getRows();
 
        System.out.println("Metadata: " + columnInfo);
        System.out.println("Data: ");
 
        // iterate every row
        for (Row row : rows) {
            System.out.println(parseRow(columnInfo, row));
        }
    }
 
    private String parseRow(List<ColumnInfo> columnInfo, Row row) {
        List<Datum> data = row.getData();
        List<String> rowOutput = new ArrayList<>();
        // iterate every column per row
        for (int j = 0; j < data.size(); j++) {
            ColumnInfo info = columnInfo.get(j);
            Datum datum = data.get(j);
            rowOutput.add(parseDatum(info, datum));
        }
        return String.format("{%s}", rowOutput.stream().map(Object::toString).collect(Collectors.joining(",")));
    }
 
    private String parseDatum(ColumnInfo info, Datum datum) {
        if (datum.isNullValue() != null && datum.isNullValue()) {
            return info.getName() + "=" + "NULL";
        }
        Type columnType = info.getType();
        // If the column is of TimeSeries Type
        if (columnType.getTimeSeriesMeasureValueColumnInfo() != null) {
            return parseTimeSeries(info, datum);
        }
        // If the column is of Array Type
        else if (columnType.getArrayColumnInfo() != null) {
            List<Datum> arrayValues = datum.getArrayValue();
            return info.getName() + "=" + parseArray(info.getType().getArrayColumnInfo(), arrayValues);
        }
        // If the column is of Row Type
        else if (columnType.getRowColumnInfo() != null) {
            List<ColumnInfo> rowColumnInfo = info.getType().getRowColumnInfo();
            Row rowValues = datum.getRowValue();
            return parseRow(rowColumnInfo, rowValues);
        }
        // If the column is of Scalar Type
        else {
            return parseScalarType(info, datum);
        }
    }
 
    private String parseTimeSeries(ColumnInfo info, Datum datum) {
        List<String> timeSeriesOutput = new ArrayList<>();
        for (TimeSeriesDataPoint dataPoint : datum.getTimeSeriesValue()) {
            timeSeriesOutput.add("{time=" + dataPoint.getTime() + ", value=" +
                    parseDatum(info.getType().getTimeSeriesMeasureValueColumnInfo(), dataPoint.getValue()) + "}");
        }
        return String.format("[%s]", timeSeriesOutput.stream().map(Object::toString).collect(Collectors.joining(",")));
    }
 
    private String parseScalarType(ColumnInfo info, Datum datum) {
        switch (ScalarType.fromValue(info.getType().getScalarType())) {
            case VARCHAR:
                return parseColumnName(info) + datum.getScalarValue();
            case BIGINT:
                Long longValue = Long.valueOf(datum.getScalarValue());
                return parseColumnName(info) + longValue;
            case INTEGER:
                Integer intValue = Integer.valueOf(datum.getScalarValue());
                return parseColumnName(info) + intValue;
            case BOOLEAN:
                Boolean booleanValue = Boolean.valueOf(datum.getScalarValue());
                return parseColumnName(info) + booleanValue;
            case DOUBLE:
                Double doubleValue = Double.valueOf(datum.getScalarValue());
                return parseColumnName(info) + doubleValue;
            case TIMESTAMP:
                return parseColumnName(info) + LocalDateTime.parse(datum.getScalarValue(), TIMESTAMP_FORMATTER);
            case DATE:
                return parseColumnName(info) + LocalDate.parse(datum.getScalarValue(), DATE_FORMATTER);
            case TIME:
                return parseColumnName(info) + LocalTime.parse(datum.getScalarValue(), TIME_FORMATTER);
            case INTERVAL_DAY_TO_SECOND:
            case INTERVAL_YEAR_TO_MONTH:
                return parseColumnName(info) + datum.getScalarValue();
            case UNKNOWN:
                return parseColumnName(info) + datum.getScalarValue();
            default:
                throw new IllegalArgumentException("Given type is not valid: " + info.getType().getScalarType());
        }
    }
 
    private String parseColumnName(ColumnInfo info) {
        return info.getName() == null ? "" : info.getName() + "=";
    }
 
    private String parseArray(ColumnInfo arrayColumnInfo, List<Datum> arrayValues) {
        List<String> arrayOutput = new ArrayList<>();
        for (Datum datum : arrayValues) {
            arrayOutput.add(parseDatum(arrayColumnInfo, datum));
        }
        return String.format("[%s]", arrayOutput.stream().map(Object::toString).collect(Collectors.joining(",")));
    }
```

------
#### [  Java v2  ]

```
    private static final long ONE_GB_IN_BYTES = 1073741824L;

    private void parseQueryResult(QueryResponse response) {
        final QueryStatus currentStatusOfQuery = response.queryStatus();

        System.out.println("Query progress so far: " + currentStatusOfQuery.progressPercentage() + "%");
        
        double bytesScannedSoFar = ((double) currentStatusOfQuery.cumulativeBytesScanned() / ONE_GB_IN_BYTES);
        System.out.println("Bytes scanned so far: " + bytesScannedSoFar + " GB");
        
        double bytesMeteredSoFar = ((double) currentStatusOfQuery.cumulativeBytesMetered() / ONE_GB_IN_BYTES);
        System.out.println("Bytes metered so far: " + bytesMeteredSoFar + " GB");
        
        List<ColumnInfo> columnInfo = response.columnInfo();
        List<Row> rows = response.rows();

        System.out.println("Metadata: " + columnInfo);
        System.out.println("Data: ");

        // iterate every row
        for (Row row : rows) {
            System.out.println(parseRow(columnInfo, row));
        }
    }

    private String parseRow(List<ColumnInfo> columnInfo, Row row) {
        List<Datum> data = row.data();
        List<String> rowOutput = new ArrayList<>();
        // iterate every column per row
        for (int j = 0; j < data.size(); j++) {
            ColumnInfo info = columnInfo.get(j);
            Datum datum = data.get(j);
            rowOutput.add(parseDatum(info, datum));
        }
        return String.format("{%s}", rowOutput.stream().map(Object::toString).collect(Collectors.joining(",")));
    }

    private String parseDatum(ColumnInfo info, Datum datum) {
        if (datum.nullValue() != null && datum.nullValue()) {
            return info.name() + "=" + "NULL";
        }
        Type columnType = info.type();
        // If the column is of TimeSeries Type
        if (columnType.timeSeriesMeasureValueColumnInfo() != null) {
            return parseTimeSeries(info, datum);
        }
        // If the column is of Array Type
        else if (columnType.arrayColumnInfo() != null) {
            List<Datum> arrayValues = datum.arrayValue();
            return info.name() + "=" + parseArray(info.type().arrayColumnInfo(), arrayValues);
        }
        // If the column is of Row Type
        else if (columnType.rowColumnInfo() != null && columnType.rowColumnInfo().size() > 0) {
            List<ColumnInfo> rowColumnInfo = info.type().rowColumnInfo();
            Row rowValues = datum.rowValue();
            return parseRow(rowColumnInfo, rowValues);
        }
        // If the column is of Scalar Type
        else {
            return parseScalarType(info, datum);
        }
    }

    private String parseTimeSeries(ColumnInfo info, Datum datum) {
        List<String> timeSeriesOutput = new ArrayList<>();
        for (TimeSeriesDataPoint dataPoint : datum.timeSeriesValue()) {
            timeSeriesOutput.add("{time=" + dataPoint.time() + ", value=" +
                    parseDatum(info.type().timeSeriesMeasureValueColumnInfo(), dataPoint.value()) + "}");
        }
        return String.format("[%s]", timeSeriesOutput.stream().map(Object::toString).collect(Collectors.joining(",")));
    }

    private String parseScalarType(ColumnInfo info, Datum datum) {
        return parseColumnName(info) + datum.scalarValue();
    }

    private String parseColumnName(ColumnInfo info) {
        return info.name() == null ? "" : info.name() + "=";
    }

    private String parseArray(ColumnInfo arrayColumnInfo, List<Datum> arrayValues) {
        List<String> arrayOutput = new ArrayList<>();
        for (Datum datum : arrayValues) {
            arrayOutput.add(parseDatum(arrayColumnInfo, datum));
        }
        return String.format("[%s]", arrayOutput.stream().map(Object::toString).collect(Collectors.joining(",")));
    }
```

------
#### [  Go  ]

```
func processScalarType(data *timestreamquery.Datum) string {
    return *data.ScalarValue
}

func processTimeSeriesType(data []*timestreamquery.TimeSeriesDataPoint, columnInfo *timestreamquery.ColumnInfo) string {
    value := ""
    for k := 0; k < len(data); k++ {
        time := data[k].Time
        value += *time + ":"
        if columnInfo.Type.ScalarType != nil {
            value += processScalarType(data[k].Value)
        } else if columnInfo.Type.ArrayColumnInfo != nil {
            value += processArrayType(data[k].Value.ArrayValue, columnInfo.Type.ArrayColumnInfo)
        } else if columnInfo.Type.RowColumnInfo != nil {
            value += processRowType(data[k].Value.RowValue.Data, columnInfo.Type.RowColumnInfo)
        } else {
            fail("Bad data type")
        }
        if k != len(data)-1 {
            value += ", "
        }
    }
    return value
}

func processArrayType(datumList []*timestreamquery.Datum, columnInfo *timestreamquery.ColumnInfo) string {
    value := ""
    for k := 0; k < len(datumList); k++ {
        if columnInfo.Type.ScalarType != nil {
            value += processScalarType(datumList[k])
        } else if columnInfo.Type.TimeSeriesMeasureValueColumnInfo != nil {
            value += processTimeSeriesType(datumList[k].TimeSeriesValue, columnInfo.Type.TimeSeriesMeasureValueColumnInfo)
        } else if columnInfo.Type.ArrayColumnInfo != nil {
            value += "["
            value += processArrayType(datumList[k].ArrayValue, columnInfo.Type.ArrayColumnInfo)
            value += "]"
        } else if columnInfo.Type.RowColumnInfo != nil {
            value += "["
            value += processRowType(datumList[k].RowValue.Data, columnInfo.Type.RowColumnInfo)
            value += "]"
        } else {
            fail("Bad column type")
        }

        if k != len(datumList)-1 {
            value += ", "
        }
    }
    return value
}

func processRowType(data []*timestreamquery.Datum, metadata []*timestreamquery.ColumnInfo) string {
    value := ""
    for j := 0; j < len(data); j++ {
        if metadata[j].Type.ScalarType != nil {
            // process simple data types
            value += processScalarType(data[j])
        } else if metadata[j].Type.TimeSeriesMeasureValueColumnInfo != nil {
            // fmt.Println("Timeseries measure value column info")
            // fmt.Println(metadata[j].Type.TimeSeriesMeasureValueColumnInfo.Type)
            datapointList := data[j].TimeSeriesValue
            value += "["
            value += processTimeSeriesType(datapointList, metadata[j].Type.TimeSeriesMeasureValueColumnInfo)
            value += "]"
        } else if metadata[j].Type.ArrayColumnInfo != nil {
            columnInfo := metadata[j].Type.ArrayColumnInfo
            // fmt.Println("Array column info")
            // fmt.Println(columnInfo)
            datumList := data[j].ArrayValue
            value += "["
            value += processArrayType(datumList, columnInfo)
            value += "]"
        } else if metadata[j].Type.RowColumnInfo != nil {
            columnInfo := metadata[j].Type.RowColumnInfo
            datumList := data[j].RowValue.Data
            value += "["
            value += processRowType(datumList, columnInfo)
            value += "]"
        } else {
            panic("Bad column type")
        }
        // comma seperated column values
        if j != len(data)-1 {
            value += ", "
        }
    }
    return value
}
```

------
#### [  Python  ]

```
    def _parse_query_result(self, query_result):
        query_status = query_result["QueryStatus"]

        progress_percentage = query_status["ProgressPercentage"]
        print(f"Query progress so far: {progress_percentage}%")

        bytes_scanned = float(query_status["CumulativeBytesScanned"]) / ONE_GB_IN_BYTES
        print(f"Data scanned so far: {bytes_scanned} GB")

        bytes_metered = float(query_status["CumulativeBytesMetered"]) / ONE_GB_IN_BYTES
        print(f"Data metered so far: {bytes_metered} GB")

        column_info = query_result['ColumnInfo']

        print("Metadata: %s" % column_info)
        print("Data: ")
        for row in query_result['Rows']:
            print(self._parse_row(column_info, row))

    def _parse_row(self, column_info, row):
        data = row['Data']
        row_output = []
        for j in range(len(data)):
            info = column_info[j]
            datum = data[j]
            row_output.append(self._parse_datum(info, datum))

        return "{%s}" % str(row_output)

    def _parse_datum(self, info, datum):
        if datum.get('NullValue', False):
            return "%s=NULL" % info['Name'],

        column_type = info['Type']

        # If the column is of TimeSeries Type
        if 'TimeSeriesMeasureValueColumnInfo' in column_type:
            return self._parse_time_series(info, datum)

        # If the column is of Array Type
        elif 'ArrayColumnInfo' in column_type:
            array_values = datum['ArrayValue']
            return "%s=%s" % (info['Name'], self._parse_array(info['Type']['ArrayColumnInfo'], array_values))

        # If the column is of Row Type
        elif 'RowColumnInfo' in column_type:
            row_column_info = info['Type']['RowColumnInfo']
            row_values = datum['RowValue']
            return self._parse_row(row_column_info, row_values)

        # If the column is of Scalar Type
        else:
            return self._parse_column_name(info) + datum['ScalarValue']

    def _parse_time_series(self, info, datum):
        time_series_output = []
        for data_point in datum['TimeSeriesValue']:
            time_series_output.append("{time=%s, value=%s}"
                                      % (data_point['Time'],
                                         self._parse_datum(info['Type']['TimeSeriesMeasureValueColumnInfo'],
                                                           data_point['Value'])))
        return "[%s]" % str(time_series_output)

    def _parse_array(self, array_column_info, array_values):
        array_output = []
        for datum in array_values:
            array_output.append(self._parse_datum(array_column_info, datum))

        return "[%s]" % str(array_output)
        
    @staticmethod
    def _parse_column_name(info):
        if 'Name' in info:
            return info['Name'] + "="
        else:
            return ""
```

------
#### [  Node.js  ]

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
function parseQueryResult(response) {
    const queryStatus = response.QueryStatus;
    console.log("Current query status: " + JSON.stringify(queryStatus));
    
    const columnInfo = response.ColumnInfo;
    const rows = response.Rows;

    console.log("Metadata: " + JSON.stringify(columnInfo));
    console.log("Data: ");

    rows.forEach(function (row) {
        console.log(parseRow(columnInfo, row));
    });
}

function parseRow(columnInfo, row) {
    const data = row.Data;
    const rowOutput = [];

    var i;
    for ( i = 0; i < data.length; i++ ) {
        info = columnInfo[i];
        datum = data[i];
        rowOutput.push(parseDatum(info, datum));
    }

    return `{${rowOutput.join(", ")}}`
}

function parseDatum(info, datum) {
    if (datum.NullValue != null && datum.NullValue === true) {
        return `${info.Name}=NULL`;
    }

    const columnType = info.Type;

    // If the column is of TimeSeries Type
    if (columnType.TimeSeriesMeasureValueColumnInfo != null) {
        return parseTimeSeries(info, datum);
    }
    // If the column is of Array Type
    else if (columnType.ArrayColumnInfo != null) {
        const arrayValues = datum.ArrayValue;
        return `${info.Name}=${parseArray(info.Type.ArrayColumnInfo, arrayValues)}`;
    }
    // If the column is of Row Type
    else if (columnType.RowColumnInfo != null) {
        const rowColumnInfo = info.Type.RowColumnInfo;
        const rowValues = datum.RowValue;
        return parseRow(rowColumnInfo, rowValues);
    }
    // If the column is of Scalar Type
    else {
        return parseScalarType(info, datum);
    }
}

function parseTimeSeries(info, datum) {
    const timeSeriesOutput = [];
    datum.TimeSeriesValue.forEach(function (dataPoint) {
        timeSeriesOutput.push(`{time=${dataPoint.Time}, value=${parseDatum(info.Type.TimeSeriesMeasureValueColumnInfo, dataPoint.Value)}}`)
    });

    return `[${timeSeriesOutput.join(", ")}]`
}

function parseScalarType(info, datum) {
    return parseColumnName(info) + datum.ScalarValue;
}

function parseColumnName(info) {
    return info.Name == null ? "" : `${info.Name}=`;
}

function parseArray(arrayColumnInfo, arrayValues) {
    const arrayOutput = [];
    arrayValues.forEach(function (datum) {
        arrayOutput.push(parseDatum(arrayColumnInfo, datum));
    });
    return `[${arrayOutput.join(", ")}]`
}
```

------
#### [  .NET  ]

```
        private void ParseQueryResult(QueryResponse response)
        {
            List<ColumnInfo> columnInfo = response.ColumnInfo;
            var options = new JsonSerializerOptions
            {
                IgnoreNullValues = true
            };
            List<String> columnInfoStrings = columnInfo.ConvertAll(x => JsonSerializer.Serialize(x, options));
            List<Row> rows = response.Rows;
            
            QueryStatus queryStatus = response.QueryStatus;
            Console.WriteLine("Current Query status:" + JsonSerializer.Serialize(queryStatus, options));
            
            Console.WriteLine("Metadata:" + string.Join(",", columnInfoStrings));
            Console.WriteLine("Data:");

            foreach (Row row in rows)
            {
                Console.WriteLine(ParseRow(columnInfo, row));
            }
        }

        private string ParseRow(List<ColumnInfo> columnInfo, Row row)
        {
            List<Datum> data = row.Data;
            List<string> rowOutput = new List<string>();
            for (int j = 0; j < data.Count; j++)
            {
                ColumnInfo info = columnInfo[j];
                Datum datum = data[j];
                rowOutput.Add(ParseDatum(info, datum));
            }
            return $"{{{string.Join(",", rowOutput)}}}";
        }

        private string ParseDatum(ColumnInfo info, Datum datum)
        {
            if (datum.NullValue)
            {
                return $"{info.Name}=NULL";
            }

            Amazon.TimestreamQuery.Model.Type columnType = info.Type;
            if (columnType.TimeSeriesMeasureValueColumnInfo != null)
            {
                return ParseTimeSeries(info, datum);
            }
            else if (columnType.ArrayColumnInfo != null)
            {
                List<Datum> arrayValues = datum.ArrayValue;
                return $"{info.Name}={ParseArray(info.Type.ArrayColumnInfo, arrayValues)}";
            }
            else if (columnType.RowColumnInfo != null && columnType.RowColumnInfo.Count > 0)
            {
                List<ColumnInfo> rowColumnInfo = info.Type.RowColumnInfo;
                Row rowValue = datum.RowValue;
                return ParseRow(rowColumnInfo, rowValue);
            }
            else
            {
                return ParseScalarType(info, datum);
            }
        }

        private string ParseTimeSeries(ColumnInfo info, Datum datum)
        {
            var timeseriesString = datum.TimeSeriesValue
                .Select(value => $"{{time={value.Time}, value={ParseDatum(info.Type.TimeSeriesMeasureValueColumnInfo, value.Value)}}}")
                .Aggregate((current, next) => current + "," + next);

            return $"[{timeseriesString}]";
        }

        private string ParseScalarType(ColumnInfo info, Datum datum)
        {
            return ParseColumnName(info) + datum.ScalarValue;
        }

        private string ParseColumnName(ColumnInfo info)
        {
            return info.Name == null ? "" : (info.Name + "=");
        }

        private string ParseArray(ColumnInfo arrayColumnInfo, List<Datum> arrayValues)
        {
            return $"[{arrayValues.Select(value => ParseDatum(arrayColumnInfo, value)).Aggregate((current, next) => current + "," + next)}]";
        }
```

------

## Accesso allo stato della query
<a name="code-samples.run-query.query-status"></a>

 È possibile accedere allo stato della query tramite`QueryResponse`, che contiene informazioni sullo stato di avanzamento di una query, sui byte analizzati da una query e sui byte misurati da una query. I `bytesScanned` valori `bytesMetered` and sono cumulativi e vengono aggiornati continuamente durante la paginazione dei risultati delle query. È possibile utilizzare queste informazioni per comprendere i byte analizzati da una singola query e utilizzarle anche per prendere determinate decisioni. Ad esempio, supponendo che il prezzo della query sia di 0,01 USD per GB scansionato, potresti voler annullare le query che superano i 25 USD per query o GB. `X` Il frammento di codice riportato di seguito mostra come è possibile eseguire questa operazione. 

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, consulta. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
    private static final long ONE_GB_IN_BYTES = 1073741824L;
    private static final double QUERY_COST_PER_GB_IN_DOLLARS = 0.01; // Assuming the price of query is $0.01 per GB

    public void cancelQueryBasedOnQueryStatus() {
        System.out.println("Starting query: " + SELECT_ALL_QUERY);
        QueryRequest queryRequest = new QueryRequest();
        queryRequest.setQueryString(SELECT_ALL_QUERY);
        QueryResult queryResult = queryClient.query(queryRequest);

        while (true) {
            final QueryStatus currentStatusOfQuery = queryResult.getQueryStatus();
            System.out.println("Query progress so far: " + currentStatusOfQuery.getProgressPercentage() + "%");
            double bytesMeteredSoFar = ((double) currentStatusOfQuery.getCumulativeBytesMetered() / ONE_GB_IN_BYTES);
            System.out.println("Bytes metered so far: " + bytesMeteredSoFar + " GB");
            // Cancel query if its costing more than 1 cent
            if (bytesMeteredSoFar * QUERY_COST_PER_GB_IN_DOLLARS > 0.01) {
                cancelQuery(queryResult);
                break;
            }

            if (queryResult.getNextToken() == null) {
                break;
            }
            queryRequest.setNextToken(queryResult.getNextToken());
            queryResult = queryClient.query(queryRequest);
        }
    }
```

------
#### [  Java v2  ]

```
    private static final long ONE_GB_IN_BYTES = 1073741824L;
    private static final double QUERY_COST_PER_GB_IN_DOLLARS = 0.01; // Assuming the price of query is $0.01 per GB

    public void cancelQueryBasedOnQueryStatus() {
        System.out.println("Starting query: " + SELECT_ALL_QUERY);
        QueryRequest queryRequest = QueryRequest.builder().queryString(SELECT_ALL_QUERY).build();

        final QueryIterable queryResponseIterator = timestreamQueryClient.queryPaginator(queryRequest);
        for(QueryResponse queryResponse : queryResponseIterator) {
            final QueryStatus currentStatusOfQuery = queryResponse.queryStatus();
            System.out.println("Query progress so far: " + currentStatusOfQuery.progressPercentage() + "%");
            double bytesMeteredSoFar = ((double) currentStatusOfQuery.cumulativeBytesMetered() / ONE_GB_IN_BYTES);
            System.out.println("Bytes metered so far: " + bytesMeteredSoFar + "GB");
            // Cancel query if its costing more than 1 cent
            if (bytesMeteredSoFar * QUERY_COST_PER_GB_IN_DOLLARS > 0.01) {
                cancelQuery(queryResponse);
                break;
            }
        }
    }
```

------
#### [  Go  ]

```
const OneGbInBytes = 1073741824
// Assuming the price of query is $0.01 per GB
const QueryCostPerGbInDollars = 0.01

func cancelQueryBasedOnQueryStatus(queryPtr *string, querySvc *timestreamquery.TimestreamQuery, f *os.File) {
    queryInput := &timestreamquery.QueryInput{
        QueryString: aws.String(*queryPtr),
    }
    fmt.Println("QueryInput:")
    fmt.Println(queryInput)
    // execute the query
    err := querySvc.QueryPages(queryInput,
        func(page *timestreamquery.QueryOutput, lastPage bool) bool {
            // process query response
            queryStatus := page.QueryStatus
            fmt.Println("Current query status:", queryStatus)
            bytes_metered := float64(*queryStatus.CumulativeBytesMetered) / float64(ONE_GB_IN_BYTES)
            if bytes_metered * QUERY_COST_PER_GB_IN_DOLLARS > 0.01 {
                cancelQuery(page, querySvc)
                return true
            }
            // query response metadata
            // includes column names and types
            metadata := page.ColumnInfo
            // fmt.Println("Metadata:")
            fmt.Println(metadata)
            header := ""
            for i := 0; i < len(metadata); i++ {
                header += *metadata[i].Name
                if i != len(metadata)-1 {
                    header += ", "
                }
            }
            write(f, header)

            // query response data
            fmt.Println("Data:")
            // process rows
            rows := page.Rows
            for i := 0; i < len(rows); i++ {
                data := rows[i].Data
                value := processRowType(data, metadata)
                fmt.Println(value)
                write(f, value)
            }
            fmt.Println("Number of rows:", len(page.Rows))
            return true
        })
    if err != nil {
        fmt.Println("Error:")
        fmt.Println(err)
    }
}
```

------
#### [  Python  ]

```
ONE_GB_IN_BYTES = 1073741824
# Assuming the price of query is $0.01 per GB
QUERY_COST_PER_GB_IN_DOLLARS = 0.01 

    def cancel_query_based_on_query_status(self):
        try:
            print("Starting query: " + self.SELECT_ALL)
            page_iterator = self.paginator.paginate(QueryString=self.SELECT_ALL)
            for page in page_iterator:
                query_status = page["QueryStatus"]
                progress_percentage = query_status["ProgressPercentage"]
                print("Query progress so far: " + str(progress_percentage) + "%")
                bytes_metered = query_status["CumulativeBytesMetered"] / self.ONE_GB_IN_BYTES
                print("Bytes Metered so far: " + str(bytes_metered) + " GB")
                if bytes_metered * self.QUERY_COST_PER_GB_IN_DOLLARS > 0.01:
                    self.cancel_query_for(page)
                    break
        except Exception as err:
            print("Exception while running query:", err)
            traceback.print_exc(file=sys.stderr)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
function parseQueryResult(response) {
    const queryStatus = response.QueryStatus;
    console.log("Current query status: " + JSON.stringify(queryStatus));
    
    const columnInfo = response.ColumnInfo;
    const rows = response.Rows;

    console.log("Metadata: " + JSON.stringify(columnInfo));
    console.log("Data: ");

    rows.forEach(function (row) {
        console.log(parseRow(columnInfo, row));
    });
}

function parseRow(columnInfo, row) {
    const data = row.Data;
    const rowOutput = [];

    var i;
    for ( i = 0; i < data.length; i++ ) {
        info = columnInfo[i];
        datum = data[i];
        rowOutput.push(parseDatum(info, datum));
    }

    return `{${rowOutput.join(", ")}}`
}

function parseDatum(info, datum) {
    if (datum.NullValue != null && datum.NullValue === true) {
        return `${info.Name}=NULL`;
    }

    const columnType = info.Type;

    // If the column is of TimeSeries Type
    if (columnType.TimeSeriesMeasureValueColumnInfo != null) {
        return parseTimeSeries(info, datum);
    }
    // If the column is of Array Type
    else if (columnType.ArrayColumnInfo != null) {
        const arrayValues = datum.ArrayValue;
        return `${info.Name}=${parseArray(info.Type.ArrayColumnInfo, arrayValues)}`;
    }
    // If the column is of Row Type
    else if (columnType.RowColumnInfo != null) {
        const rowColumnInfo = info.Type.RowColumnInfo;
        const rowValues = datum.RowValue;
        return parseRow(rowColumnInfo, rowValues);
    }
    // If the column is of Scalar Type
    else {
        return parseScalarType(info, datum);
    }
}

function parseTimeSeries(info, datum) {
    const timeSeriesOutput = [];
    datum.TimeSeriesValue.forEach(function (dataPoint) {
        timeSeriesOutput.push(`{time=${dataPoint.Time}, value=${parseDatum(info.Type.TimeSeriesMeasureValueColumnInfo, dataPoint.Value)}}`)
    });

    return `[${timeSeriesOutput.join(", ")}]`
}

function parseScalarType(info, datum) {
    return parseColumnName(info) + datum.ScalarValue;
}

function parseColumnName(info) {
    return info.Name == null ? "" : `${info.Name}=`;
}

function parseArray(arrayColumnInfo, arrayValues) {
    const arrayOutput = [];
    arrayValues.forEach(function (datum) {
        arrayOutput.push(parseDatum(arrayColumnInfo, datum));
    });
    return `[${arrayOutput.join(", ")}]`
}
```

------
#### [  .NET  ]

```
private static readonly long ONE_GB_IN_BYTES = 1073741824L;
private static readonly double QUERY_COST_PER_GB_IN_DOLLARS = 0.01; // Assuming the price of query is $0.01 per GB

private async Task CancelQueryBasedOnQueryStatus(string queryString)
{
    try
    {
        QueryRequest queryRequest = new QueryRequest();
        queryRequest.QueryString = queryString;
        QueryResponse queryResponse = await queryClient.QueryAsync(queryRequest);
        while (true)
        {
            QueryStatus queryStatus = queryResponse.QueryStatus;
            double bytesMeteredSoFar = ((double) queryStatus.CumulativeBytesMetered / ONE_GB_IN_BYTES);
            // Cancel query if its costing more than 1 cent
            if (bytesMeteredSoFar * QUERY_COST_PER_GB_IN_DOLLARS > 0.01)
            {
                await CancelQuery(queryResponse);
                break;
            }

            ParseQueryResult(queryResponse);
            if (queryResponse.NextToken == null)
            {
                break;
            }
            queryRequest.NextToken = queryResponse.NextToken;
            queryResponse = await queryClient.QueryAsync(queryRequest);
       }
    } catch(Exception e)
    {
        // Some queries might fail with 500 if the result of a sequence function has more than 10000 entries
        Console.WriteLine(e.ToString());
    }
}
```

------

 Per ulteriori dettagli su come annullare una query, consulta. [Annulla interrogazione](code-samples.cancel-query.md) 

# Esegui la query UNLOAD
<a name="code-samples.run-query-unload"></a>

I seguenti esempi di codice richiamano una query UNLOAD. Per informazioni su `UNLOAD`, consulta [Utilizzo di UNLOAD per esportare i risultati delle query su S3 da Timestream per LiveAnalytics](export-unload.md). Per esempi di `UNLOAD` interrogazioni, vedere. [Esempio di utilizzo di UNLOAD from Timestream per LiveAnalytics](export-unload-example-use-case.md)

**Topics**
+ [Crea ed esegui una query UNLOAD](#code-samples.run-query-unload-build-and-run)
+ [Analizza la risposta UNLOAD e ottieni il conteggio delle righe, il link manifest e il link ai metadati](#code-samples.run-query-unload-parse-response)
+ [Leggi e analizza il contenuto del manifesto](#code-samples.run-query-unload-parse-manifest)
+ [Leggi e analizza il contenuto dei metadati](#code-samples.run-query-unload-parse-metadata)

## Crea ed esegui una query UNLOAD
<a name="code-samples.run-query-unload-build-and-run"></a>

------
#### [  Java  ]

```
// When you have a SELECT like below

String QUERY_1 = "SELECT user_id, ip_address, event, session_id, measure_name, time, query, quantity, product_id, channel FROM "
        + DATABASE_NAME + "." + UNLOAD_TABLE_NAME
        + " WHERE time BETWEEN ago(2d) AND now()";

// You can construct UNLOAD query as follows
UnloadQuery unloadQuery = UnloadQuery.builder()
        .selectQuery(QUERY_1)
        .bucketName("timestream-sample-<region>-<accountId>")
        .resultsPrefix("without_partition")
        .format(CSV)
        .compression(UnloadQuery.Compression.GZIP)
        .build();
QueryResult unloadResult = runQuery(unloadQuery.getUnloadQuery());

// Run UNLOAD query (Similar to how you run SELECT query)
// https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.run-query.html#code-samples.run-query.pagination
    private QueryResult runQuery(String queryString) {
        QueryResult queryResult = null;
        try {
            QueryRequest queryRequest = new QueryRequest();
            queryRequest.setQueryString(queryString);
            queryResult = queryClient.query(queryRequest);
            while (true) {
                parseQueryResult(queryResult);
                if (queryResult.getNextToken() == null) {
                    break;
                }
                queryRequest.setNextToken(queryResult.getNextToken());
                queryResult = queryClient.query(queryRequest);
            }
        } catch (Exception e) {
            // Some queries might fail with 500 if the result of a sequence function has more than 10000 entries
            e.printStackTrace();
        }
        return queryResult;
    }

// Utility that helps to construct UNLOAD query

@Builder
static class UnloadQuery {
    private String selectQuery;
    private String bucketName;
    private String resultsPrefix;
    private Format format;
    private Compression compression;
    private EncryptionType encryptionType;
    private List<String> partitionColumns;
    private String kmsKey;
    private Character csvFieldDelimiter;
    private Character csvEscapeCharacter;

    public String getUnloadQuery() {
        String destination = constructDestination();
        String withClause = constructOptionalParameters();
        return String.format("UNLOAD (%s) TO '%s' %s", selectQuery, destination, withClause);
    }

    private String constructDestination() {
        return "s3://" + this.bucketName + "/" + this.resultsPrefix + "/";
    }

    private String constructOptionalParameters() {
        boolean isOptionalParametersPresent = Objects.nonNull(format)
                || Objects.nonNull(compression)
                || Objects.nonNull(encryptionType)
                || Objects.nonNull(partitionColumns)
                || Objects.nonNull(kmsKey)
                || Objects.nonNull(csvFieldDelimiter)
                || Objects.nonNull(csvEscapeCharacter);

        String withClause = "";
        if (isOptionalParametersPresent) {
            StringJoiner optionalParameters = new StringJoiner(",");
            if (Objects.nonNull(format)) {
                optionalParameters.add("format = '" + format + "'");
            }
            if (Objects.nonNull(compression)) {
                optionalParameters.add("compression = '" + compression + "'");
            }
            if (Objects.nonNull(encryptionType)) {
                optionalParameters.add("encryption = '" + encryptionType + "'");
            }
            if (Objects.nonNull(kmsKey)) {
                optionalParameters.add("kms_key = '" + kmsKey + "'");
            }
            if (Objects.nonNull(csvFieldDelimiter)) {
                optionalParameters.add("field_delimiter = '" + csvFieldDelimiter + "'");
            }
            if (Objects.nonNull(csvEscapeCharacter)) {
                optionalParameters.add("escaped_by = '" + csvEscapeCharacter + "'");
            }
            if (Objects.nonNull(partitionColumns) && !partitionColumns.isEmpty()) {
                final StringJoiner partitionedByList = new StringJoiner(",");
                partitionColumns.forEach(column -> partitionedByList.add("'" + column + "'"));
                optionalParameters.add(String.format("partitioned_by = ARRAY[%s]", partitionedByList));
            }
            withClause = String.format("WITH (%s)", optionalParameters);
        }
        return withClause;
    }

    public enum Format {
        CSV, PARQUET
    }

    public enum Compression {
        GZIP, NONE
    }

    public enum EncryptionType {
        SSE_S3, SSE_KMS
    }

    @Override
    public String toString() {
        return getUnloadQuery();
    }
}
```

------
#### [  Java v2  ]

```
// When you have a SELECT like below

String QUERY_1 = "SELECT user_id, ip_address, event, session_id, measure_name, time, query, quantity, product_id, channel FROM "
        + DATABASE_NAME + "." + UNLOAD_TABLE_NAME
        + " WHERE time BETWEEN ago(2d) AND now()";

//You can construct UNLOAD query as follows
UnloadQuery unloadQuery = UnloadQuery.builder()
        .selectQuery(QUERY_1)
        .bucketName("timestream-sample-<region>-<accountId>")
        .resultsPrefix("without_partition")
        .format(CSV)
        .compression(UnloadQuery.Compression.GZIP)
        .build();

QueryResponse unloadResponse = runQuery(unloadQuery.getUnloadQuery());


// Run UNLOAD query (Similar to how you run SELECT query)
// https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.run-query.html#code-samples.run-query.pagination
private QueryResponse runQuery(String queryString) {
   QueryResponse finalResponse = null;
    try {
        QueryRequest queryRequest = QueryRequest.builder().queryString(queryString).build();
        final QueryIterable queryResponseIterator = timestreamQueryClient.queryPaginator(queryRequest);
        for(QueryResponse queryResponse : queryResponseIterator) {
            parseQueryResult(queryResponse);
           finalResponse = queryResponse;
        }
    } catch (Exception e) {
        // Some queries might fail with 500 if the result of a sequence function has more than 10000 entries
        e.printStackTrace();
    }
   return finalResponse;
}

// Utility that helps to construct UNLOAD query
@Builder
static class UnloadQuery {
    private String selectQuery;
    private String bucketName;
    private String resultsPrefix;
    private Format format;
    private Compression compression;
    private EncryptionType encryptionType;
    private List<String> partitionColumns;
    private String kmsKey;
    private Character csvFieldDelimiter;
    private Character csvEscapeCharacter;

    public String getUnloadQuery() {
        String destination = constructDestination();
        String withClause = constructOptionalParameters();
        return String.format("UNLOAD (%s) TO '%s' %s", selectQuery, destination, withClause);
    }

    private String constructDestination() {
        return "s3://" + this.bucketName + "/" + this.resultsPrefix + "/";
    }

    private String constructOptionalParameters() {
        boolean isOptionalParametersPresent = Objects.nonNull(format)
                || Objects.nonNull(compression)
                || Objects.nonNull(encryptionType)
                || Objects.nonNull(partitionColumns)
                || Objects.nonNull(kmsKey)
                || Objects.nonNull(csvFieldDelimiter)
                || Objects.nonNull(csvEscapeCharacter);

        String withClause = "";
        if (isOptionalParametersPresent) {
            StringJoiner optionalParameters = new StringJoiner(",");
            if (Objects.nonNull(format)) {
                optionalParameters.add("format = '" + format + "'");
            }
            if (Objects.nonNull(compression)) {
                optionalParameters.add("compression = '" + compression + "'");
            }
            if (Objects.nonNull(encryptionType)) {
                optionalParameters.add("encryption = '" + encryptionType + "'");
            }
            if (Objects.nonNull(kmsKey)) {
                optionalParameters.add("kms_key = '" + kmsKey + "'");
            }
            if (Objects.nonNull(csvFieldDelimiter)) {
                optionalParameters.add("field_delimiter = '" + csvFieldDelimiter + "'");
            }
            if (Objects.nonNull(csvEscapeCharacter)) {
                optionalParameters.add("escaped_by = '" + csvEscapeCharacter + "'");
            }
            if (Objects.nonNull(partitionColumns) && !partitionColumns.isEmpty()) {
                final StringJoiner partitionedByList = new StringJoiner(",");
                partitionColumns.forEach(column -> partitionedByList.add("'" + column + "'"));
                optionalParameters.add(String.format("partitioned_by = ARRAY[%s]", partitionedByList));
            }
            withClause = String.format("WITH (%s)", optionalParameters);
        }
        return withClause;
    }

    public enum Format {
        CSV, PARQUET
    }

    public enum Compression {
        GZIP, NONE
    }

    public enum EncryptionType {
        SSE_S3, SSE_KMS
    }

    @Override
    public String toString() {
        return getUnloadQuery();
    }
}
```

------
#### [  Go  ]

```
// When you have a SELECT like below
var Query = "SELECT user_id, ip_address, event, session_id, measure_name, time, query, quantity, product_id, channel FROM "
+ *databaseName + "." + *tableName + " WHERE time BETWEEN ago(2d) AND now()"

// You can construct UNLOAD query as follows
var unloadQuery = UnloadQuery{
    Query: "SELECT user_id, ip_address, session_id, measure_name, time, query, quantity, product_id, channel, event FROM " + *databaseName + "." + *tableName + 
    " WHERE time BETWEEN ago(2d) AND now()",
    Partitioned_by: []string{},
    Compression: "GZIP",
    Format: "CSV",
    S3Location: bucketName,
    ResultPrefix: "without_partition",
}


// Run UNLOAD query (Similar to how you run SELECT query)
// https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.run-query.html#code-samples.run-query.pagination

queryInput := &timestreamquery.QueryInput{
    QueryString: build_query(unloadQuery),
}

err := querySvc.QueryPages(queryInput,
    func(page *timestreamquery.QueryOutput, lastPage bool) bool {
        if (lastPage) {
            var response = parseQueryResult(page)
            var unloadFiles = getManifestAndMetadataFiles(s3Svc, response)
            displayColumns(unloadFiles, unloadQuery.Partitioned_by)
            displayResults(s3Svc, unloadFiles)
        }
        return true
    })

if err != nil {
    fmt.Println("Error:")
    fmt.Println(err)
}

// Utility that helps to construct UNLOAD query
type UnloadQuery struct {
    Query string
    Partitioned_by []string
    Format string
    S3Location string
    ResultPrefix string
    Compression string
}

func build_query(unload_query UnloadQuery) *string {
    var query_results_s3_path = "'s3://" + unload_query.S3Location + "/" + unload_query.ResultPrefix + "/'"
    var query = "UNLOAD(" + unload_query.Query + ") TO " + query_results_s3_path + " WITH ( "
    if (len(unload_query.Partitioned_by) > 0) {
        query = query + "partitioned_by=ARRAY["
        for i, column := range unload_query.Partitioned_by {
            if i == 0 {
                query = query + "'" + column + "'"
            } else {
                query = query + ",'" + column + "'"
            }
        }
        query = query + "],"
    }
    query = query + " format='" + unload_query.Format + "', "
    query = query + "  compression='" + unload_query.Compression + "')"
    fmt.Println(query)
    return aws.String(query)
}
```

------
#### [  Python  ]

```
# When you have a SELECT like below
QUERY_1 = "SELECT user_id, ip_address, event, session_id, measure_name, time, query, quantity, product_id, channel FROM "
        + database_name + "." + table_name + " WHERE time BETWEEN ago(2d) AND now()"
# You can construct UNLOAD query as follows
UNLOAD_QUERY_1 = UnloadQuery(QUERY_1, "timestream-sample-<region>-<accountId>", "without_partition", "CSV", "GZIP", "")

# Run UNLOAD query (Similar to how you run SELECT query)
# https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.run-query.html#code-samples.run-query.pagination
def run_query(self, query_string):
    try:
        page_iterator = self.paginator.paginate(QueryString=UNLOAD_QUERY_1)
    except Exception as err:
        print("Exception while running query:", err)

# Utility that helps to construct UNLOAD query
class UnloadQuery:
    def __init__(self, query, s3_bucket_location, results_prefix, format, compression , partition_by):
        self.query = query
        self.s3_bucket_location = s3_bucket_location
        self.results_prefix = results_prefix
        self.format = format
        self.compression = compression
        self.partition_by = partition_by

    def build_query(self):
        query_results_s3_path = "'s3://" + self.s3_bucket_location + "/" + self.results_prefix + "/'"
        unload_query = "UNLOAD("
        unload_query = unload_query + self.query
        unload_query = unload_query + ") "
        unload_query = unload_query + " TO " + query_results_s3_path
        unload_query = unload_query + " WITH ( "

        if(len(self.partition_by) > 0) :
            unload_query = unload_query + " partitioned_by = ARRAY" + str(self.partition_by) + ","

        unload_query = unload_query + " format='" + self.format  + "', "
        unload_query = unload_query + "  compression='" + self.compression + "')"

        return unload_query
```

------
#### [  Node.js ]

```
// When you have a SELECT like below
QUERY_1 = "SELECT user_id, ip_address, event, session_id, measure_name, time, query, quantity, product_id, channel FROM "
        + database_name + "." + table_name + " WHERE time BETWEEN ago(2d) AND now()"
// You can construct UNLOAD query as follows
UNLOAD_QUERY_1 = new UnloadQuery(QUERY_1, "timestream-sample-<region>-<accountId>", "without_partition", "CSV", "GZIP", "")


// Run UNLOAD query (Similar to how you run SELECT query)
// https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.run-query.html#code-samples.run-query.pagination

async runQuery(query = UNLOAD_QUERY_1, nextToken) {
    const params = new QueryCommand({
        QueryString: query
    });

    if (nextToken) {
        params.NextToken = nextToken;
    }

    await queryClient.send(params).then(
            (response) => {
                if (response.NextToken) {
                    runQuery(queryClient, query, response.NextToken);
                } else {
                    await parseAndDisplayResults(response);
                }
            },
            (err) => {
                console.error("Error while querying:", err);
            });
}


class UnloadQuery {
    constructor(query, s3_bucket_location, results_prefix, format, compression , partition_by) {
        this.query = query;
        this.s3_bucket_location = s3_bucket_location
        this.results_prefix = results_prefix
        this.format = format
        this.compression = compression
        this.partition_by = partition_by
    }

    buildQuery() {
        const query_results_s3_path = "'s3://" + this.s3_bucket_location + "/" + this.results_prefix + "/'"
        let unload_query = "UNLOAD("
        unload_query = unload_query + this.query
        unload_query = unload_query + ") "
        unload_query = unload_query + " TO " + query_results_s3_path
        unload_query = unload_query + " WITH ( "

        if(this.partition_by.length > 0) {
            let partitionBy = ""
            this.partition_by.forEach((str, i) => {
                partitionBy = partitionBy + (i ? ",'" : "'") + str + "'"
            })
            unload_query = unload_query + " partitioned_by = ARRAY[" + partitionBy + "],"
        }
        unload_query = unload_query + " format='" + this.format  + "', "
        unload_query = unload_query + "  compression='" + this.compression + "')"

        return unload_query
    }
}
```

------

## Analizza la risposta UNLOAD e ottieni il conteggio delle righe, il link manifest e il link ai metadati
<a name="code-samples.run-query-unload-parse-response"></a>

------
#### [  Java  ]

```
// Parsing UNLOAD query response is similar to how you parse SELECT query response: 
// https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.run-query.html#code-samples.run-query.parsing

// But unlike SELECT, UNLOAD only has 1 row * 3 columns outputed
// (rows, metadataFile, manifestFile) => (BIGINT, VARCHAR, VARCHAR)

public UnloadResponse parseResult(QueryResult queryResult) {
    Map<String, String> outputMap = new HashMap<>();
    for (int i = 0; i < queryResult.getColumnInfo().size(); i++) {
        outputMap.put(queryResult.getColumnInfo().get(i).getName(),
                queryResult.getRows().get(0).getData().get(i).getScalarValue());

    }
    return new UnloadResponse(outputMap);
}

@Getter
class UnloadResponse {
    private final String metadataFile;
    private final String manifestFile;
    private final int rows;

    public UnloadResponse(Map<String, String> unloadResponse) {
        this.metadataFile = unloadResponse.get("metadataFile");
        this.manifestFile = unloadResponse.get("manifestFile");
        this.rows = Integer.parseInt(unloadResponse.get("rows"));
    }
}
```

------
#### [  Java v2  ]

```
// Parsing UNLOAD query response is similar to how you parse SELECT query response: 
// https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.run-query.html#code-samples.run-query.parsing

// But unlike SELECT, UNLOAD only has 1 row * 3 columns outputed
// (rows, metadataFile, manifestFile) => (BIGINT, VARCHAR, VARCHAR)

public UnloadResponse parseResult(QueryResponse queryResponse) {
    Map<String, String> outputMap = new HashMap<>();
    for (int i = 0; i < queryResponse.columnInfo().size(); i++) {
        outputMap.put(queryResponse.columnInfo().get(i).name(),
                queryResponse.rows().get(0).data().get(i).scalarValue());

    }
    return new UnloadResponse(outputMap);
}

@Getter
class UnloadResponse {
    private final String metadataFile;
    private final String manifestFile;
    private final int rows;

    public UnloadResponse(Map<String, String> unloadResponse) {
        this.metadataFile = unloadResponse.get("metadataFile");
        this.manifestFile = unloadResponse.get("manifestFile");
        this.rows = Integer.parseInt(unloadResponse.get("rows"));
    }
}
```

------
#### [  Go  ]

```
// Parsing UNLOAD query response is similar to how you parse SELECT query response: 
// https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.run-query.html#code-samples.run-query.parsing

// But unlike SELECT, UNLOAD only has 1 row * 3 columns outputed
// (rows, metadataFile, manifestFile) => (BIGINT, VARCHAR, VARCHAR)

func parseQueryResult(queryOutput *timestreamquery.QueryOutput) map[string]string {
    var columnInfo = queryOutput.ColumnInfo;
    fmt.Println("ColumnInfo", columnInfo)
    fmt.Println("QueryId", queryOutput.QueryId)
    fmt.Println("QueryStatus", queryOutput.QueryStatus)
    return parseResponse(columnInfo, queryOutput.Rows[0])
}

func parseResponse(columnInfo []*timestreamquery.ColumnInfo, row *timestreamquery.Row) map[string]string {
    var datum = row.Data
    response := make(map[string]string)
    for i, column := range columnInfo {
        response[*column.Name] = *datum[i].ScalarValue
    }
    return response
}
```

------
#### [  Python  ]

```
# Parsing UNLOAD query response is similar to how you parse SELECT query response: 
# https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.run-query.html#code-samples.run-query.parsing

# But unlike SELECT, UNLOAD only has 1 row * 3 columns outputed
# (rows, metadataFile, manifestFile) => (BIGINT, VARCHAR, VARCHAR)

for page in page_iterator:
  last_page = page
response = self._parse_unload_query_result(last_page)

def _parse_unload_query_result(self, query_result):
    column_info = query_result['ColumnInfo']

    print("ColumnInfo: %s" % column_info)
    print("QueryId: %s" % query_result['QueryId'])
    print("QueryStatus:%s" % query_result['QueryStatus'])
    return self.parse_unload_response(column_info, query_result['Rows'][0])

def parse_unload_response(self, column_info, row):
    response = {}
    data = row['Data']
    for i, column in enumerate(column_info):
        response[column['Name']] = data[i]['ScalarValue']
   print("Rows: %s" % response['rows'])
   print("Metadata File location: %s" % response['metadataFile'])
   print("Manifest File location: %s" % response['manifestFile'])
   return response
```

------
#### [  Node.js ]

```
# Parsing UNLOAD query response is similar to how you parse SELECT query response: 
# https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.run-query.html#code-samples.run-query.parsing

# But unlike SELECT, UNLOAD only has 1 row * 3 columns outputed
# (rows, metadataFile, manifestFile) => (BIGINT, VARCHAR, VARCHAR)

async parseAndDisplayResults(data, query) {
    const columnInfo = data['ColumnInfo'];
    console.log("ColumnInfo:", columnInfo)
    console.log("QueryId: %s", data['QueryId'])
    console.log("QueryStatus:", data['QueryStatus'])
    await this.parseResponse(columnInfo, data['Rows'][0], query)
}

async parseResponse(columnInfo, row, query) {
    let response = {}
    const data = row['Data']
    columnInfo.forEach((column, i) => {
        response[column['Name']] = data[i]['ScalarValue']
    })
    
   console.log("Manifest file", response['manifestFile']);
   console.log("Metadata file", response['metadataFile']);
   
   return response 
}
```

------

## Leggi e analizza il contenuto del manifesto
<a name="code-samples.run-query-unload-parse-manifest"></a>

------
#### [  Java  ]

```
// Read and parse manifest content
public UnloadManifest getUnloadManifest(UnloadResponse unloadResponse) throws IOException {
   AmazonS3URI s3URI = new AmazonS3URI(unloadResponse.getManifestFile());
    S3Object s3Object = s3Client.getObject(s3URI.getBucket(), s3URI.getKey());
    String manifestFileContent = new String(IOUtils.toByteArray(s3Object.getObjectContent()), StandardCharsets.UTF_8);
    return new Gson().fromJson(manifestFileContent, UnloadManifest.class);
}

class UnloadManifest {
    @Getter
    public class FileMetadata {
        long content_length_in_bytes;
        long row_count;
    }

    @Getter
    public class ResultFile {
        String url;
        FileMetadata file_metadata;
    }

    @Getter
    public class QueryMetadata {
        long total_content_length_in_bytes;
        long total_row_count;
        String result_format;
        String result_version;
    }

    @Getter
    public class Author {
        String name;
        String manifest_file_version;
    }

    @Getter
    private List<ResultFile> result_files;
    @Getter
    private QueryMetadata query_metadata;
    @Getter
    private Author author;
}
```

------
#### [  Java v2  ]

```
// Read and parse manifest content
public UnloadManifest getUnloadManifest(UnloadResponse unloadResponse) throws URISyntaxException {
    // Space needs to encoded to use S3 parseUri function
    S3Uri s3Uri = s3Utilities.parseUri(URI.create(unloadResponse.getManifestFile().replace(" ", "%20")));
    ResponseBytes<GetObjectResponse> objectBytes = s3Client.getObjectAsBytes(GetObjectRequest.builder()
            .bucket(s3Uri.bucket().orElseThrow(() -> new URISyntaxException(unloadResponse.getManifestFile(), "Invalid S3 URI")))
            .key(s3Uri.key().orElseThrow(() -> new URISyntaxException(unloadResponse.getManifestFile(), "Invalid S3 URI")))
            .build());
    String manifestFileContent = new String(objectBytes.asByteArray(), StandardCharsets.UTF_8);
    return new Gson().fromJson(manifestFileContent, UnloadManifest.class);
}

class UnloadManifest {
    @Getter
    public class FileMetadata {
        long content_length_in_bytes;
        long row_count;
    }

    @Getter
    public class ResultFile {
        String url;
        FileMetadata file_metadata;
    }

    @Getter
    public class QueryMetadata {
        long total_content_length_in_bytes;
        long total_row_count;
        String result_format;
        String result_version;
    }

    @Getter
    public class Author {
        String name;
        String manifest_file_version;
    }

    @Getter
    private List<ResultFile> result_files;
    @Getter
    private QueryMetadata query_metadata;
    @Getter
    private Author author;
}
```

------
#### [  Go  ]

```
// Read and parse manifest content

func getManifestFile(s3Svc *s3.S3, response map[string]string) Manifest {
    var manifestBuf = getObject(s3Svc, response["manifestFile"])
    var manifest Manifest
    json.Unmarshal(manifestBuf.Bytes(), &manifest)
    return manifest
}

func getObject(s3Svc *s3.S3, s3Uri string) *bytes.Buffer {
    u,_ := url.Parse(s3Uri)
    getObjectInput := &s3.GetObjectInput{
        Key:    aws.String(u.Path),
        Bucket: aws.String(u.Host),
    }
    getObjectOutput, err := s3Svc.GetObject(getObjectInput)
    if err != nil {
        fmt.Println("Error: %s\n", err.Error())
    }
    buf := new(bytes.Buffer)
    buf.ReadFrom(getObjectOutput.Body)
    return buf
}

// Unload's Manifest structure

type Manifest struct {
    Author interface{}
    Query_metadata map[string]any
    Result_files  []struct {
        File_metadata interface{}
        Url string
    }
}}
```

------
#### [  Python  ]

```
def __get_manifest_file(self, response):
    manifest = self.get_object(response['manifestFile']).read().decode('utf-8')
    parsed_manifest = json.loads(manifest)
    print("Manifest contents: \n%s" % parsed_manifest)

def get_object(self, uri):
    try:
        bucket, key = uri.replace("s3://", "").split("/", 1)
        s3_client = boto3.client('s3', region_name=<region>)
        response = s3_client.get_object(Bucket=bucket, Key=key)
        return response['Body']
    except Exception as err:
        print("Failed to get the object for URI:", uri)
        raise err
```

------
#### [  Node.js ]

```
// Read and parse manifest content

async getManifestFile(response) {
    let manifest;
    await this.getS3Object(response['manifestFile']).then(
        (data) => {
            manifest = JSON.parse(data);
        }
    );
    return manifest;
}

async getS3Object(uri) {
    const {bucketName, key} = this.getBucketAndKey(uri);
    const params = new GetObjectCommand({
        Bucket: bucketName,
        Key: key
    })
    const response = await this.s3Client.send(params);
    return await response.Body.transformToString();
}

getBucketAndKey(uri) {
    const [bucketName] = uri.replace("s3://", "").split("/", 1);
    const key = uri.replace("s3://", "").split('/').slice(1).join('/');
    return {bucketName, key};
}
```

------

## Leggi e analizza il contenuto dei metadati
<a name="code-samples.run-query-unload-parse-metadata"></a>

------
#### [  Java  ]

```
// Read and parse metadata content
public UnloadMetadata getUnloadMetadata(UnloadResponse unloadResponse) throws IOException {
   AmazonS3URI s3URI = new AmazonS3URI(unloadResponse.getMetadataFile());
   S3Object s3Object = s3Client.getObject(s3URI.getBucket(), s3URI.getKey());
    String metadataFileContent = new String(IOUtils.toByteArray(s3Object.getObjectContent()), StandardCharsets.UTF_8);
    final Gson gson = new GsonBuilder()
            .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
            .create();
    return gson.fromJson(metadataFileContent, UnloadMetadata.class);
}

class UnloadMetadata {
    @JsonProperty("ColumnInfo")
    List<ColumnInfo> columnInfo;
    @JsonProperty("Author")
    Author author;

    @Data
    public class Author {
        @JsonProperty("Name")
        String name;
        @JsonProperty("MetadataFileVersion")
        String metadataFileVersion;
    }
}
```

------
#### [  Java v2  ]

```
// Read and parse metadata content

public UnloadMetadata getUnloadMetadata(UnloadResponse unloadResponse) throws URISyntaxException {
   // Space needs to encoded to use S3 parseUri function
    S3Uri s3Uri = s3Utilities.parseUri(URI.create(unloadResponse.getMetadataFile().replace(" ", "%20")));
    ResponseBytes<GetObjectResponse> objectBytes = s3Client.getObjectAsBytes(GetObjectRequest.builder()
            .bucket(s3Uri.bucket().orElseThrow(() -> new URISyntaxException(unloadResponse.getMetadataFile(), "Invalid S3 URI")))
            .key(s3Uri.key().orElseThrow(() -> new URISyntaxException(unloadResponse.getMetadataFile(), "Invalid S3 URI")))
            .build());
    String metadataFileContent = new String(objectBytes.asByteArray(), StandardCharsets.UTF_8);
    final Gson gson = new GsonBuilder()
            .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
            .create();
    return gson.fromJson(metadataFileContent, UnloadMetadata.class);
}

class UnloadMetadata {
    @JsonProperty("ColumnInfo")
    List<ColumnInfo> columnInfo;
    @JsonProperty("Author")
    Author author;

    @Data
    public class Author {
        @JsonProperty("Name")
        String name;
        @JsonProperty("MetadataFileVersion")
        String metadataFileVersion;
    }
}
```

------
#### [  Go  ]

```
// Read and parse metadata content

func getMetadataFile(s3Svc *s3.S3, response map[string]string) Metadata {
    var metadataBuf = getObject(s3Svc, response["metadataFile"])
    var metadata Metadata
    json.Unmarshal(metadataBuf.Bytes(), &metadata)
    return metadata
}

func getObject(s3Svc *s3.S3, s3Uri string) *bytes.Buffer {
    u,_ := url.Parse(s3Uri)
    getObjectInput := &s3.GetObjectInput{
        Key:    aws.String(u.Path),
        Bucket: aws.String(u.Host),
    }
    getObjectOutput, err := s3Svc.GetObject(getObjectInput)
    if err != nil {
        fmt.Println("Error: %s\n", err.Error())
    }
    buf := new(bytes.Buffer)
    buf.ReadFrom(getObjectOutput.Body)
    return buf
}

// Unload's Metadata structure

type Metadata struct {
    Author interface{}
    ColumnInfo []struct {
        Name string
        Type map[string]string
    }
}
```

------
#### [  Python  ]

```
def __get_metadata_file(self, response):
    metadata = self.get_object(response['metadataFile']).read().decode('utf-8')
    parsed_metadata = json.loads(metadata)
   print("Metadata contents: \n%s" % parsed_metadata)
    
def get_object(self, uri):
    try:
        bucket, key = uri.replace("s3://", "").split("/", 1)
        s3_client = boto3.client('s3', region_name=<region>)
        response = s3_client.get_object(Bucket=bucket, Key=key)
        return response['Body']
    except Exception as err:
        print("Failed to get the object for URI:", uri)
        raise err
```

------
#### [  Node.js ]

```
// Read and parse metadata content
async getMetadataFile(response) {
    let metadata;
    await this.getS3Object(response['metadataFile']).then(
        (data) => {
            metadata = JSON.parse(data);
        }
    );
    return metadata;
}

async getS3Object(uri) {
    const {bucketName, key} = this.getBucketAndKey(uri);
    const params = new GetObjectCommand({
        Bucket: bucketName,
        Key: key
    })
    const response = await this.s3Client.send(params);
    return await response.Body.transformToString();
}

getBucketAndKey(uri) {
    const [bucketName] = uri.replace("s3://", "").split("/", 1);
    const key = uri.replace("s3://", "").split('/').slice(1).join('/');
    return {bucketName, key};
}
```

------

# Annulla interrogazione
<a name="code-samples.cancel-query"></a>

È possibile utilizzare i seguenti frammenti di codice per annullare una query.

**Nota**  
Questi frammenti di codice si basano su applicazioni di esempio complete su. [GitHub](https://github.com/awslabs/amazon-timestream-tools/blob/master/sample_apps) Per ulteriori informazioni su come iniziare a utilizzare le applicazioni di esempio, consulta. [Applicazione di esempio](sample-apps.md)

------
#### [  Java  ]

```
    public void cancelQuery() {
        System.out.println("Starting query: " + SELECT_ALL_QUERY);
        QueryRequest queryRequest = new QueryRequest();
        queryRequest.setQueryString(SELECT_ALL_QUERY);
        QueryResult queryResult = queryClient.query(queryRequest);
 
        System.out.println("Cancelling the query: " + SELECT_ALL_QUERY);
        final CancelQueryRequest cancelQueryRequest = new CancelQueryRequest();
        cancelQueryRequest.setQueryId(queryResult.getQueryId());
        try {
            queryClient.cancelQuery(cancelQueryRequest);
            System.out.println("Query has been successfully cancelled");
        } catch (Exception e) {
            System.out.println("Could not cancel the query: " + SELECT_ALL_QUERY + " = " + e);
        }
    }
```

------
#### [  Java v2  ]

```
    public void cancelQuery() {
        System.out.println("Starting query: " + SELECT_ALL_QUERY);
        QueryRequest queryRequest = QueryRequest.builder().queryString(SELECT_ALL_QUERY).build();
        QueryResponse queryResponse = timestreamQueryClient.query(queryRequest);

        System.out.println("Cancelling the query: " + SELECT_ALL_QUERY);
        final CancelQueryRequest cancelQueryRequest = CancelQueryRequest.builder()
                .queryId(queryResponse.queryId()).build();
        try {
            timestreamQueryClient.cancelQuery(cancelQueryRequest);
            System.out.println("Query has been successfully cancelled");
        } catch (Exception e) {
            System.out.println("Could not cancel the query: " + SELECT_ALL_QUERY + " = " + e);
        }
    }
```

------
#### [  Go  ]

```
cancelQueryInput := &timestreamquery.CancelQueryInput{
      QueryId: aws.String(*queryOutput.QueryId),
  }

  fmt.Println("Submitting cancellation for the query")
  fmt.Println(cancelQueryInput)

  // submit the query
  cancelQueryOutput, err := querySvc.CancelQuery(cancelQueryInput)

  if err != nil {
      fmt.Println("Error:")
      fmt.Println(err)
  } else {
    fmt.Println("Query has been cancelled successfully")
    fmt.Println(cancelQueryOutput)
  }
```

------
#### [  Python  ]

```
    def cancel_query(self):
        print("Starting query: " + self.SELECT_ALL)
        result = self.client.query(QueryString=self.SELECT_ALL)
        print("Cancelling query: " + self.SELECT_ALL)
        try:
            self.client.cancel_query(QueryId=result['QueryId'])
            print("Query has been successfully cancelled")
        except Exception as err:
            print("Cancelling query failed:", err)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza l' AWS SDK per JavaScript lo stile V2. Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/sample_apps/js) per l'applicazione su. GitHub

```
async function tryCancelQuery() { 
    const params = { 
        QueryString: SELECT_ALL_QUERY 
    }; 
    console.log(`Running query: ${SELECT_ALL_QUERY}`); 
  
    await queryClient.query(params).promise() 
        .then( 
            async (response) => { 
                await cancelQuery(response.QueryId); 
            }, 
            (err) => { 
                console.error("Error while executing select all query:", err); 
            }); 
} 
  
async function cancelQuery(queryId) { 
    const cancelParams = { 
        QueryId: queryId 
    }; 
    console.log(`Sending cancellation for query: ${SELECT_ALL_QUERY}`); 
    await queryClient.cancelQuery(cancelParams).promise() 
        .then( 
            (response) => { 
                console.log("Query has been cancelled successfully"); 
            }, 
            (err) => { 
                console.error("Error while cancelling select all:", err); 
            }); 
}
```

------
#### [  .NET  ]

```
        public async Task CancelQuery()
        {
            Console.WriteLine("Starting query: " + SELECT_ALL_QUERY);
            QueryRequest queryRequest = new QueryRequest();
            queryRequest.QueryString = SELECT_ALL_QUERY;
            QueryResponse queryResponse = await queryClient.QueryAsync(queryRequest);

            Console.WriteLine("Cancelling query: " + SELECT_ALL_QUERY);
            CancelQueryRequest cancelQueryRequest = new CancelQueryRequest();
            cancelQueryRequest.QueryId = queryResponse.QueryId;

            try
            {
                await queryClient.CancelQueryAsync(cancelQueryRequest);
                Console.WriteLine("Query has been successfully cancelled.");
            } catch(Exception e)
            {
                Console.WriteLine("Could not cancel the query: " + SELECT_ALL_QUERY + " = " + e);
            }
        }
```

------

# Crea attività di caricamento in batch
<a name="code-samples.create-batch-load"></a>

È possibile utilizzare i seguenti frammenti di codice per creare attività di caricamento in batch.

------
#### [  Java  ]

```
package com.example.tryit;

import java.util.Arrays;

import software.amazon.awssdk.services.timestreamwrite.model.CreateBatchLoadTaskRequest;
import software.amazon.awssdk.services.timestreamwrite.model.CreateBatchLoadTaskResponse;
import software.amazon.awssdk.services.timestreamwrite.model.DataModel;
import software.amazon.awssdk.services.timestreamwrite.model.DataModelConfiguration;
import software.amazon.awssdk.services.timestreamwrite.model.DataSourceConfiguration;
import software.amazon.awssdk.services.timestreamwrite.model.DataSourceS3Configuration;
import software.amazon.awssdk.services.timestreamwrite.model.DimensionMapping;
import software.amazon.awssdk.services.timestreamwrite.model.MultiMeasureAttributeMapping;
import software.amazon.awssdk.services.timestreamwrite.model.MultiMeasureMappings;
import software.amazon.awssdk.services.timestreamwrite.model.ReportConfiguration;
import software.amazon.awssdk.services.timestreamwrite.model.ReportS3Configuration;
import software.amazon.awssdk.services.timestreamwrite.model.ScalarMeasureValueType;
import software.amazon.awssdk.services.timestreamwrite.model.TimeUnit;
import software.amazon.awssdk.services.timestreamwrite.TimestreamWriteClient;

public class BatchLoadExample {
    public static final String DATABASE_NAME = <database name>;
    public static final String TABLE_NAME = <table name>;
    public static final String INPUT_BUCKET = <S3 location>;
    public static final String INPUT_OBJECT_KEY_PREFIX = <CSV filename>;
    public static final String REPORT_BUCKET = <S3 location>;
    public static final long HT_TTL_HOURS = 24L;
    public static final long CT_TTL_DAYS = 7L;

    TimestreamWriteClient amazonTimestreamWrite;

    public BatchLoadExample(TimestreamWriteClient client) {
        this.amazonTimestreamWrite = client;
    }

    public String createBatchLoadTask() {
        System.out.println("Creating batch load task");

        CreateBatchLoadTaskRequest request = CreateBatchLoadTaskRequest.builder()
                .dataModelConfiguration(DataModelConfiguration.builder()
                        .dataModel(DataModel.builder()
                                .timeColumn("timestamp")
                                .timeUnit(TimeUnit.SECONDS)
                                .dimensionMappings(Arrays.asList(
                                        DimensionMapping.builder()
                                                .sourceColumn("vehicle")
                                                .build(),
                                        DimensionMapping.builder()
                                                .sourceColumn("registration")
                                                .destinationColumn("license")
                                                .build()))
                                .multiMeasureMappings(MultiMeasureMappings.builder()
                                        .targetMultiMeasureName("mva_measure_name")
                                        .multiMeasureAttributeMappings(Arrays.asList(
                                                MultiMeasureAttributeMapping.builder()
                                                        .sourceColumn("wgt")
                                                        .targetMultiMeasureAttributeName("weight")
                                                        .measureValueType(ScalarMeasureValueType.DOUBLE)
                                                        .build(),
                                                MultiMeasureAttributeMapping.builder()
                                                        .sourceColumn("spd")
                                                        .targetMultiMeasureAttributeName("speed")
                                                        .measureValueType(ScalarMeasureValueType.DOUBLE)
                                                        .build(),
                                                MultiMeasureAttributeMapping.builder()
                                                        .sourceColumn("fuel")
                                                        .measureValueType(ScalarMeasureValueType.DOUBLE)
                                                        .build(),
                                                MultiMeasureAttributeMapping.builder()
                                                        .sourceColumn("miles")
                                                        .measureValueType(ScalarMeasureValueType.DOUBLE)
                                                        .build()))
                                        .build())
                                .build())
                        .build())
                .dataSourceConfiguration(DataSourceConfiguration.builder()
                        .dataSourceS3Configuration(
                                DataSourceS3Configuration.builder()
                                        .bucketName(INPUT_BUCKET)
                                        .objectKeyPrefix(INPUT_OBJECT_KEY_PREFIX)
                                        .build())
                        .dataFormat("CSV")                
                        .build())
                .reportConfiguration(ReportConfiguration.builder()
                        .reportS3Configuration(ReportS3Configuration.builder()
                                .bucketName(REPORT_BUCKET)
                                .build())
                        .build())
                .targetDatabaseName(DATABASE_NAME)
                .targetTableName(TABLE_NAME)
                .build();
        try {
            final CreateBatchLoadTaskResponse createBatchLoadTaskResponse = amazonTimestreamWrite.createBatchLoadTask(request);
            String taskId = createBatchLoadTaskResponse.taskId();
            System.out.println("Successfully created batch load task: " + taskId);
            return taskId;
        } catch (Exception e) {
            System.out.println("Failed to create batch load task: " + e);
            throw e;
        }
    }
}
```

------
#### [  Go  ]

```
package main

import (
	"fmt"
	"context"
	"log"
	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/service/timestreamwrite"
	"github.com/aws/aws-sdk-go-v2/service/timestreamwrite/types"
)

func main() {
	customResolver := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{})(aws.Endpoint, error) {
		if service == timestreamwrite.ServiceID &&  region == "us-west-2" {
		    return aws.Endpoint{
		        PartitionID:   "aws",
		        URL:           <URL>,
		        SigningRegion: "us-west-2",
		    }, nil
		}
		return aws.Endpoint{}, &  aws.EndpointNotFoundError{}
	})

	cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithEndpointResolverWithOptions(customResolver), config.WithRegion("us-west-2"))

	if err != nil {
  		log.Fatalf("failed to load configuration, %v", err)
	}

	client := timestreamwrite.NewFromConfig(cfg)

	response, err := client.CreateBatchLoadTask(context.TODO(), &  timestreamwrite.CreateBatchLoadTaskInput{
            TargetDatabaseName: aws.String("BatchLoadExampleDatabase"),
            TargetTableName: aws.String("BatchLoadExampleTable"),
          		RecordVersion: aws.Int64(1),
          		DataModelConfiguration: &  types.DataModelConfiguration{
                DataModel: &  types.DataModel{
                    TimeColumn: aws.String("timestamp"),
                    TimeUnit: types.TimeUnitMilliseconds,
                    DimensionMappings: []types.DimensionMapping{
                        {
                            SourceColumn: aws.String("registration"),
                            DestinationColumn: aws.String("license"),
                        },
                    },
                    MultiMeasureMappings: &  types.MultiMeasureMappings{
                        TargetMultiMeasureName: aws.String("mva_measure_name"),
                        MultiMeasureAttributeMappings: []types.MultiMeasureAttributeMapping{
                            {
                                SourceColumn: aws.String("wgt"),
                                TargetMultiMeasureAttributeName: aws.String("weight"),
                                MeasureValueType: types.ScalarMeasureValueTypeDouble,
                            },
                            {
                                SourceColumn: aws.String("spd"),
                                TargetMultiMeasureAttributeName: aws.String("speed"),
                                MeasureValueType: types.ScalarMeasureValueTypeDouble,
                            },
                            {
                                SourceColumn: aws.String("fuel_consumption"),
                                TargetMultiMeasureAttributeName: aws.String("fuel"),
                                MeasureValueType: types.ScalarMeasureValueTypeDouble,
                            },
                        },
                    },
                },
            },
          	DataSourceConfiguration: &  types.DataSourceConfiguration{
                DataSourceS3Configuration: &  types.DataSourceS3Configuration{
                    BucketName: aws.String("test-batch-load-west-2"),
                    ObjectKeyPrefix: aws.String("sample.csv"),
                },
               	DataFormat: types.BatchLoadDataFormatCsv,
            },
          	ReportConfiguration: & types.ReportConfiguration{
                ReportS3Configuration: & types.ReportS3Configuration{
                    BucketName: aws.String("test-batch-load-report-west-2"),
                    EncryptionOption: types.S3EncryptionOptionSseS3,
                },
            },
	})

	fmt.Println(aws.ToString(response.TaskId))
}
```

------
#### [  Python  ]

```
import boto3
from botocore.config import Config

INGEST_ENDPOINT = "<URL>"
REGION = "us-west-2"
HT_TTL_HOURS = 24
CT_TTL_DAYS = 7
DATABASE_NAME = "<database name>"
TABLE_NAME = "<table name>"
INPUT_BUCKET_NAME = "<S3 location>"
INPUT_OBJECT_KEY_PREFIX = "<CSV file name>"
REPORT_BUCKET_NAME = "<S3 location>"


def create_batch_load_task(client, database_name, table_name, input_bucket_name, input_object_key_prefix, report_bucket_name):
    try:
        result = client.create_batch_load_task(TargetDatabaseName=database_name, TargetTableName=table_name,
                                               DataModelConfiguration={"DataModel": {
                                                   "TimeColumn": "timestamp",
                                                   "TimeUnit": "SECONDS",
                                                   "DimensionMappings": [
                                                       {
                                                           "SourceColumn": "vehicle"
                                                       },
                                                       {
                                                           "SourceColumn": "registration",
                                                           "DestinationColumn": "license"
                                                       }
                                                   ],
                                                   "MultiMeasureMappings": {
                                                       "TargetMultiMeasureName": "metrics",
                                                       "MultiMeasureAttributeMappings": [
                                                           {
                                                               "SourceColumn": "wgt",
                                                               "MeasureValueType": "DOUBLE"
                                                           },
                                                           {
                                                               "SourceColumn": "spd",
                                                               "MeasureValueType": "DOUBLE"
                                                           },
                                                           {
                                                               "SourceColumn": "fuel_consumption",
                                                               "TargetMultiMeasureAttributeName": "fuel",
                                                               "MeasureValueType": "DOUBLE"
                                                           },
                                                           {
                                                               "SourceColumn": "miles",
                                                               "MeasureValueType": "DOUBLE"
                                                           }
                                                       ]}
                                               }
                                               },
                                               DataSourceConfiguration={
                                                   "DataSourceS3Configuration": {
                                                       "BucketName": input_bucket_name,
                                                       "ObjectKeyPrefix": input_object_key_prefix
                                                   },
                                                   "DataFormat": "CSV"
                                               },
                                               ReportConfiguration={
                                                   "ReportS3Configuration": {
                                                       "BucketName":  report_bucket_name,
                                                       "EncryptionOption": "SSE_S3"
                                                   }
                                               }
                                               )

        task_id = result["TaskId"]
        print("Successfully created batch load task: ", task_id)
        return task_id
    except Exception as err:
        print("Create batch load task job failed:", err)
        return None


if __name__ == '__main__':
    session = boto3.Session()

    write_client = session.client('timestream-write',
                                  endpoint_url=INGEST_ENDPOINT, region_name=REGION,
                                  config=Config(read_timeout=20, max_pool_connections=5000, retries={'max_attempts': 10}))

    task_id = create_batch_load_task(write_client, DATABASE_NAME, TABLE_NAME,
                                     INPUT_BUCKET_NAME, INPUT_OBJECT_KEY_PREFIX, REPORT_BUCKET_NAME)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza AWS SDK per la versione 3. JavaScript Per ulteriori informazioni su come installare il client e sull'utilizzo, consulta [Timestream Write](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/index.html) Client - SDK per v3. AWS JavaScript 

[Per i dettagli sull'API, consulta Class and. CreateBatchLoadCommand [CreateBatchLoadTask](https://docs.aws.amazon.com/timestream/latest/developerguide/API_CreateBatchLoadTask.html)](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/classes/createbatchloadtaskcommand.html)

```
import { TimestreamWriteClient, CreateBatchLoadTaskCommand } from "@aws-sdk/client-timestream-write";
const writeClient = new TimestreamWriteClient({ region: "us-west-2", endpoint: "https://gamma-ingest-cell3.timestream.us-west-2.amazonaws.com" });

const params = {
    TargetDatabaseName: "BatchLoadExampleDatabase",
    TargetTableName: "BatchLoadExampleTable",
	RecordVersion: 1,
	DataModelConfiguration: {
		DataModel: {
			TimeColumn: "timestamp",
            TimeUnit: "MILLISECONDS",
            DimensionMappings: [
                {
                    SourceColumn: "registration",
                    DestinationColumn: "license"
                }
            ],
            MultiMeasureMappings: {
                TargetMultiMeasureName: "mva_measure_name",
                MultiMeasureAttributeMappings: [
                    {
                        SourceColumn: "wgt",
                        TargetMultiMeasureAttributeName: "weight",
                        MeasureValueType: "DOUBLE"
                    },
                    {
                        SourceColumn: "spd",
                        TargetMultiMeasureAttributeName: "speed",
                        MeasureValueType: "DOUBLE"
                    },
                    {
                        SourceColumn: "fuel_consumption",
                        TargetMultiMeasureAttributeName: "fuel",
                        MeasureValueType: "DOUBLE"
                    }
                ]
            }
        }
    },
	DataSourceConfiguration: {
        DataSourceS3Configuration: {
            BucketName: "test-batch-load-west-2",
            ObjectKeyPrefix: "sample.csv"
        },
        DataFormat: "CSV"
    },
    ReportConfiguration: {
        ReportS3Configuration: {
            BucketName: "test-batch-load-report-west-2",
            EncryptionOption: "SSE_S3"
        }
    }
};

const command = new CreateBatchLoadTaskCommand(params);

try {
    const data = await writeClient.send(command);
    console.log(`Created batch load task ` + data.TaskId);
} catch (error) {
	console.log("Error creating table. ", error);
	throw error;
}
```

------
#### [  .NET  ]

```
using System;
using System.IO;
using System.Collections.Generic;
using Amazon.TimestreamWrite;
using Amazon.TimestreamWrite.Model;
using System.Threading.Tasks;

namespace TimestreamDotNetSample
{
    public class CreateBatchLoadTaskExample
    {
        public const string DATABASE_NAME = "<database name>";
        public const string TABLE_NAME = "<table name>";
        public const string INPUT_BUCKET = "<input bucket name>";
        public const string INPUT_OBJECT_KEY_PREFIX = "<CSV file name>";
        public const string REPORT_BUCKET = "<report bucket name>";
        public const long HT_TTL_HOURS = 24L;
        public const long CT_TTL_DAYS = 7L;
        private readonly AmazonTimestreamWriteClient writeClient;

        public CreateBatchLoadTaskExample(AmazonTimestreamWriteClient writeClient)
        {
            this.writeClient = writeClient;
        }

        public async Task CreateBatchLoadTask()
        {
            try
            {
                var createBatchLoadTaskRequest = new CreateBatchLoadTaskRequest
                {
                    DataModelConfiguration = new DataModelConfiguration
                    {
                        DataModel = new DataModel
                        {
                            TimeColumn = "timestamp",
                            TimeUnit = TimeUnit.SECONDS,
                            DimensionMappings = new List<DimensionMapping>()
                            {
                                new()
                                {
                                        SourceColumn = "vehicle"
                                },
                                new()
                                {
                                        SourceColumn = "registration",
                                        DestinationColumn = "license"
                                }
                            },
                            MultiMeasureMappings = new MultiMeasureMappings
                            {
                                TargetMultiMeasureName = "mva_measure_name",
                                MultiMeasureAttributeMappings = new List<MultiMeasureAttributeMapping>()
                                {
                                        new()
                                        {
                                                SourceColumn = "wgt",
                                                TargetMultiMeasureAttributeName = "weight",
                                                MeasureValueType = ScalarMeasureValueType.DOUBLE
                                        },
                                        new()
                                        {
                                                SourceColumn = "spd",
                                                TargetMultiMeasureAttributeName = "speed",
                                                MeasureValueType = ScalarMeasureValueType.DOUBLE
                                        },
                                        new()
                                        {
                                                SourceColumn = "fuel",
                                                TargetMultiMeasureAttributeName = "fuel",
                                                MeasureValueType = ScalarMeasureValueType.DOUBLE
                                        },
                                        new()
                                        {
                                                SourceColumn = "miles",
                                                TargetMultiMeasureAttributeName = "miles",
                                                MeasureValueType = ScalarMeasureValueType.DOUBLE
                                        }
                                }
                            }
                        }
                    },
                    DataSourceConfiguration = new DataSourceConfiguration
                    {
                        DataSourceS3Configuration = new DataSourceS3Configuration
                        {
                            BucketName = INPUT_BUCKET,
                            ObjectKeyPrefix = INPUT_OBJECT_KEY_PREFIX
                        },
                        DataFormat = "CSV"
                    },
                    ReportConfiguration = new ReportConfiguration
                    {
                        ReportS3Configuration = new ReportS3Configuration
                        {
                            BucketName = REPORT_BUCKET
                        }
                    },
                    TargetDatabaseName = DATABASE_NAME,
                    TargetTableName = TABLE_NAME
                };

                CreateBatchLoadTaskResponse response = await writeClient.CreateBatchLoadTaskAsync(createBatchLoadTaskRequest);
                Console.WriteLine($"Task created: " + response.TaskId);
            }
            catch (Exception e)
            {
                Console.WriteLine("Create batch load task failed:" + e.ToString());
            }
        }
    }
}
```

```
using Amazon.TimestreamWrite;
using Amazon.TimestreamWrite.Model;
using Amazon;
using Amazon.TimestreamQuery;
using System.Threading.Tasks;
using System;
using CommandLine;
static class Constants
{

}
namespace TimestreamDotNetSample
{
    class MainClass
    {
        public class Options
        {

        }
        public static void Main(string[] args)
        {
            Parser.Default.ParseArguments<Options>(args)
                .WithParsed<Options>(o => {
                    MainAsync().GetAwaiter().GetResult();
                });
        }

        static async Task MainAsync()
        {
            var writeClientConfig = new AmazonTimestreamWriteConfig
            {
                ServiceURL =  "<service URL>",
                Timeout = TimeSpan.FromSeconds(20),
                MaxErrorRetry = 10
            };
            
            var writeClient = new AmazonTimestreamWriteClient(writeClientConfig);
            var example = new CreateBatchLoadTaskExample(writeClient);
            await example.CreateBatchLoadTask();
        }
    }
}
```

------

# Descrizione dell'attività di caricamento in batch
<a name="code-samples.describe-batch-load"></a>

È possibile utilizzare i seguenti frammenti di codice per descrivere le attività di caricamento in batch.

------
#### [  Java  ]

```
    public void describeBatchLoadTask(String taskId) {
            final DescribeBatchLoadTaskResponse batchLoadTaskResponse = amazonTimestreamWrite
                            .describeBatchLoadTask(DescribeBatchLoadTaskRequest.builder()
                                            .taskId(taskId)
                                            .build());

            System.out.println("Task id: " + batchLoadTaskResponse.batchLoadTaskDescription().taskId());
            System.out.println("Status: " + batchLoadTaskResponse.batchLoadTaskDescription().taskStatusAsString());
            System.out.println("Records processed: "
                            + batchLoadTaskResponse.batchLoadTaskDescription().progressReport().recordsProcessed());
    }
```

------
#### [  Go  ]

```
package main

import (
	"fmt"
	"context"
	"log"
	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/service/timestreamwrite"
)

func main() {
	customResolver := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {
		if service == timestreamwrite.ServiceID && region == "us-west-2" {
		    return aws.Endpoint{
		        PartitionID:   "aws",
		        URL:           <URL>,
		        SigningRegion: "us-west-2",
		    }, nil
		}
		return aws.Endpoint{}, &aws.EndpointNotFoundError{}
	})

	cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithEndpointResolverWithOptions(customResolver), config.WithRegion("us-west-2"))
	
	if err != nil {
  		log.Fatalf("failed to load configuration, %v", err)
	}

	client := timestreamwrite.NewFromConfig(cfg)
	
	response, err := client.DescribeBatchLoadTask(context.TODO(), &timestreamwrite.DescribeBatchLoadTaskInput{
		TaskId: aws.String("<TaskId>"),
	})

	fmt.Println(aws.ToString(response.BatchLoadTaskDescription.TaskId))
}
```

------
#### [  Python  ]

```
import boto3
from botocore.config import Config

INGEST_ENDPOINT="<url>"
REGION="us-west-2"
HT_TTL_HOURS = 24
CT_TTL_DAYS = 7
TASK_ID = "<task id>"

def describe_batch_load_task(client, task_id):
    try:
        result = client.describe_batch_load_task(TaskId=task_id)
        print("Successfully described batch load task: ", result)
    except Exception as err:
        print("Describe batch load task job failed:", err)


if __name__ == '__main__':
    session = boto3.Session()

    write_client = session.client('timestream-write', \
        endpoint_url=INGEST_ENDPOINT, region_name=REGION, \
        config=Config(read_timeout=20, max_pool_connections = 5000, retries={'max_attempts': 10}))

    describe_batch_load_task(write_client, TASK_ID)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza AWS SDK per la versione 3. JavaScript Per ulteriori informazioni su come installare il client e sull'utilizzo, consulta [Timestream Write](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/index.html) Client - SDK per v3. AWS JavaScript 

[Per i dettagli sull'API, consulta Class and. DescribeBatchLoadCommand [DescribeBatchLoadTask](https://docs.aws.amazon.com/timestream/latest/developerguide/API_DescribeBatchLoadTask.html)](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/classes/describebatchloadtaskcommand.html)

```
import { TimestreamWriteClient, DescribeBatchLoadTaskCommand } from "@aws-sdk/client-timestream-write";
const writeClient = new TimestreamWriteClient({ region: "<region>", endpoint: "<endpoint>" });

const params = {
    TaskId: "<TaskId>"
};

const command = new DescribeBatchLoadTaskCommand(params);

try {
    const data = await writeClient.send(command);
    console.log(`Batch load task has id ` + data.BatchLoadTaskDescription.TaskId);
} catch (error) {
    if (error.code === 'ResourceNotFoundException') {
        console.log("Batch load task doesn't exist.");
    } else {
        console.log("Describe batch load task failed.", error);
        throw error;
    }
}
```

------
#### [  .NET  ]

```
using System;
using System.IO;
using System.Collections.Generic;
using Amazon.TimestreamWrite;
using Amazon.TimestreamWrite.Model;
using System.Threading.Tasks;

namespace TimestreamDotNetSample
{
    public class DescribeBatchLoadTaskExample
    {
        private readonly AmazonTimestreamWriteClient writeClient;

        public DescribeBatchLoadTaskExample(AmazonTimestreamWriteClient writeClient)
        {
            this.writeClient = writeClient;
        }

        public async Task DescribeBatchLoadTask(String taskId)
        {
            try
            {
                var describeBatchLoadTaskRequest = new DescribeBatchLoadTaskRequest
                {
                    TaskId = taskId
                };
                DescribeBatchLoadTaskResponse response = await writeClient.DescribeBatchLoadTaskAsync(describeBatchLoadTaskRequest);
                Console.WriteLine($"Task has id:{response.BatchLoadTaskDescription.TaskId}");
            }
            catch (ResourceNotFoundException)
            {
                Console.WriteLine("Batch load task does not exist.");
            }
            catch (Exception e)
            {
                Console.WriteLine("Describe batch load task failed:" + e.ToString());
            }
        }
    }
}
```

```
using Amazon.TimestreamWrite;
using Amazon.TimestreamWrite.Model;
using Amazon;
using Amazon.TimestreamQuery;
using System.Threading.Tasks;
using System;
using CommandLine;
static class Constants
{

}
namespace TimestreamDotNetSample
{
    class MainClass
    {
        public class Options
        {

        }
        public static void Main(string[] args)
        {
            Parser.Default.ParseArguments<Options>(args)
                .WithParsed<Options>(o => {
                    MainAsync().GetAwaiter().GetResult();
                });
        }

        static async Task MainAsync()
        {
            var writeClientConfig = new AmazonTimestreamWriteConfig
            {
                ServiceURL =  "<service URL>",
                Timeout = TimeSpan.FromSeconds(20),
                MaxErrorRetry = 10
            };
            
            var writeClient = new AmazonTimestreamWriteClient(writeClientConfig);
            var example = new DescribeBatchLoadTaskExample(writeClient);
            await example.DescribeBatchLoadTask("<batch load task id>");
        }
    }
}
```

------

# Elenca le attività di caricamento in batch
<a name="code-samples.list-batch-load-tasks"></a>

È possibile utilizzare i seguenti frammenti di codice per elencare le attività di caricamento in batch.

------
#### [  Java  ]

```
    public void listBatchLoadTasks() {
            final ListBatchLoadTasksResponse listBatchLoadTasksResponse = amazonTimestreamWrite
                            .listBatchLoadTasks(ListBatchLoadTasksRequest.builder()
                                            .maxResults(15)
                                            .build());

            for (BatchLoadTask batchLoadTask : listBatchLoadTasksResponse.batchLoadTasks()) {
                    System.out.println(batchLoadTask.taskId());
            }
    }
```

------
#### [  Go  ]

```
package main

import (
	"fmt"
	"context"
	"log"
	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/service/timestreamwrite"
)

func main() {
	customResolver := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {
		if service == timestreamwrite.ServiceID && region == "us-west-2" {
		    return aws.Endpoint{
		        PartitionID:   "aws",
		        URL:           <URL>,
		        SigningRegion: "us-west-2",
		    }, nil
		}
		return aws.Endpoint{}, &aws.EndpointNotFoundError{}
	})

	cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithEndpointResolverWithOptions(customResolver), config.WithRegion("us-west-2"))
	
	if err != nil {
  		log.Fatalf("failed to load configuration, %v", err)
	}

	client := timestreamwrite.NewFromConfig(cfg)
	listBatchLoadTasksMaxResult := int32(15)
	
	response, err := client.ListBatchLoadTasks(context.TODO(), &timestreamwrite.ListBatchLoadTasksInput{
		MaxResults: &listBatchLoadTasksMaxResult,
	})

	for i, task := range response.BatchLoadTasks {
		fmt.Println(i, aws.ToString(task.TaskId))
	}
}
```

------
#### [  Python  ]

```
import boto3
from botocore.config import Config

INGEST_ENDPOINT = "<url>"
REGION = "us-west-2"
HT_TTL_HOURS = 24
CT_TTL_DAYS = 7


def print_batch_load_tasks(batch_load_tasks):
    for batch_load_task in batch_load_tasks:
        print(batch_load_task['TaskId'])


def list_batch_load_tasks(client):
    print("\nListing batch load tasks")
    try:
        response = client.list_batch_load_tasks(MaxResults=10)
        print_batch_load_tasks(response['BatchLoadTasks'])
        next_token = response.get('NextToken', None)
        while next_token:
            response = client.list_batch_load_tasks(
                NextToken=next_token, MaxResults=10)
            print_batch_load_tasks(response['BatchLoadTasks'])
            next_token = response.get('NextToken', None)
    except Exception as err:
        print("List batch load tasks failed:", err)
        raise err


if __name__ == '__main__':
    session = boto3.Session()

    write_client = session.client('timestream-write',
                                  endpoint_url=INGEST_ENDPOINT, region_name=REGION,
                                  config=Config(read_timeout=20, max_pool_connections=5000, retries={'max_attempts': 10}))

    list_batch_load_tasks(write_client)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza AWS SDK per la versione 3. JavaScript Per ulteriori informazioni su come installare il client e sull'utilizzo, consulta [Timestream Write](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/index.html) Client - SDK per v3. AWS JavaScript 

[Per i dettagli sull'API, consulta Class and. DescribeBatchLoadCommand [DescribeBatchLoadTask](https://docs.aws.amazon.com/timestream/latest/developerguide/API_DescribeBatchLoadTask.html)](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/classes/listbatchloadtaskscommand.html)

```
import { TimestreamWriteClient, ListBatchLoadTasksCommand } from "@aws-sdk/client-timestream-write";
const writeClient = new TimestreamWriteClient({ region: "<region>", endpoint: "<endpoint>" });

const params = {
    MaxResults: <15>
};

const command = new ListBatchLoadTasksCommand(params);

getBatchLoadTasksList(null);

async function getBatchLoadTasksList(nextToken) {
    if (nextToken) {
        params.NextToken = nextToken;
    }

    try {
        const data = await writeClient.send(command);

        data.BatchLoadTasks.forEach(function (task) {
            console.log(task.TaskId);
        });

        if (data.NextToken) {
            return getBatchLoadTasksList(data.NextToken);
        }
    } catch (error) {
        console.log("Error while listing batch load tasks", error);
    }
}
```

------
#### [  .NET  ]

```
using System;
using System.IO;
using System.Collections.Generic;
using Amazon.TimestreamWrite;
using Amazon.TimestreamWrite.Model;
using System.Threading.Tasks;

namespace TimestreamDotNetSample
{
    public class ListBatchLoadTasksExample
    {
        private readonly AmazonTimestreamWriteClient writeClient;

        public ListBatchLoadTasksExample(AmazonTimestreamWriteClient writeClient)
        {
            this.writeClient = writeClient;
        }

        public async Task ListBatchLoadTasks()
        {
            Console.WriteLine("Listing batch load tasks");

            try
            {
                var listBatchLoadTasksRequest = new ListBatchLoadTasksRequest
                {
                    MaxResults = 15
                };

                ListBatchLoadTasksResponse response = await writeClient.ListBatchLoadTasksAsync(listBatchLoadTasksRequest);

                PrintBatchLoadTasks(response.BatchLoadTasks);
                var nextToken = response.NextToken;

                while (nextToken != null)
                {
                    listBatchLoadTasksRequest.NextToken = nextToken;
                    response = await writeClient.ListBatchLoadTasksAsync(listBatchLoadTasksRequest);
                    PrintBatchLoadTasks(response.BatchLoadTasks);
                    nextToken = response.NextToken;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("List batch load tasks failed:" + e.ToString());
            }
        }

        private void PrintBatchLoadTasks(List<BatchLoadTask> tasks)
        {
            foreach (BatchLoadTask task in tasks)
                Console.WriteLine($"Task:{task.TaskId}");
        }
    }
}
```

```
using Amazon.TimestreamWrite;
using Amazon.TimestreamWrite.Model;
using Amazon;
using Amazon.TimestreamQuery;
using System.Threading.Tasks;
using System;
using CommandLine;
static class Constants
{

}
namespace TimestreamDotNetSample
{
    class MainClass
    {
        public class Options
        {

        }
        public static void Main(string[] args)
        {
            Parser.Default.ParseArguments<Options>(args)
                .WithParsed<Options>(o => {
                    MainAsync().GetAwaiter().GetResult();
                });
        }

        static async Task MainAsync()
        {
            var writeClientConfig = new AmazonTimestreamWriteConfig
            {
                ServiceURL =  "<service URL>",
                Timeout = TimeSpan.FromSeconds(20),
                MaxErrorRetry = 10
            };
            
            var writeClient = new AmazonTimestreamWriteClient(writeClientConfig);
            var example = new ListBatchLoadTasksExample(writeClient);
            await example.ListBatchLoadTasks();
        }
    }
}
```

------

# Riprendi l'operazione di caricamento in batch
<a name="code-samples.resume-batch-load-task"></a>

È possibile utilizzare i seguenti frammenti di codice per riprendere le attività di caricamento in batch.

------
#### [  Java  ]

```
    public void resumeBatchLoadTask(String taskId) {
            try {
                    amazonTimestreamWrite
                                    .resumeBatchLoadTask(ResumeBatchLoadTaskRequest.builder()
                                                    .taskId(taskId)
                                                    .build());

                    System.out.println("Successfully resumed batch load task.");
            } catch (ValidationException validationException) {
                    System.out.println(validationException.getMessage());
            }
    }
```

------
#### [  Go  ]

```
package main

import (
	"fmt"
	"context"
	"log"
	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/service/timestreamwrite"
)

func main() {
	customResolver := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {
		if service == timestreamwrite.ServiceID && region == "us-west-2" {
		    return aws.Endpoint{
		        PartitionID:   "aws",
		        URL:           <URL>,
		        SigningRegion: "us-west-2",
		    }, nil
		}
		return aws.Endpoint{}, &aws.EndpointNotFoundError{}
	})

	cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithEndpointResolverWithOptions(customResolver), config.WithRegion("us-west-2"))
	
	if err != nil {
  		log.Fatalf("failed to load configuration, %v", err)
	}

	client := timestreamwrite.NewFromConfig(cfg)
	
	response, err := client.ResumeBatchLoadTask(context.TODO(), &timestreamwrite.ResumeBatchLoadTaskInput{
		TaskId: aws.String("TaskId"),
	})

	if err != nil {
		fmt.Println("Error:")
		fmt.Println(err)
	} else {
		fmt.Println("Resume batch load task is successful")
		fmt.Println(response)
	}
}
```

------
#### [  Python  ]

```
import boto3
from botocore.config import Config

INGEST_ENDPOINT="<url>"
REGION="us-west-2"
HT_TTL_HOURS = 24
CT_TTL_DAYS = 7
TASK_ID = "<TaskId>"

def resume_batch_load_task(client, task_id):
    try:
        result = client.resume_batch_load_task(TaskId=task_id)
        print("Successfully resumed batch load task: ", result)
    except Exception as err:
        print("Resume batch load task failed:", err)


if __name__ == '__main__':
    session = boto3.Session()

    write_client = session.client('timestream-write', \
        endpoint_url=INGEST_ENDPOINT, region_name=REGION, \
        config=Config(read_timeout=20, max_pool_connections = 5000, retries={'max_attempts': 10}))

    resume_batch_load_task(write_client, TASK_ID)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza SDK per la versione 3. AWS JavaScript Per ulteriori informazioni su come installare il client e sull'utilizzo, consulta [Timestream Write](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/index.html) Client - SDK per v3. AWS JavaScript 

[Per i dettagli sull'API, consulta Class and. CreateBatchLoadCommand [CreateBatchLoadTask](https://docs.aws.amazon.com/timestream/latest/developerguide/API_CreateBatchLoadTask.html)](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/classes/describebatchloadtaskcommand.html)

```
import { TimestreamWriteClient, ResumeBatchLoadTaskCommand } from "@aws-sdk/client-timestream-write";
const writeClient = new TimestreamWriteClient({ region: "<region>", endpoint: "<endpoint>" });

const params = {
    TaskId: "<TaskId>"
};

const command = new ResumeBatchLoadTaskCommand(params);

try {
    const data = await writeClient.send(command);
    console.log("Resumed batch load task"); 
} catch (error) {
    console.log("Resume batch load task failed.", error);
	throw error; 
}
```

------
#### [  .NET  ]

```
using System;
using System.IO;
using System.Collections.Generic;
using Amazon.TimestreamWrite;
using Amazon.TimestreamWrite.Model;
using System.Threading.Tasks;

namespace TimestreamDotNetSample
{
    public class ResumeBatchLoadTaskExample
    {
        private readonly AmazonTimestreamWriteClient writeClient;

        public ResumeBatchLoadTaskExample(AmazonTimestreamWriteClient writeClient)
        {
            this.writeClient = writeClient;
        }

        public async Task ResumeBatchLoadTask(String taskId)
        {
            try
            {
                var resumeBatchLoadTaskRequest = new ResumeBatchLoadTaskRequest
                {
                    TaskId = taskId
                };
                ResumeBatchLoadTaskResponse response = await writeClient.ResumeBatchLoadTaskAsync(resumeBatchLoadTaskRequest);
                Console.WriteLine("Successfully resumed batch load task.");
            }
            catch (ResourceNotFoundException)
            {
                Console.WriteLine("Batch load task does not exist.");
            }
            catch (Exception e)
            {
                Console.WriteLine("Resume batch load task failed: " + e.ToString());
            }
        }
    }
}
```

------

# Crea una query pianificata
<a name="code-samples.create-scheduledquery"></a>

È possibile utilizzare i seguenti frammenti di codice per creare un'interrogazione pianificata con mappatura multipisura.

------
#### [  Java  ]

```
public static String DATABASE_NAME = "devops_sample_application";
public static String TABLE_NAME = "host_metrics_sample_application";
public static String HOSTNAME = "host-24Gju";
public static String SQ_NAME = "daily-sample";
public static String SCHEDULE_EXPRESSION = "cron(0/2 * * * ? *)";

// Find the average, p90, p95, and p99 CPU utilization for a specific EC2 host over the past 2 hours.
public static String QUERY = "SELECT region, az, hostname, BIN(time, 15s) AS binned_timestamp, " +
"ROUND(AVG(cpu_utilization), 2) AS avg_cpu_utilization, " +
"ROUND(APPROX_PERCENTILE(cpu_utilization, 0.9), 2) AS p90_cpu_utilization, " +
"ROUND(APPROX_PERCENTILE(cpu_utilization, 0.95), 2) AS p95_cpu_utilization, " +
"ROUND(APPROX_PERCENTILE(cpu_utilization, 0.99), 2) AS p99_cpu_utilization " +
"FROM " +  DATABASE_NAME + "." +  TABLE_NAME + " " +
"WHERE measure_name = 'metrics' " +
"AND hostname = '" + HOSTNAME + "' " +
"AND time > ago(2h) " +
"GROUP BY region, hostname, az, BIN(time, 15s) " +
"ORDER BY binned_timestamp ASC " +
"LIMIT 5";


public String createScheduledQuery(String topic_arn, 
    String role_arn, 
    String database_name, 
    String table_name) {
    System.out.println("Creating Scheduled Query");

    List<Pair<String, MeasureValueType>> sourceColToMeasureValueTypes = Arrays.asList(
        Pair.of("avg_cpu_utilization", DOUBLE),
        Pair.of("p90_cpu_utilization", DOUBLE),
        Pair.of("p95_cpu_utilization", DOUBLE),
        Pair.of("p99_cpu_utilization", DOUBLE));

    CreateScheduledQueryRequest createScheduledQueryRequest = new CreateScheduledQueryRequest()
            .withName(SQ_NAME)
            .withQueryString(QUERY)
            .withScheduleConfiguration(new ScheduleConfiguration()
                    .withScheduleExpression(SCHEDULE_EXPRESSION))
            .withNotificationConfiguration(new NotificationConfiguration()
                    .withSnsConfiguration(new SnsConfiguration()
                            .withTopicArn(topic_arn)))
            .withTargetConfiguration(new TargetConfiguration().withTimestreamConfiguration(new TimestreamConfiguration()
                    .withDatabaseName(database_name)
                    .withTableName(table_name)
                    .withTimeColumn("binned_timestamp")
                    .withDimensionMappings(Arrays.asList(
                            new DimensionMapping()
                                    .withName("region")
                                    .withDimensionValueType("VARCHAR"),
                            new DimensionMapping()
                                    .withName("az")
                                    .withDimensionValueType("VARCHAR"),
                            new DimensionMapping()
                                    .withName("hostname")
                                    .withDimensionValueType("VARCHAR")
                    ))
                    .withMultiMeasureMappings(new MultiMeasureMappings()
                        .withTargetMultiMeasureName("multi-metrics")
                        .withMultiMeasureAttributeMappings(
                            sourceColToMeasureValueTypes.stream()
                            .map(pair -> new MultiMeasureAttributeMapping()
                                .withMeasureValueType(pair.getValue().name())
                                .withSourceColumn(pair.getKey()))
                            .collect(Collectors.toList())))))
            .withErrorReportConfiguration(new ErrorReportConfiguration()
                    .withS3Configuration(new S3Configuration()
                        .withBucketName(timestreamDependencyHelper.getS3ErrorReportBucketName())))
            .withScheduledQueryExecutionRoleArn(role_arn);

    try {
        final CreateScheduledQueryResult createScheduledQueryResult = queryClient.createScheduledQuery(createScheduledQueryRequest);
        final String scheduledQueryArn = createScheduledQueryResult.getArn();
        System.out.println("Successfully created scheduled query : " + scheduledQueryArn);
        return scheduledQueryArn;
    }
    catch (Exception e) {
        System.out.println("Scheduled Query creation failed: " + e);
        throw e;
    }
}
```

------
#### [  Java v2  ]

```
public static String DATABASE_NAME = "testJavaV2DB";
public static String TABLE_NAME = "testJavaV2Table";
public static String HOSTNAME = "host-24Gju";
public static String SQ_NAME = "daily-sample";
public static String SCHEDULE_EXPRESSION = "cron(0/2 * * * ? *)";

// Find the average, p90, p95, and p99 CPU utilization for a specific EC2 host over the past 2 hours.
public static String VALID_QUERY = "SELECT region, az, hostname, BIN(time, 15s) AS binned_timestamp, " +
"ROUND(AVG(cpu_utilization), 2) AS avg_cpu_utilization, " +
"ROUND(APPROX_PERCENTILE(cpu_utilization, 0.9), 2) AS p90_cpu_utilization, " +
"ROUND(APPROX_PERCENTILE(cpu_utilization, 0.95), 2) AS p95_cpu_utilization, " +
"ROUND(APPROX_PERCENTILE(cpu_utilization, 0.99), 2) AS p99_cpu_utilization " +
"FROM " +  DATABASE_NAME + "." +  TABLE_NAME + " " +
"WHERE measure_name = 'metrics' " +
"AND hostname = '" + HOSTNAME + "' " +
"AND time > ago(2h) " +
"GROUP BY region, hostname, az, BIN(time, 15s) " +
"ORDER BY binned_timestamp ASC " +
"LIMIT 5";


private String createScheduledQueryHelper(String topicArn, String roleArn,
        String s3ErrorReportBucketName, String query, 
        TargetConfiguration targetConfiguration) {
    System.out.println("Creating Scheduled Query");

    CreateScheduledQueryRequest createScheduledQueryRequest = CreateScheduledQueryRequest.builder()
            .name(SQ_NAME)
            .queryString(query)
            .scheduleConfiguration(ScheduleConfiguration.builder()
                    .scheduleExpression(SCHEDULE_EXPRESSION)
                    .build())
            .notificationConfiguration(NotificationConfiguration.builder()
                    .snsConfiguration(SnsConfiguration.builder()
                            .topicArn(topicArn)
                            .build())
                    .build())
            .targetConfiguration(targetConfiguration)
            .errorReportConfiguration(ErrorReportConfiguration.builder()
                    .s3Configuration(S3Configuration.builder()
                            .bucketName(s3ErrorReportBucketName)
                            .objectKeyPrefix(SCHEDULED_QUERY_EXAMPLE)
                            .build())
                    .build())
            .scheduledQueryExecutionRoleArn(roleArn)
            .build();

    try {
        final CreateScheduledQueryResponse response = queryClient.createScheduledQuery(createScheduledQueryRequest);
        final String scheduledQueryArn = response.arn();
        System.out.println("Successfully created scheduled query : " + scheduledQueryArn);
        return scheduledQueryArn;
    }
    catch (Exception e) {
        System.out.println("Scheduled Query creation failed: " + e);
        throw e;
    }
}

public String createScheduledQuery(String topicArn, String roleArn,
        String databaseName, String tableName, String s3ErrorReportBucketName) {
    List<Pair<String, MeasureValueType>> sourceColToMeasureValueTypes = Arrays.asList(
            Pair.of("avg_cpu_utilization", DOUBLE),
            Pair.of("p90_cpu_utilization", DOUBLE),
            Pair.of("p95_cpu_utilization", DOUBLE),
            Pair.of("p99_cpu_utilization", DOUBLE));

    TargetConfiguration targetConfiguration = TargetConfiguration.builder()
            .timestreamConfiguration(TimestreamConfiguration.builder()
            .databaseName(databaseName)
            .tableName(tableName)
            .timeColumn("binned_timestamp")
            .dimensionMappings(Arrays.asList(
                    DimensionMapping.builder()
                            .name("region")
                            .dimensionValueType("VARCHAR")
                            .build(),
                    DimensionMapping.builder()
                            .name("az")
                            .dimensionValueType("VARCHAR")
                            .build(),
                    DimensionMapping.builder()
                            .name("hostname")
                            .dimensionValueType("VARCHAR")
                            .build()
            ))
            .multiMeasureMappings(MultiMeasureMappings.builder()
                    .targetMultiMeasureName("multi-metrics")
                    .multiMeasureAttributeMappings(
                            sourceColToMeasureValueTypes.stream()
                                    .map(pair -> MultiMeasureAttributeMapping.builder()
                                            .measureValueType(pair.getValue().name())
                                            .sourceColumn(pair.getKey())
                                            .build())
                                    .collect(Collectors.toList()))
                    .build())
            .build())
            .build();

    return createScheduledQueryHelper(topicArn, roleArn, s3ErrorReportBucketName, VALID_QUERY, targetConfiguration);
}}
```

------
#### [  Go  ]

```
SQ_ERROR_CONFIGURATION_S3_BUCKET_NAME_PREFIX = "sq-error-configuration-sample-s3-bucket-"
HOSTNAME            = "host-24Gju"
SQ_NAME             = "daily-sample"
SCHEDULE_EXPRESSION = "cron(0/1 * * * ? *)"
QUERY               = "SELECT region, az, hostname, BIN(time, 15s) AS binned_timestamp, " +
    "ROUND(AVG(cpu_utilization), 2) AS avg_cpu_utilization, " +
    "ROUND(APPROX_PERCENTILE(cpu_utilization, 0.9), 2) AS p90_cpu_utilization, " +
    "ROUND(APPROX_PERCENTILE(cpu_utilization, 0.95), 2) AS p95_cpu_utilization, " +
    "ROUND(APPROX_PERCENTILE(cpu_utilization, 0.99), 2) AS p99_cpu_utilization " +
    "FROM %s.%s " +
    "WHERE measure_name = 'metrics' " +
    "AND hostname = '" + HOSTNAME + "' " +
    "AND time > ago(2h) " +
    "GROUP BY region, hostname, az, BIN(time, 15s) " +
    "ORDER BY binned_timestamp ASC " +
    "LIMIT 5"
s3BucketName = utils.SQ_ERROR_CONFIGURATION_S3_BUCKET_NAME_PREFIX + generateRandomStringWithSize(5)

func generateRandomStringWithSize(size int) string {
     rand.Seed(time.Now().UnixNano())
     alphaNumericList := []rune("abcdefghijklmnopqrstuvwxyz0123456789")
     randomPrefix := make([]rune, size)
     for i := range randomPrefix {
         randomPrefix[i] = alphaNumericList[rand.Intn(len(alphaNumericList))]
     }
     return string(randomPrefix)
 }

func (timestreamBuilder TimestreamBuilder) createScheduledQuery(topicArn string, roleArn string, s3ErrorReportBucketName string,
query string, targetConfiguration timestreamquery.TargetConfiguration) (string, error) {

createScheduledQueryInput := &timestreamquery.CreateScheduledQueryInput{
    Name:        aws.String(SQ_NAME),
    QueryString: aws.String(query),
    ScheduleConfiguration: &timestreamquery.ScheduleConfiguration{
        ScheduleExpression: aws.String(SCHEDULE_EXPRESSION),
    },
    NotificationConfiguration: &timestreamquery.NotificationConfiguration{
        SnsConfiguration: &timestreamquery.SnsConfiguration{
            TopicArn: aws.String(topicArn),
        },
    },
    TargetConfiguration: &targetConfiguration,
    ErrorReportConfiguration: &timestreamquery.ErrorReportConfiguration{
        S3Configuration: &timestreamquery.S3Configuration{
            BucketName: aws.String(s3ErrorReportBucketName),
        },
    },
    ScheduledQueryExecutionRoleArn: aws.String(roleArn),
}

createScheduledQueryOutput, err := timestreamBuilder.QuerySvc.CreateScheduledQuery(createScheduledQueryInput)

if err != nil {
    fmt.Printf("Error: %s", err.Error())
} else {
    fmt.Println("createScheduledQueryResult is successful")
    return *createScheduledQueryOutput.Arn, nil
}
return "", err
}

 func (timestreamBuilder TimestreamBuilder) CreateValidScheduledQuery(topicArn string, roleArn string, s3ErrorReportBucketName string,
     sqDatabaseName string, sqTableName string, databaseName string, tableName string) (string, error) {

     targetConfiguration := timestreamquery.TargetConfiguration{
         TimestreamConfiguration: &timestreamquery.TimestreamConfiguration{
             DatabaseName: aws.String(sqDatabaseName),
             TableName:    aws.String(sqTableName),
             TimeColumn:   aws.String("binned_timestamp"),
             DimensionMappings: []*timestreamquery.DimensionMapping{
                 {
                     Name:               aws.String("region"),
                     DimensionValueType: aws.String("VARCHAR"),
                 },
                 {
                     Name:               aws.String("az"),
                     DimensionValueType: aws.String("VARCHAR"),
                 },
                 {
                     Name:               aws.String("hostname"),
                     DimensionValueType: aws.String("VARCHAR"),
                 },
             },
             MultiMeasureMappings: &timestreamquery.MultiMeasureMappings{
                 TargetMultiMeasureName: aws.String("multi-metrics"),
                 MultiMeasureAttributeMappings: []*timestreamquery.MultiMeasureAttributeMapping{
                     {
                         SourceColumn:     aws.String("avg_cpu_utilization"),
                         MeasureValueType: aws.String(timestreamquery.MeasureValueTypeDouble),
                     },
                     {
                         SourceColumn:     aws.String("p90_cpu_utilization"),
                         MeasureValueType: aws.String(timestreamquery.MeasureValueTypeDouble),
                     },
                     {
                         SourceColumn:     aws.String("p95_cpu_utilization"),
                         MeasureValueType: aws.String(timestreamquery.MeasureValueTypeDouble),
                     },
                     {
                         SourceColumn:     aws.String("p99_cpu_utilization"),
                         MeasureValueType: aws.String(timestreamquery.MeasureValueTypeDouble),
                     },
                 },
             },
         },
     }
     return timestreamBuilder.createScheduledQuery(topicArn, roleArn, s3ErrorReportBucketName,
         fmt.Sprintf(QUERY, databaseName, tableName), targetConfiguration)
 }
```

------
#### [  Python  ]

```
HOSTNAME = "host-24Gju"
SQ_NAME = "daily-sample"
ERROR_BUCKET_NAME = "scheduledquerysamplerrorbucket" + ''.join([choice(ascii_lowercase) for _ in range(5)])
QUERY = \
    "SELECT region, az, hostname, BIN(time, 15s) AS binned_timestamp, " \
    "    ROUND(AVG(cpu_utilization), 2) AS avg_cpu_utilization, " \
    "    ROUND(APPROX_PERCENTILE(cpu_utilization, 0.9), 2) AS p90_cpu_utilization, " \
    "    ROUND(APPROX_PERCENTILE(cpu_utilization, 0.95), 2) AS p95_cpu_utilization, " \
    "    ROUND(APPROX_PERCENTILE(cpu_utilization, 0.99), 2) AS p99_cpu_utilization " \
    "FROM " + database_name + "." + table_name + " " \
    "WHERE measure_name = 'metrics' " \
    "AND hostname = '" + self.HOSTNAME + "' " \
    "AND time > ago(2h) " \
    "GROUP BY region, hostname, az, BIN(time, 15s) " \
    "ORDER BY binned_timestamp ASC " \
    "LIMIT 5"

def create_scheduled_query_helper(self, topic_arn, role_arn, query, target_configuration):
    print("\nCreating Scheduled Query")
    schedule_configuration = {
        'ScheduleExpression': 'cron(0/2 * * * ? *)'
    }
    notification_configuration = {
        'SnsConfiguration': {
            'TopicArn': topic_arn
        }
    }
    error_report_configuration = {
        'S3Configuration': {
            'BucketName': ERROR_BUCKET_NAME
        }
    }

    try:
        create_scheduled_query_response = \
            query_client.create_scheduled_query(Name=self.SQ_NAME,
                 QueryString=query,
                 ScheduleConfiguration=schedule_configuration,
                 NotificationConfiguration=notification_configuration,
                 TargetConfiguration=target_configuration,
                 ScheduledQueryExecutionRoleArn=role_arn,
                 ErrorReportConfiguration=error_report_configuration
                 )
        print("Successfully created scheduled query : ", create_scheduled_query_response['Arn'])
        return create_scheduled_query_response['Arn']
    except Exception as err:
        print("Scheduled Query creation failed:", err)
        raise err

def create_valid_scheduled_query(self, topic_arn, role_arn):
    target_configuration = {
        'TimestreamConfiguration': {
            'DatabaseName': self.sq_database_name,
            'TableName': self.sq_table_name,
            'TimeColumn': 'binned_timestamp',
            'DimensionMappings': [
                {'Name': 'region', 'DimensionValueType': 'VARCHAR'},
                {'Name': 'az', 'DimensionValueType': 'VARCHAR'},
                {'Name': 'hostname', 'DimensionValueType': 'VARCHAR'}
            ],
            'MultiMeasureMappings': {
                'TargetMultiMeasureName': 'target_name',
                'MultiMeasureAttributeMappings': [
                    {'SourceColumn': 'avg_cpu_utilization', 'MeasureValueType': 'DOUBLE',
                     'TargetMultiMeasureAttributeName': 'avg_cpu_utilization'},
                    {'SourceColumn': 'p90_cpu_utilization', 'MeasureValueType': 'DOUBLE',
                     'TargetMultiMeasureAttributeName': 'p90_cpu_utilization'},
                    {'SourceColumn': 'p95_cpu_utilization', 'MeasureValueType': 'DOUBLE',
                     'TargetMultiMeasureAttributeName': 'p95_cpu_utilization'},
                    {'SourceColumn': 'p99_cpu_utilization', 'MeasureValueType': 'DOUBLE',
                     'TargetMultiMeasureAttributeName': 'p99_cpu_utilization'},
                ]
            }
        }
    }

    return self.create_scheduled_query_helper(topic_arn, role_arn, QUERY, target_configuration)
```

------
#### [  Node.js  ]

Il seguente frammento utilizza l'SDK per lo stile V2. AWS JavaScript Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/sample_apps_reinvent2021/js/schedule-query-example.js) per l'applicazione su. GitHub

```
const DATABASE_NAME = 'devops_sample_application';
const TABLE_NAME = 'host_metrics_sample_application';
const SQ_DATABASE_NAME = 'sq_result_database';
const SQ_TABLE_NAME = 'sq_result_table';
const HOSTNAME = "host-24Gju";
const SQ_NAME = "daily-sample";
const SCHEDULE_EXPRESSION = "cron(0/1 * * * ? *)";

// Find the average, p90, p95, and p99 CPU utilization for a specific EC2 host over the past 2 hours.
const VALID_QUERY = "SELECT region, az, hostname, BIN(time, 15s) AS binned_timestamp, " +
    " ROUND(AVG(cpu_utilization), 2) AS avg_cpu_utilization, " +
    " ROUND(APPROX_PERCENTILE(cpu_utilization, 0.9), 2) AS p90_cpu_utilization, " +
    " ROUND(APPROX_PERCENTILE(cpu_utilization, 0.95), 2) AS p95_cpu_utilization, " +
    " ROUND(APPROX_PERCENTILE(cpu_utilization, 0.99), 2) AS p99_cpu_utilization " +
    "FROM " + DATABASE_NAME + "." + TABLE_NAME + " " +
    "WHERE measure_name = 'metrics' " +
    " AND hostname = '" + HOSTNAME + "' " +
    " AND time > ago(2h) " +
    "GROUP BY region, hostname, az, BIN(time, 15s) " +
    "ORDER BY binned_timestamp ASC " +
    "LIMIT 5";

async function createScheduledQuery(topicArn, roleArn, s3ErrorReportBucketName) {
    console.log("Creating Valid Scheduled Query");
    const DimensionMappingList = [{
            'Name': 'region',
            'DimensionValueType': 'VARCHAR'
        },
        {
            'Name': 'az',
            'DimensionValueType': 'VARCHAR'
        },
        {
            'Name': 'hostname',
            'DimensionValueType': 'VARCHAR'
        }
    ];

    const MultiMeasureMappings = {
        TargetMultiMeasureName: "multi-metrics",
        MultiMeasureAttributeMappings: [{
                'SourceColumn': 'avg_cpu_utilization',
                'MeasureValueType': 'DOUBLE'
            },
            {
                'SourceColumn': 'p90_cpu_utilization',
                'MeasureValueType': 'DOUBLE'
            },
            {
                'SourceColumn': 'p95_cpu_utilization',
                'MeasureValueType': 'DOUBLE'
            },
            {
                'SourceColumn': 'p99_cpu_utilization',
                'MeasureValueType': 'DOUBLE'
            },
        ]
    }

    const timestreamConfiguration = {
        DatabaseName: SQ_DATABASE_NAME,
        TableName: SQ_TABLE_NAME,
        TimeColumn: "binned_timestamp",
        DimensionMappings: DimensionMappingList,
        MultiMeasureMappings: MultiMeasureMappings
    }

    const createScheduledQueryRequest = {
        Name: SQ_NAME,
        QueryString: VALID_QUERY,
        ScheduleConfiguration: {
            ScheduleExpression: SCHEDULE_EXPRESSION
        },
        NotificationConfiguration: {
            SnsConfiguration: {
                TopicArn: topicArn
            }
        },
        TargetConfiguration: {
            TimestreamConfiguration: timestreamConfiguration
        },
        ScheduledQueryExecutionRoleArn: roleArn,
        ErrorReportConfiguration: {
            S3Configuration: {
                BucketName: s3ErrorReportBucketName
            }
        }
    };
    try {
        const data = await queryClient.createScheduledQuery(createScheduledQueryRequest).promise();
        console.log("Successfully created scheduled query: " + data.Arn);
        return data.Arn;
    } catch (err) {
        console.log("Scheduled Query creation failed: ", err);
        throw err;
    }
}
```

------
#### [  .NET  ]

```
public const string Hostname = "host-24Gju";
public const string SqName = "timestream-sample";
public const string SqDatabaseName = "sq_result_database";
public const string SqTableName = "sq_result_table";

public const string ErrorConfigurationS3BucketNamePrefix = "error-configuration-sample-s3-bucket-";
public const string ScheduleExpression = "cron(0/2 * * * ? *)";

// Find the average, p90, p95, and p99 CPU utilization for a specific EC2 host over the past 2 hours.
public const string ValidQuery = "SELECT region, az, hostname, BIN(time, 15s) AS binned_timestamp, " +
      "ROUND(AVG(cpu_utilization), 2) AS avg_cpu_utilization, " +
      "ROUND(APPROX_PERCENTILE(cpu_utilization, 0.9), 2) AS p90_cpu_utilization, " +
      "ROUND(APPROX_PERCENTILE(cpu_utilization, 0.95), 2) AS p95_cpu_utilization, " +
      "ROUND(APPROX_PERCENTILE(cpu_utilization, 0.99), 2) AS p99_cpu_utilization " +
      "FROM " + Constants.DATABASE_NAME + "." + Constants.TABLE_NAME + " " +
      "WHERE measure_name = 'metrics' " +
      "AND hostname = '" + Hostname + "' " +
      "AND time > ago(2h) " +
      "GROUP BY region, hostname, az, BIN(time, 15s) " +
      "ORDER BY binned_timestamp ASC " +
      "LIMIT 5";

private async Task<String> CreateValidScheduledQuery(string topicArn, string roleArn,
             string databaseName, string tableName, string s3ErrorReportBucketName)
 {
     List<MultiMeasureAttributeMapping> sourceColToMeasureValueTypes =
         new List<MultiMeasureAttributeMapping>()
         {
             new()
             {
                 SourceColumn = "avg_cpu_utilization",
                 MeasureValueType = MeasureValueType.DOUBLE.Value
             },
             new()
             {
                 SourceColumn = "p90_cpu_utilization",
                 MeasureValueType = MeasureValueType.DOUBLE.Value
             },
             new()
             {
                 SourceColumn = "p95_cpu_utilization",
                 MeasureValueType = MeasureValueType.DOUBLE.Value
             },
             new()
             {
                 SourceColumn = "p99_cpu_utilization",
                 MeasureValueType = MeasureValueType.DOUBLE.Value
             }
         };

     TargetConfiguration targetConfiguration = new TargetConfiguration()
     {
         TimestreamConfiguration = new TimestreamConfiguration()
         {
             DatabaseName = databaseName,
             TableName = tableName,
             TimeColumn = "binned_timestamp",
             DimensionMappings = new List<DimensionMapping>()
             {
                 new()
                 {
                     Name = "region",
                     DimensionValueType = "VARCHAR"
                 },
                 new()
                 {
                     Name = "az",
                     DimensionValueType = "VARCHAR"
                 },
                 new()
                 {
                     Name = "hostname",
                     DimensionValueType = "VARCHAR"
                 }
             },
             MultiMeasureMappings = new MultiMeasureMappings()
             {
                 TargetMultiMeasureName = "multi-metrics",
                 MultiMeasureAttributeMappings = sourceColToMeasureValueTypes
             }
         }
     };
     return await CreateScheduledQuery(topicArn, roleArn, s3ErrorReportBucketName,
         ScheduledQueryConstants.ValidQuery, targetConfiguration);
 }

private async Task<String> CreateScheduledQuery(string topicArn, string roleArn,
             string s3ErrorReportBucketName, string query, TargetConfiguration targetConfiguration)
 {
     try
     {
         Console.WriteLine("Creating Scheduled Query");
         CreateScheduledQueryResponse response = await _amazonTimestreamQuery.CreateScheduledQueryAsync(
             new CreateScheduledQueryRequest()
             {
                 Name = ScheduledQueryConstants.SqName,
                 QueryString = query,
                 ScheduleConfiguration = new ScheduleConfiguration()
                 {
                     ScheduleExpression = ScheduledQueryConstants.ScheduleExpression
                 },
                 NotificationConfiguration = new NotificationConfiguration()
                 {
                     SnsConfiguration = new SnsConfiguration()
                     {
                         TopicArn = topicArn
                     }
                 },
                 TargetConfiguration = targetConfiguration,
                 ErrorReportConfiguration = new ErrorReportConfiguration()
                 {
                     S3Configuration = new S3Configuration()
                     {
                         BucketName = s3ErrorReportBucketName
                     }
                 },
                 ScheduledQueryExecutionRoleArn = roleArn
             });
         Console.WriteLine($"Successfully created scheduled query : {response.Arn}");
         return response.Arn;
     }
     catch (Exception e)
     {
         Console.WriteLine($"Scheduled Query creation failed: {e}");
         throw;
     }
 }
```

------

# Elenca le query pianificate
<a name="code-samples.list-scheduledquery"></a>

È possibile utilizzare i seguenti frammenti di codice per elencare le query pianificate.

------
#### [  Java  ]

```
public void listScheduledQueries() {
    System.out.println("Listing Scheduled Query");
    try {
        String nextToken = null;
        List<String> scheduledQueries = new ArrayList<>();

        do {
            ListScheduledQueriesResult listScheduledQueriesResult =
                    queryClient.listScheduledQueries(new ListScheduledQueriesRequest()
                            .withNextToken(nextToken).withMaxResults(10));
            List<ScheduledQuery> scheduledQueryList = listScheduledQueriesResult.getScheduledQueries();

            printScheduledQuery(scheduledQueryList);
            nextToken = listScheduledQueriesResult.getNextToken();
        } while (nextToken != null);
    }
    catch (Exception e) {
        System.out.println("List Scheduled Query failed: " + e);
        throw e;
    }
}

public void printScheduledQuery(List<ScheduledQuery> scheduledQueryList) {
    for (ScheduledQuery scheduledQuery: scheduledQueryList) {
        System.out.println(scheduledQuery.getArn());
    }
}
```

------
#### [  Java v2  ]

```
public void listScheduledQueries() {
    System.out.println("Listing Scheduled Query");
    try {
        String nextToken = null;

        do {
            ListScheduledQueriesResponse listScheduledQueriesResult =
                    queryClient.listScheduledQueries(ListScheduledQueriesRequest.builder()
                            .nextToken(nextToken).maxResults(10)
                            .build());
            List<ScheduledQuery> scheduledQueryList = listScheduledQueriesResult.scheduledQueries();

            printScheduledQuery(scheduledQueryList);
            nextToken = listScheduledQueriesResult.nextToken();
        } while (nextToken != null);
    }
    catch (Exception e) {
        System.out.println("List Scheduled Query failed: " + e);
        throw e;
    }
}

public void printScheduledQuery(List<ScheduledQuery> scheduledQueryList) {
    for (ScheduledQuery scheduledQuery: scheduledQueryList) {
        System.out.println(scheduledQuery.arn());
    }
}
```

------
#### [  Go  ]

```
func (timestreamBuilder TimestreamBuilder) ListScheduledQueries() ([]*timestreamquery.ScheduledQuery, error) {
 
     var nextToken *string = nil
     var scheduledQueries []*timestreamquery.ScheduledQuery
     for ok := true; ok; ok = nextToken != nil {
         listScheduledQueriesInput := &timestreamquery.ListScheduledQueriesInput{
             MaxResults: aws.Int64(15),
         }
         if nextToken != nil {
             listScheduledQueriesInput.NextToken = aws.String(*nextToken)
         }
 
         listScheduledQueriesOutput, err := timestreamBuilder.QuerySvc.ListScheduledQueries(listScheduledQueriesInput)
         if err != nil {
             fmt.Printf("Error: %s", err.Error())
             return nil, err
         }
         scheduledQueries = append(scheduledQueries, listScheduledQueriesOutput.ScheduledQueries...)
         nextToken = listScheduledQueriesOutput.NextToken
     }
     return scheduledQueries, nil
 }
```

------
#### [  Python  ]

```
def list_scheduled_queries(self):
    print("\nListing Scheduled Queries")
    try:
        response = self.query_client.list_scheduled_queries(MaxResults=10)
        self.print_scheduled_queries(response['ScheduledQueries'])
        next_token = response.get('NextToken', None)
        while next_token:
            response = self.query_client.list_scheduled_queries(NextToken=next_token, MaxResults=10)
            self.print_scheduled_queries(response['ScheduledQueries'])
            next_token = response.get('NextToken', None)
    except Exception as err:
        print("List scheduled queries failed:", err)
        raise err

@staticmethod
def print_scheduled_queries(scheduled_queries):
    for scheduled_query in scheduled_queries:
        print(scheduled_query['Arn'])
```

------
#### [  Node.js  ]

Il seguente frammento utilizza l'SDK per lo stile V2 AWS . JavaScript Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/sample_apps_reinvent2021/js/schedule-query-example.js) per l'applicazione su. GitHub

```
async function listScheduledQueries() {
     console.log("Listing Scheduled Query");
     try {
         var nextToken = null;
         do {
             var params = {
                 MaxResults: 10,
                 NextToken: nextToken
             }
             var data = await queryClient.listScheduledQueries(params).promise();
             var scheduledQueryList = data.ScheduledQueries;
             printScheduledQuery(scheduledQueryList);
             nextToken = data.NextToken;
         }
         while (nextToken != null);
     }  catch (err) {
         console.log("List Scheduled Query failed: ", err);
         throw err;
     }
 }

 async function printScheduledQuery(scheduledQueryList) {
     scheduledQueryList.forEach(element => console.log(element.Arn));
 }
```

------
#### [  .NET  ]

```
private async Task ListScheduledQueries()
 {
     try
     {
         Console.WriteLine("Listing Scheduled Query");
         string nextToken;
         do
         {
             ListScheduledQueriesResponse response =
                 await _amazonTimestreamQuery.ListScheduledQueriesAsync(new ListScheduledQueriesRequest());
             foreach (var scheduledQuery in response.ScheduledQueries)
             {
                 Console.WriteLine($"{scheduledQuery.Arn}");
             }

             nextToken = response.NextToken;
         } while (nextToken != null);
     }
     catch (Exception e)
     {
         Console.WriteLine($"List Scheduled Query failed: {e}");
         throw;
     }
 }
```

------

# Descrivi una query pian
<a name="code-samples.describe-scheduledquery"></a>

È possibile utilizzare i seguenti frammenti di codice per descrivere una query pianificata.

------
#### [  Java  ]

```
public void describeScheduledQueries(String scheduledQueryArn) {
    System.out.println("Describing Scheduled Query");
    try {
        DescribeScheduledQueryResult describeScheduledQueryResult = queryClient.describeScheduledQuery(new DescribeScheduledQueryRequest().withScheduledQueryArn(scheduledQueryArn));
        System.out.println(describeScheduledQueryResult);
    }
    catch (ResourceNotFoundException e) {
        System.out.println("Scheduled Query doesn't exist");
        throw e;
    }
    catch (Exception e) {
        System.out.println("Describe Scheduled Query failed: " + e);
        throw e;
    }
}
```

------
#### [  Java v2  ]

```
public void describeScheduledQueries(String scheduledQueryArn) {
    System.out.println("Describing Scheduled Query");
    try {
        DescribeScheduledQueryResponse describeScheduledQueryResult =
                queryClient.describeScheduledQuery(DescribeScheduledQueryRequest.builder()
                        .scheduledQueryArn(scheduledQueryArn)
                        .build());
        System.out.println(describeScheduledQueryResult);
    }
    catch (ResourceNotFoundException e) {
        System.out.println("Scheduled Query doesn't exist");
        throw e;
    }
    catch (Exception e) {
        System.out.println("Describe Scheduled Query failed: " + e);
        throw e;
    }
}
```

------
#### [  Go  ]

```
func (timestreamBuilder TimestreamBuilder) DescribeScheduledQuery(scheduledQueryArn string) error {
 
     describeScheduledQueryInput := &timestreamquery.DescribeScheduledQueryInput{
         ScheduledQueryArn: aws.String(scheduledQueryArn),
     }
     describeScheduledQueryOutput, err := timestreamBuilder.QuerySvc.DescribeScheduledQuery(describeScheduledQueryInput)
 
     if err != nil {
         if aerr, ok := err.(awserr.Error); ok {
             switch aerr.Code() {
             case timestreamquery.ErrCodeResourceNotFoundException:
                 fmt.Println(timestreamquery.ErrCodeResourceNotFoundException, aerr.Error())
             default:
                 fmt.Printf("Error: %s", err.Error())
             }
         } else {
             fmt.Printf("Error: %s", aerr.Error())
         }
         return err
     } else {
         fmt.Println("DescribeScheduledQuery is successful, below is the output:")
         fmt.Println(describeScheduledQueryOutput.ScheduledQuery)
         return nil
     }
 }
```

------
#### [  Python  ]

```
def describe_scheduled_query(self, scheduled_query_arn):
    print("\nDescribing Scheduled Query")
    try:
        response = self.query_client.describe_scheduled_query(ScheduledQueryArn=scheduled_query_arn)
        if 'ScheduledQuery' in response:
            response = response['ScheduledQuery']
            for key in response:
                print("{} :{}".format(key, response[key]))
    except self.query_client.exceptions.ResourceNotFoundException as err:
        print("Scheduled Query doesn't exist")
        raise err
    except Exception as err:
        print("Scheduled Query describe failed:", err)
        raise err
```

------
#### [  Node.js  ]

Il seguente frammento utilizza l' AWS SDK per lo stile V2. JavaScript Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/sample_apps_reinvent2021/js/schedule-query-example.js) per l'applicazione su. GitHub

```
async function describeScheduledQuery(scheduledQueryArn) {
     console.log("Describing Scheduled Query");
     var params = {
         ScheduledQueryArn: scheduledQueryArn
     }
     try {
         const data = await queryClient.describeScheduledQuery(params).promise();
         console.log(data.ScheduledQuery);
     } catch (err) {
         console.log("Describe Scheduled Query failed: ", err);
         throw err;
     }
 }
```

------
#### [  .NET  ]

```
private async Task DescribeScheduledQuery(string scheduledQueryArn)
 {
     try
     {
         Console.WriteLine("Describing Scheduled Query");
         DescribeScheduledQueryResponse response = await _amazonTimestreamQuery.DescribeScheduledQueryAsync(
             new DescribeScheduledQueryRequest()
             {
                 ScheduledQueryArn = scheduledQueryArn
             });
         Console.WriteLine($"{JsonConvert.SerializeObject(response.ScheduledQuery)}");
     }
     catch (ResourceNotFoundException e)
     {
         Console.WriteLine($"Scheduled Query doesn't exist: {e}");
         throw;
     }
     catch (Exception e)
     {
         Console.WriteLine($"Describe Scheduled Query failed: {e}");
         throw;
     }
 }
```

------

# Esegui interrogazione pianificata
<a name="code-samples.execute-scheduledquery"></a>

È possibile utilizzare i seguenti frammenti di codice per eseguire una query pianificata.

------
#### [  Java  ]

```
public void executeScheduledQueries(String scheduledQueryArn, Date invocationTime) {
    System.out.println("Executing Scheduled Query");
    try {
        ExecuteScheduledQueryResult executeScheduledQueryResult = queryClient.executeScheduledQuery(new ExecuteScheduledQueryRequest()
                .withScheduledQueryArn(scheduledQueryArn)
                .withInvocationTime(invocationTime)
        );

    }
    catch (ResourceNotFoundException e) {
        System.out.println("Scheduled Query doesn't exist");
        throw e;
    }
    catch (Exception e) {
        System.out.println("Execution Scheduled Query failed: " + e);
        throw e;
    }
}
```

------
#### [  Java v2  ]

```
public void executeScheduledQuery(String scheduledQueryArn) {
    System.out.println("Executing Scheduled Query");
    try {
        ExecuteScheduledQueryResponse executeScheduledQueryResult = queryClient.executeScheduledQuery(ExecuteScheduledQueryRequest.builder()
                .scheduledQueryArn(scheduledQueryArn)
                .invocationTime(Instant.now())
                .build()
        );

        System.out.println("Execute ScheduledQuery response code: " + executeScheduledQueryResult.sdkHttpResponse().statusCode());

    }
    catch (ResourceNotFoundException e) {
        System.out.println("Scheduled Query doesn't exist");
        throw e;
    }
    catch (Exception e) {
        System.out.println("Execution Scheduled Query failed: " + e);
        throw e;
    }
}
```

------
#### [  Go  ]

```
func (timestreamBuilder TimestreamBuilder) ExecuteScheduledQuery(scheduledQueryArn string, invocationTime time.Time) error {
 
     executeScheduledQueryInput := &timestreamquery.ExecuteScheduledQueryInput{
         ScheduledQueryArn: aws.String(scheduledQueryArn),
         InvocationTime:    aws.Time(invocationTime),
     }
     executeScheduledQueryOutput, err := timestreamBuilder.QuerySvc.ExecuteScheduledQuery(executeScheduledQueryInput)
 
     if err != nil {
         if aerr, ok := err.(awserr.Error); ok {
             switch aerr.Code() {
             case timestreamquery.ErrCodeResourceNotFoundException:
                 fmt.Println(timestreamquery.ErrCodeResourceNotFoundException, aerr.Error())
             default:
                 fmt.Printf("Error: %s", aerr.Error())
             }
         } else {
             fmt.Printf("Error: %s", err.Error())
         }
         return err
     } else {
         fmt.Println("ExecuteScheduledQuery is successful, below is the output:")
         fmt.Println(executeScheduledQueryOutput.GoString())
         return nil
     }
 }
```

------
#### [  Python  ]

```
def execute_scheduled_query(self, scheduled_query_arn, invocation_time):
    print("\nExecuting Scheduled Query")
    try:
        self.query_client.execute_scheduled_query(ScheduledQueryArn=scheduled_query_arn, InvocationTime=invocation_time)
        print("Successfully started executing scheduled query")
    except self.query_client.exceptions.ResourceNotFoundException as err:
        print("Scheduled Query doesn't exist")
        raise err
    except Exception as err:
        print("Scheduled Query execution failed:", err)
        raise err
```

------
#### [  Node.js  ]

Il seguente frammento utilizza l' AWS SDK per lo stile V2. JavaScript Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/sample_apps_reinvent2021/js/schedule-query-example.js) per l'applicazione su. GitHub

```
async function executeScheduledQuery(scheduledQueryArn, invocationTime) {
     console.log("Executing Scheduled Query");
     var params = {
         ScheduledQueryArn: scheduledQueryArn,
         InvocationTime: invocationTime
     }
     try {
         await queryClient.executeScheduledQuery(params).promise();
     } catch (err) {
         console.log("Execute Scheduled Query failed: ", err);
         throw err;
     }
 }
```

------
#### [  .NET  ]

```
private async Task ExecuteScheduledQuery(string scheduledQueryArn, DateTime invocationTime)
 {
     try
     {
         Console.WriteLine("Running Scheduled Query");
         await _amazonTimestreamQuery.ExecuteScheduledQueryAsync(new ExecuteScheduledQueryRequest()
         {
             ScheduledQueryArn = scheduledQueryArn,
             InvocationTime = invocationTime
         });
         Console.WriteLine("Successfully started manual run of scheduled query");
     }
     catch (ResourceNotFoundException e)
     {
         Console.WriteLine($"Scheduled Query doesn't exist: {e}");
         throw;
     }
     catch (Exception e)
     {
         Console.WriteLine($"Execute Scheduled Query failed: {e}");
         throw;
     }
 }
```

------

# Aggiorna interrogazione pianificata
<a name="code-samples.update-scheduledquery"></a>

È possibile utilizzare i seguenti frammenti di codice per aggiornare una query pianificata.

------
#### [  Java  ]

```
public void updateScheduledQueries(String scheduledQueryArn) {
    System.out.println("Updating Scheduled Query");
    try {
        queryClient.updateScheduledQuery(new UpdateScheduledQueryRequest()
                .withScheduledQueryArn(scheduledQueryArn)
                .withState(ScheduledQueryState.DISABLED));
        System.out.println("Successfully update scheduled query state");
    }
    catch (ResourceNotFoundException e) {
        System.out.println("Scheduled Query doesn't exist");
        throw e;
    }
    catch (Exception e) {
        System.out.println("Execution Scheduled Query failed: " + e);
        throw e;
    }
}
```

------
#### [  Java v2  ]

```
public void updateScheduledQuery(String scheduledQueryArn, ScheduledQueryState state) {
    System.out.println("Updating Scheduled Query");
    try {
        queryClient.updateScheduledQuery(UpdateScheduledQueryRequest.builder()
                .scheduledQueryArn(scheduledQueryArn)
                .state(state)
                .build());
        System.out.println("Successfully update scheduled query state");
    }
    catch (ResourceNotFoundException e) {
        System.out.println("Scheduled Query doesn't exist");
        throw e;
    }
    catch (Exception e) {
        System.out.println("Execution Scheduled Query failed: " + e);
        throw e;
    }
}
```

------
#### [  Go  ]

```
func (timestreamBuilder TimestreamBuilder) UpdateScheduledQuery(scheduledQueryArn string) error {

     updateScheduledQueryInput := &timestreamquery.UpdateScheduledQueryInput{
         ScheduledQueryArn: aws.String(scheduledQueryArn),
         State:             aws.String(timestreamquery.ScheduledQueryStateDisabled),
     }
     _, err := timestreamBuilder.QuerySvc.UpdateScheduledQuery(updateScheduledQueryInput)

     if err != nil {
         if aerr, ok := err.(awserr.Error); ok {
             switch aerr.Code() {
             case timestreamquery.ErrCodeResourceNotFoundException:
                 fmt.Println(timestreamquery.ErrCodeResourceNotFoundException, aerr.Error())
             default:
                 fmt.Printf("Error: %s", aerr.Error())
             }
         } else {
             fmt.Printf("Error: %s", err.Error())
         }
         return err
     } else {
         fmt.Println("UpdateScheduledQuery is successful")
         return nil
     }
 }
```

------
#### [  Python  ]

```
def update_scheduled_query(self, scheduled_query_arn, state):
    print("\nUpdating Scheduled Query")
    try:
        self.query_client.update_scheduled_query(ScheduledQueryArn=scheduled_query_arn,
                                                 State=state)
        print("Successfully update scheduled query state to", state)
    except self.query_client.exceptions.ResourceNotFoundException as err:
        print("Scheduled Query doesn't exist")
        raise err
    except Exception as err:
        print("Scheduled Query deletion failed:", err)
        raise err
```

------
#### [  Node.js  ]

Il seguente frammento utilizza l' AWS SDK per lo stile V2. JavaScript Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/sample_apps_reinvent2021/js/schedule-query-example.js) per l'applicazione su. GitHub

```
async function updateScheduledQueries(scheduledQueryArn) {
     console.log("Updating Scheduled Query");
     var params = {
         ScheduledQueryArn: scheduledQueryArn,
         State: "DISABLED"
     }
     try {
         await queryClient.updateScheduledQuery(params).promise();
         console.log("Successfully update scheduled query state");
     } catch (err) {
         console.log("Update Scheduled Query failed: ", err);
         throw err;
     }
 }
```

------
#### [  .NET  ]

```
private async Task UpdateScheduledQuery(string scheduledQueryArn, ScheduledQueryState state)
 {
     try
     {
         Console.WriteLine("Updating Scheduled Query");
         await _amazonTimestreamQuery.UpdateScheduledQueryAsync(new UpdateScheduledQueryRequest()
         {
             ScheduledQueryArn = scheduledQueryArn,
             State = state
         });
         Console.WriteLine("Successfully update scheduled query state");
     }
     catch (ResourceNotFoundException e)
     {
         Console.WriteLine($"Scheduled Query doesn't exist: {e}");
         throw;
     }
     catch (Exception e)
     {
         Console.WriteLine($"Update Scheduled Query failed: {e}");
         throw;
     }
 }
```

------

# Eliminare una query pianificata
<a name="code-samples.delete-scheduledquery"></a>

È possibile utilizzare i seguenti frammenti di codice per eliminare una query pianificata.

------
#### [  Java  ]

```
public void deleteScheduledQuery(String scheduledQueryArn) {
    System.out.println("Deleting Scheduled Query");

    try {
        queryClient.deleteScheduledQuery(new DeleteScheduledQueryRequest().withScheduledQueryArn(scheduledQueryArn));
        System.out.println("Successfully deleted scheduled query");
    }
    catch (Exception e) {
        System.out.println("Scheduled Query deletion failed: " + e);
    }
}
```

------
#### [  Java v2  ]

```
public void deleteScheduledQuery(String scheduledQueryArn) {
    System.out.println("Deleting Scheduled Query");

    try {
        queryClient.deleteScheduledQuery(DeleteScheduledQueryRequest.builder()
                .scheduledQueryArn(scheduledQueryArn).build());
        System.out.println("Successfully deleted scheduled query");
    }
    catch (Exception e) {
        System.out.println("Scheduled Query deletion failed: " + e);
    }
}
```

------
#### [  Go  ]

```
func (timestreamBuilder TimestreamBuilder) DeleteScheduledQuery(scheduledQueryArn string) error {
 
     deleteScheduledQueryInput := &timestreamquery.DeleteScheduledQueryInput{
         ScheduledQueryArn: aws.String(scheduledQueryArn),
     }
     _, err := timestreamBuilder.QuerySvc.DeleteScheduledQuery(deleteScheduledQueryInput)
 
     if err != nil {
         fmt.Println("Error:")
         if aerr, ok := err.(awserr.Error); ok {
             switch aerr.Code() {
             case timestreamquery.ErrCodeResourceNotFoundException:
                 fmt.Println(timestreamquery.ErrCodeResourceNotFoundException, aerr.Error())
             default:
                 fmt.Printf("Error: %s", aerr.Error())
             }
         } else {
             fmt.Printf("Error: %s", err.Error())
         }
         return err
     } else {
         fmt.Println("DeleteScheduledQuery is successful")
         return nil
     }
 }
```

------
#### [  Python  ]

```
def delete_scheduled_query(self, scheduled_query_arn):
    print("\nDeleting Scheduled Query")
    try:
        self.query_client.delete_scheduled_query(ScheduledQueryArn=scheduled_query_arn)
        print("Successfully deleted scheduled query :", scheduled_query_arn)
    except Exception as err:
        print("Scheduled Query deletion failed:", err)
        raise err
```

------
#### [  Node.js  ]

Il seguente frammento utilizza l' AWS SDK per lo stile V2. JavaScript Si basa sull'applicazione di esempio disponibile in [Node.js, esempio Amazon Timestream LiveAnalytics ](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/sample_apps_reinvent2021/js/schedule-query-example.js) per l'applicazione su. GitHub

```
async function deleteScheduleQuery(scheduledQueryArn) {
     console.log("Deleting Scheduled Query");
     const params = {
         ScheduledQueryArn: scheduledQueryArn
     }
     try {
         await queryClient.deleteScheduledQuery(params).promise();
         console.log("Successfully deleted scheduled query");
     } catch (err) {
         console.log("Scheduled Query deletion failed: ", err);
     }
 }
```

------
#### [  .NET  ]

```
private async Task DeleteScheduledQuery(string scheduledQueryArn)
 {
     try
     {
         Console.WriteLine("Deleting Scheduled Query");
         await _amazonTimestreamQuery.DeleteScheduledQueryAsync(new DeleteScheduledQueryRequest()
         {
             ScheduledQueryArn = scheduledQueryArn
         });
         Console.WriteLine($"Successfully deleted scheduled query : {scheduledQueryArn}");
     }
     catch (Exception e)
     {
         Console.WriteLine($"Scheduled Query deletion failed: {e}");
         throw;
     }
 }
```

------

# Utilizzo del caricamento in batch in Timestream per LiveAnalytics
<a name="batch-load"></a>

Con *il caricamento in batch* per Amazon Timestream LiveAnalytics for, puoi importare file CSV archiviati in Amazon S3 in Timestream in batch. Con questa nuova funzionalità, puoi conservare i tuoi dati in Timestream LiveAnalytics senza dover fare affidamento su altri strumenti o scrivere codice personalizzato. Puoi utilizzare il caricamento in batch per completare i dati con tempi di attesa flessibili, ad esempio dati che non sono immediatamente necessari per l'interrogazione o l'analisi. 

È possibile creare attività di caricamento in batch utilizzando Console di gestione AWS AWS CLI, the e. AWS SDKs Per ulteriori informazioni, consultare [Utilizzo del caricamento in batch con la console](batch-load-using-console.md), [Utilizzo del caricamento in batch con AWS CLI](batch-load-using-cli.md) e [Utilizzo del caricamento in batch con AWS SDKs](batch-load-using-sdk.md).

Oltre al caricamento in batch, è possibile scrivere più record contemporaneamente con l'operazione WriteRecords API. Per indicazioni su quale usare, consulta[Scelta tra il funzionamento dell' WriteRecords API e il caricamento in batch](writes.writes-or-batch-load.md).

**Topics**
+ [Concetti di caricamento in batch in Timestream](batch-load-concepts.md)
+ [Prerequisiti per il caricamento in batch](batch-load-prerequisites.md)
+ [Procedure ottimali per il caricamento in batch](batch-load-best-practices.md)
+ [Preparazione di un file di dati di caricamento in batch](batch-load-preparing-data-file.md)
+ [Mappature dei modelli di dati per il caricamento in batch](batch-load-data-model-mappings.md)
+ [Utilizzo del caricamento in batch con la console](batch-load-using-console.md)
+ [Utilizzo del caricamento in batch con AWS CLI](batch-load-using-cli.md)
+ [Utilizzo del caricamento in batch con AWS SDKs](batch-load-using-sdk.md)
+ [Utilizzo dei report sugli errori di caricamento in batch](batch-load-using-error-reports.md)

# Concetti di caricamento in batch in Timestream
<a name="batch-load-concepts"></a>

Esamina i seguenti concetti per comprendere meglio la funzionalità di caricamento in batch. 

**Attività di caricamento in batch**: l'attività che definisce i dati di origine e la destinazione in Amazon Timestream. Quando crei l'attività di caricamento in batch, specifichi una configurazione aggiuntiva come il modello di dati. È possibile creare attività di caricamento in batch tramite Console di gestione AWS AWS CLI, the e AWS SDKs. 

**Destinazione di importazione**: il database e la tabella di destinazione in Timestream. Per informazioni sulla creazione di database e tabelle, consulta [Creazione di un database](console_timestream.md#console_timestream.db.using-console) e. [Creare una tabella](console_timestream.md#console_timestream.table.using-console)

**Origine dati**: il file CSV di origine archiviato in un bucket S3. Per informazioni sulla preparazione del file di dati, consulta. [Preparazione di un file di dati di caricamento in batch](batch-load-preparing-data-file.md) Per informazioni sui prezzi di S3, consulta i prezzi di [Amazon S3](https://aws.amazon.com/s3/pricing/).

**Rapporto sugli errori di caricamento in batch**: un rapporto che memorizza le informazioni sugli errori di un'operazione di caricamento in batch. La posizione S3 per i report sugli errori di caricamento in batch viene definita come parte di un'attività di caricamento in batch. Per informazioni sulle informazioni contenute nei report, vedere[Utilizzo dei report sugli errori di caricamento in batch](batch-load-using-error-reports.md).

**Mappatura del modello di dati**: una mappatura del carico in batch per tempo, dimensioni e misure che parte da un'origine dati in una posizione S3 a un Timestream di destinazione per la tabella. LiveAnalytics Per ulteriori informazioni, consulta [Mappature dei modelli di dati per il caricamento in batch](batch-load-data-model-mappings.md).

# Prerequisiti per il caricamento in batch
<a name="batch-load-prerequisites"></a>

Questo è un elenco di prerequisiti per l'utilizzo del caricamento in batch. Per le best practice, consulta [Procedure ottimali per il caricamento in batch](batch-load-best-practices.md).
+ I dati di origine del caricamento in batch vengono archiviati in Amazon S3 in formato CSV con intestazioni.
+ Per ogni bucket di origine Amazon S3, devi disporre delle seguenti autorizzazioni in una policy allegata:

  ```
  "s3:GetObject",
  "s3:GetBucketAcl"
  "s3:ListBucket"
  ```

  Analogamente, per ogni bucket di output di Amazon S3 in cui vengono scritti i report, è necessario disporre delle seguenti autorizzazioni in una policy allegata:

  ```
  "s3:PutObject",
  "s3:GetBucketAcl"
  ```

  Esempio:

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Action": [
                  "s3:GetObject",
                  "s3:GetBucketAcl",
                  "s3:ListBucket"
              ],
              "Resource": [
                  "arn:aws:s3:::amzn-s3-demo-source-bucket1\u201d",
                  "arn:aws:s3:::amzn-s3-demo-source-bucket2\u201d"
              ],
              "Effect": "Allow"
          },
          {
              "Action": [
                  "s3:PutObject",
                  "s3:GetBucketAcl"
              ],
              "Resource": [
                  "arn:aws:s3:::amzn-s3-demo-destination-bucket\u201d"
              ],
              "Effect": "Allow"
          }
      ]
  }
  ```

------
+ Timestream for LiveAnalytics analizza il file CSV mappando le informazioni fornite nel modello di dati alle intestazioni CSV. I dati devono avere una colonna che rappresenti il timestamp, almeno una colonna di dimensione e almeno una colonna di misura.
+ I bucket S3 utilizzati con il caricamento in batch devono trovarsi nella stessa regione e provenire dallo stesso account della LiveAnalytics tabella Timestream for utilizzata nel caricamento in batch.
+ La `timestamp` colonna deve essere un tipo di dati lungo che rappresenta il tempo trascorso dall'epoca Unix. Ad esempio, il timestamp `2021-03-25T08:45:21Z` sarebbe rappresentato come. `1616661921` Timestream supporta secondi, millisecondi, microsecondi e nanosecondi per la precisione del timestamp. Quando si utilizza il linguaggio di interrogazione, è possibile eseguire la conversione tra formati con funzioni come. `to_unixtime` Per ulteriori informazioni, consulta [Funzioni data/ora](date-time-functions.md).
+ Timestream supporta il tipo di dati stringa per i valori delle dimensioni. Supporta tipi di dati long, double, string e booleani per le colonne di misura.

Per i limiti e le quote di carico in batch, vedere. [Caricamento in batch](ts-limits.md#limits.batch-load)

# Procedure ottimali per il caricamento in batch
<a name="batch-load-best-practices"></a>

Il carico in batch funziona al meglio (produttività elevata) se si rispettano le seguenti condizioni e raccomandazioni:

1. I file CSV inviati per l'ingestione sono di piccole dimensioni, in particolare con una dimensione compresa tra 100 MB e 1 GB, per migliorare il parallelismo e la velocità di inserimento.

1. Evita di importare contemporaneamente i dati nella stessa tabella (ad esempio utilizzando l'operazione WriteRecords API o una query pianificata) quando è in corso il caricamento del batch. Ciò potrebbe causare rallentamenti e l'operazione di caricamento in batch potrebbe fallire.

1. Non aggiungere, modificare o rimuovere file dal bucket S3 utilizzato nel caricamento in batch mentre l'attività di caricamento in batch è in esecuzione.

1. Non eliminate o revocate le autorizzazioni dalle tabelle o dall'origine e non segnalate i bucket S3 con attività di caricamento batch pianificate o in corso.

1. Quando si importano dati con un set di valori di dimensione ad alta cardinalità, segui le indicazioni riportate in. [Consigli per il partizionamento di record multimisura](data-modeling.md#data-modeling-multi-measure-partitioning)

1. Assicurati di verificare la correttezza dei dati inviando un file di piccole dimensioni. Tutti i dati inviati al caricamento in batch ti verranno addebitati indipendentemente dalla correttezza. Per ulteriori informazioni sui prezzi, consulta i prezzi di [Amazon Timestream](https://aws.amazon.com/timestream/pricing/).

1. Non riprendere un'attività di caricamento in batch a meno che `ActiveMagneticStorePartitions` il numero non sia inferiore a 250. Il processo potrebbe essere rallentato e fallire. L'invio di più lavori contemporaneamente per lo stesso database dovrebbe ridurre il numero.

Di seguito sono riportate le best practice relative alla console:

1. Utilizza il [generatore](batch-load-using-console.md#batch-load-using-visual-builder) solo per una modellazione dei dati più semplice che utilizza un solo nome di misura per i record di più misure.

1. Per una modellazione dei dati più complessa, usa JSON. Ad esempio, usa JSON quando usi più nomi di misure quando usi record con più misure. 

Per ulteriori informazioni su Timestream relative alle LiveAnalytics best practice, consulta. [Best practice](best-practices.md)

# Preparazione di un file di dati di caricamento in batch
<a name="batch-load-preparing-data-file"></a>

Un file di dati di origine ha valori separati da delimitatori. Il termine più specifico, valori separati da virgole (CSV) viene utilizzato genericamente. I separatori di colonna validi includono virgole e pipe. I record sono separati da nuove righe. I file devono essere archiviati in Amazon S3. Quando si crea una nuova attività di caricamento in batch, la posizione dei dati di origine viene specificata da un ARN per il file. Un file contiene intestazioni. Una colonna rappresenta il timestamp. Almeno un'altra colonna rappresenta una misura.

I bucket S3 utilizzati con il caricamento in batch devono trovarsi nella stessa area del Timestream per la LiveAnalytics tabella utilizzata nel caricamento in batch. Non aggiungere o rimuovere file dal bucket S3 utilizzato nel caricamento in batch dopo l'invio dell'attività di caricamento in batch. Per informazioni sull'utilizzo dei bucket S3, consulta [Guida introduttiva ad Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html).

**Nota**  
I file CSV generati da alcune applicazioni come Excel potrebbero contenere un byte order mark (BOM) che è in conflitto con la codifica prevista. Il flusso temporale per le attività di caricamento LiveAnalytics in batch che fanno riferimento a un file CSV con un BOM genera un errore quando vengono elaborate a livello di codice. Per evitare ciò, puoi rimuovere il BOM, che è un carattere invisibile.  
Ad esempio, è possibile salvare il file da un'applicazione come Notepad\$1\$1 che consente di specificare una nuova codifica. È inoltre possibile utilizzare un'opzione programmatica che legge la prima riga, rimuove il carattere dalla riga e scrive il nuovo valore sulla prima riga del file.  
Quando si salva da Excel, sono disponibili diverse opzioni CSV. Il salvataggio con un'opzione CSV diversa potrebbe prevenire il problema descritto. Ma dovresti controllare il risultato perché un cambiamento nella codifica può influire su alcuni caratteri.

## Parametri del formato CSV
<a name="batch-load-data-file-options"></a>

Utilizzate i caratteri di escape quando rappresentate un valore altrimenti riservato dai parametri di formato. Ad esempio, se il carattere delle virgolette è composto da virgolette doppie, per rappresentare una virgoletta doppia nei dati, posiziona il carattere di escape prima delle virgolette doppie.

Per informazioni su quando specificarli durante la creazione di un'operazione di caricamento in batch, vedere[Creare un'attività di caricamento in batch](batch-load-using-console.md#console_timestream.create-batch-load.using-console).


| Parametro | Opzioni | 
| --- | --- | 
| Separatore di colonne | (Virgola (',') \$1 Pipe ('\$1') \$1 Punto e virgola (';') \$1 Tab ('/t') \$1 Spazio vuoto ('')) | 
| Personaggio di fuga | nessuno | 
| Cita il personaggio | Console: (Virgolette doppie («) \$1 Virgolette singole (')) | 
| Valore nullo | Spazio vuoto ('') | 
| Taglia lo spazio bianco | Console: (No \$1 Sì) | 

# Mappature dei modelli di dati per il caricamento in batch
<a name="batch-load-data-model-mappings"></a>

Di seguito viene illustrato lo schema per le mappature dei modelli di dati e viene fornito un esempio.

## Schema di mappatura del modello di dati
<a name="batch-load-data-model-mappings-schema"></a>

La sintassi della `CreateBatchLoadTask` richiesta e un `BatchLoadTaskDescription` oggetto restituito da una chiamata per `DescribeBatchLoadTask` includere un `DataModelConfiguration` oggetto che include il `DataModel` caricamento in batch. `DataModel`Definisce le mappature dai dati di origine archiviati in formato CSV in una posizione S3 a un Timestream di destinazione per database e tabella. LiveAnalytics 

Il `TimeColumn` campo indica la posizione dei dati di origine per il valore da mappare alla colonna della tabella di destinazione in Timestream for. `time` LiveAnalytics `TimeUnit`Speciifica l'unità per`TimeColumn`, e può essere una delle`MILLISECONDS`,, `SECONDS` o. `MICROSECONDS` `NANOSECONDS` Sono disponibili anche mappature per dimensioni e misure. Le mappature delle dimensioni sono composte da colonne di origine e campi di destinazione. 

Per ulteriori informazioni, consulta [DimensionMapping](https://docs.aws.amazon.com/timestream/latest/developerguide/API_DimensionMapping). Le mappature per le misure hanno due opzioni: e. `MixedMeasureMappings` `MultiMeasureMappings`

Per riassumere, a `DataModel` contiene le mappature da un'origine dati in una posizione S3 a un Timestream di destinazione per la tabella per quanto segue. LiveAnalytics 
+ Orario
+ Dimensioni
+ Misure

Se possibile, ti consigliamo di mappare i dati di misura su record multimisura in Timestream for. LiveAnalytics Per informazioni sui vantaggi dei record multimisura, consulta. [Record multimisura](writes.md#writes.writing-data-multi-measure) 

Se più misure nei dati di origine sono memorizzate in una riga, puoi mappare tali misure su record di più misure in Timestream per utilizzarle. LiveAnalytics `MultiMeasureMappings` Se ci sono valori che devono essere mappati a un record a misura singola, puoi usare. `MixedMeasureMappings` 

`MixedMeasureMappings`ed `MultiMeasureMappings` entrambi includono`MultiMeasureAttributeMappings`. I record a più misure sono supportati indipendentemente dal fatto che siano necessari record a misura singola.

Se in Timestream for sono necessari solo record di destinazione a più misure LiveAnalytics, è possibile definire le mappature delle misure nella seguente struttura.

```
CreateBatchLoadTask
    MeasureNameColumn
    MultiMeasureMappings
        TargetMultiMeasureName
        MultiMeasureAttributeMappings array
```

**Nota**  
Si consiglia di utilizzarlo quando possibile. `MultiMeasureMappings`

Se sono necessari record di destinazione a misura singola in Timestream for LiveAnalytics, puoi definire le mappature delle misure nella seguente struttura.

```
CreateBatchLoadTask
    MeasureNameColumn
    MixedMeasureMappings array
        MixedMeasureMapping
            MeasureName
            MeasureValueType
            SourceColumn
            TargetMeasureName
            MultiMeasureAttributeMappings array
```

Quando si utilizza`MultiMeasureMappings`, l'array è sempre necessario. `MultiMeasureAttributeMappings` Quando si utilizza l'`MixedMeasureMappings`array, se si `MeasureValueType` tratta `MULTI` di un dato elemento`MixedMeasureMapping`, `MultiMeasureAttributeMappings` è necessario a tal fine`MixedMeasureMapping`. Altrimenti, `MeasureValueType` indica il tipo di misura per il record a misura singola.

In entrambi i casi, ce n'è una serie di `MultiMeasureAttributeMapping` opzioni disponibili. Le mappature su record multimisura in ciascuno `MultiMeasureAttributeMapping` di essi vengono definite nel modo seguente:

`SourceColumn`  
La colonna dei dati di origine che si trova in Amazon S3.

`TargetMultiMeasureAttributeName`  
Il nome del nome multimisura di destinazione nella tabella di destinazione. Questo input è obbligatorio quando non `MeasureNameColumn` viene fornito. Se `MeasureNameColumn` fornito, il valore di quella colonna viene utilizzato come nome multimisura.

`MeasureValueType`  
Uno di`DOUBLE`, `BIGINT` `BOOLEAN``VARCHAR`, o`TIMESTAMP`.

## Mappature di modelli di dati con esempio `MultiMeasureMappings`
<a name="batch-load-data-model-mappings-example-multi"></a>

Questo esempio dimostra la mappatura su record multimisura, l'approccio preferito, che memorizza ogni valore di misura in una colonna dedicata. [Puoi scaricare un file CSV di esempio da sample CSV.](samples/batch-load-sample-file.csv.zip) L'esempio ha i seguenti titoli da mappare a una colonna di destinazione in un Timestream per tabella. LiveAnalytics 
+ `time`
+ `measure_name`
+ `region`
+ `location`
+ `hostname`
+ `memory_utilization`
+ `cpu_utilization`

Identifica le `measure_name` colonne `time` and nel file CSV. In questo caso vengono mappate direttamente al Timestream per le colonne della LiveAnalytics tabella con lo stesso nome.
+ `time`mappe per `time`
+ `measure_name`mappa a `measure_name` (o al valore scelto)

Quando si utilizza l'API, si specifica `time` nel `TimeColumn` campo e un valore di unità di tempo supportato, ad esempio `MILLISECONDS` nel `TimeUnit` campo. Questi corrispondono al **nome della colonna di origine** e all'**ora del timestamp immessi** nella console. È possibile raggruppare o partizionare i record utilizzando la `measure_name` chiave definita. `MeasureNameColumn`

Nell'esempio, `region``location`, e `hostname` sono dimensioni. Le dimensioni sono mappate in una serie di `DimensionMapping` oggetti.

Per le misure, il valore `TargetMultiMeasureAttributeName` diventerà una colonna nel Timestream for table. LiveAnalytics È possibile mantenere lo stesso nome come in questo esempio. Oppure puoi specificarne uno nuovo. `MeasureValueType`è uno dei `DOUBLE``BIGINT`,`BOOLEAN`,`VARCHAR`, o`TIMESTAMP`. 

```
{
  "TimeColumn": "time",
  "TimeUnit": "MILLISECONDS",
  "DimensionMappings": [
    {
      "SourceColumn": "region",
      "DestinationColumn": "region"
    },
    {
      "SourceColumn": "location",
      "DestinationColumn": "location"
    },
    {
      "SourceColumn": "hostname",
      "DestinationColumn": "hostname"
    }
  ],
  "MeasureNameColumn": "measure_name",
  "MultiMeasureMappings": {
    "MultiMeasureAttributeMappings": [
      {
        "SourceColumn": "memory_utilization",
        "TargetMultiMeasureAttributeName": "memory_utilization",
        "MeasureValueType": "DOUBLE"
      },
      {
        "SourceColumn": "cpu_utilization",
        "TargetMultiMeasureAttributeName": "cpu_utilization",
        "MeasureValueType": "DOUBLE"
      }
    ]
  }
}
```

![\[Visual builder interface showing column mappings for timestream data attributes and types.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/column-mapping.jpg)


## mappature di modelli di dati con esempio `MixedMeasureMappings`
<a name="batch-load-data-model-mappings-example-mixed"></a>

Ti consigliamo di utilizzare questo approccio solo quando devi mappare record a misura singola in Timestream for. LiveAnalytics

# Utilizzo del caricamento in batch con la console
<a name="batch-load-using-console"></a>

Di seguito sono riportati i passaggi per utilizzare il caricamento in batch con Console di gestione AWS. Puoi scaricare un file CSV di esempio dal file CSV di [esempio](samples/batch-load-sample-file.csv.zip).

**Topics**
+ [Accedi al caricamento in batch](#console_timestream.access-batch-load.using-console)
+ [Creare un'attività di caricamento in batch](#console_timestream.create-batch-load.using-console)
+ [Riprendi un'attività di caricamento in batch](#console_timestream.resume-batch-load.using-console)
+ [Utilizzando il visual builder](#batch-load-using-visual-builder)

## Accedi al caricamento in batch
<a name="console_timestream.access-batch-load.using-console"></a>

Segui questi passaggi per accedere al caricamento in batch utilizzando Console di gestione AWS.

1. Apri la console [Amazon Timestream](https://console.aws.amazon.com/timestream).

1. Nel riquadro di navigazione, scegli **Strumenti di gestione**, quindi scegli **Attività di caricamento in Batch**.

1. Da qui, puoi visualizzare l'elenco delle attività di caricamento in batch e approfondire una determinata attività per maggiori dettagli. È inoltre possibile creare e riprendere le attività.

## Creare un'attività di caricamento in batch
<a name="console_timestream.create-batch-load.using-console"></a>

Segui questi passaggi per creare un'attività di caricamento in batch utilizzando Console di gestione AWS.

1. Apri la console [Amazon Timestream](https://console.aws.amazon.com/timestream).

1. Nel riquadro di navigazione, scegli **Strumenti di gestione**, quindi scegli **Attività di caricamento in Batch**.

1. Scegli **Crea attività di caricamento in batch**.

1. In **Destinazione di importazione**, scegli quanto segue.
   + **Database di destinazione**: seleziona il nome del database creato in[Creazione di un database](console_timestream.md#console_timestream.db.using-console).
   + **Tabella di destinazione**: seleziona il nome della tabella creata in[Creare una tabella](console_timestream.md#console_timestream.table.using-console).

   Se necessario, puoi aggiungere una tabella da questo pannello con il pulsante **Crea nuova tabella**.

1. Dalla **posizione Data source S3** in **Data source**, seleziona il bucket S3 in cui sono archiviati i dati di origine. Usa il pulsante **Sfoglia S3** per visualizzare le risorse S3 a cui ha accesso l' AWS account attivo o inserisci l'URL della posizione S3. L'origine dati deve trovarsi nella stessa regione.

1. Nelle **impostazioni del formato del file** (sezione espandibile), è possibile utilizzare le impostazioni predefinite per analizzare i dati di input. **Puoi anche scegliere Impostazioni avanzate.** Da lì puoi scegliere i **parametri del formato CSV** e selezionare i parametri per analizzare i dati di input. Per informazioni su questi parametri, vedere. [Parametri del formato CSV](batch-load-preparing-data-file.md#batch-load-data-file-options)

1. Da **Configura la mappatura del modello di dati**, configura il modello di dati. Per ulteriori indicazioni sul modello di dati, vedere [Mappature dei modelli di dati per il caricamento in batch](batch-load-data-model-mappings.md)
   + Da **Mappatura del modello di dati**, scegli **Mappatura dell'input di configurazione** e scegli una delle seguenti opzioni.
     + **Visual Builder**: per mappare visivamente i dati, scegli o. **TargetMultiMeasureName**MeasureNameColumn**** Quindi, da **Visual Builder**, mappa le colonne.

       Visual Builder rileva e carica automaticamente le intestazioni delle colonne di origine dal file di origine dati quando viene selezionato un singolo file CSV come origine dati. Scegli l'attributo e il tipo di dati per creare la mappatura.

       Per informazioni sull'utilizzo del Visual Builder, consulta. [Utilizzando il visual builder](#batch-load-using-visual-builder)
     + Editor **JSON: un editor** JSON in formato libero per configurare il modello di dati. Scegli questa opzione se conosci Timestream for LiveAnalytics e desideri creare mappature avanzate di modelli di dati.
     + **File JSON da S3**: seleziona un file modello JSON che hai archiviato in S3. Scegli questa opzione se hai già configurato un modello di dati e desideri riutilizzarlo per caricamenti batch aggiuntivi.

1. Dalla **posizione S3 dei registri** di **errore nel rapporto del registro degli errori**, seleziona la posizione S3 che verrà utilizzata per segnalare gli errori. Per informazioni su come utilizzare questo rapporto, consulta. [Utilizzo dei report sugli errori di caricamento in batch](batch-load-using-error-reports.md)

1. Per **Tipo di chiave di crittografia**, scegli una delle seguenti opzioni.
   + **Chiave gestita da Amazon S3 (SSE-S3): una chiave** di crittografia che Amazon S3 crea, gestisce e utilizza per te.
   + **AWS KMS key (SSE-KMS): una chiave di crittografia protetta da ().** AWS Key Management Service AWS KMS

1. Scegli **Next (Successivo)**.

1. Nella **pagina Rivedi e crea**, rivedi le impostazioni e modificale se necessario.
**Nota**  
Non è possibile modificare le impostazioni dell'attività di caricamento in batch dopo la creazione dell'attività. I tempi di completamento delle attività variano in base alla quantità di dati importati.

1. Scegli **Crea attività di caricamento in batch**.

## Riprendi un'attività di caricamento in batch
<a name="console_timestream.resume-batch-load.using-console"></a>

Quando si seleziona un'operazione di caricamento in batch con lo stato «Progresso interrotto» che è ancora ripristinabile, viene richiesto di riprendere l'operazione. C'è anche un banner con il pulsante **Riprendi attività** quando visualizzi i dettagli di tali attività. Le attività riprendibili hanno una data di scadenza. Dopo la scadenza di tale data, le attività non possono essere riprese.

## Utilizzando il visual builder
<a name="batch-load-using-visual-builder"></a>

Puoi utilizzare il visual builder per mappare le colonne di dati di origine di uno o più file CSV archiviati in un bucket S3 alle colonne di destinazione in un Timestream per tabella. LiveAnalytics 

**Nota**  
Il tuo ruolo avrà bisogno dell'autorizzazione per il file. `SelectObjectContent` In caso contrario, dovrai aggiungere ed eliminare le colonne manualmente.

### Modalità di caricamento automatico delle colonne di origine
<a name="batch-load-using-visual-builder-auto-load"></a>

Timestream for LiveAnalytics può scansionare automaticamente il file CSV di origine per i nomi delle colonne se si specifica un solo bucket. **Quando non ci sono mappature esistenti, puoi scegliere Importa colonne di origine.**

1. Con l'opzione **Visual Builder** selezionata dalle **impostazioni di input della configurazione di mappatura, imposta l'input temporale** Timestamp. `Milliseconds`è l'impostazione predefinita.

1. Fate clic sul pulsante **Carica colonne di origine** per importare le intestazioni di colonna presenti nel file di dati di origine. La tabella verrà compilata con i nomi delle intestazioni delle colonne di origine provenienti dal file di origine dati.

1. Scegli il **nome della colonna della tabella Target, il** tipo di **attributo Timestream e il tipo di** **dati per ogni colonna di** origine.

   Per informazioni dettagliate su queste colonne e sui possibili valori, consulta. [Mappatura dei campi](#batch-load-using-visual-builder-mapping-fields)

1. Usa la drag-to-fill funzione per impostare il valore per più colonne contemporaneamente.

### Aggiungi manualmente le colonne sorgente
<a name="batch-load-using-visual-builder-manually-add"></a>

**Se utilizzi un bucket o un prefisso CSV e non un singolo CSV, puoi aggiungere ed eliminare le mappature delle colonne dall'editor visivo con i pulsanti Aggiungi mappatura delle colonne ed Elimina **mappatura delle colonne**.** C'è anche un pulsante per ripristinare le mappature.

### Mappatura dei campi
<a name="batch-load-using-visual-builder-mapping-fields"></a>
+ **Nome della colonna di origine**: il nome di una colonna nel file di origine che rappresenta una misura da importare. Timestream for LiveAnalytics può compilare questo valore automaticamente quando si utilizzano le colonne di origine di **importazione**.
+ **Nome della colonna della tabella di destinazione**: input opzionale che indica il nome della colonna per la misura nella tabella di destinazione.
+ **Tipo di attributo Timestream**: il tipo di attributo dei dati nella colonna di origine specificata, ad esempio. `DIMENSION`
  + **TIMESTAMP**: specifica quando è stata raccolta una misura.
  + **MULTI** — Sono rappresentate più misure.
  + **DIMENSION** — Metadati delle serie temporali.
  + **MEASURE\$1NAME** — Per i record a misura singola, questo è il nome della misura.
+ **Tipo di dati**: il tipo di colonna Timestream, ad esempio. `BOOLEAN`
  + **BIGINT**: un numero intero a 64 bit.
  + **BOOLEAN** — I due valori di verità della logica: vero e falso.
  + **DOUBLE**: numero a precisione variabile a 64 bit.
  + **TIMESTAMP**: un'istanza temporale che utilizza l'ora di precisione in nanosecondi in UTC e tiene traccia del tempo dall'epoca Unix.

# Utilizzo del caricamento in batch con AWS CLI
<a name="batch-load-using-cli"></a>

**Configurazione**

Per iniziare a utilizzare il caricamento in batch, procedi nel seguente modo.

1. Installa il AWS CLI utilizzando le istruzioni riportate all'indirizzo[Accesso ad Amazon Timestream LiveAnalytics per l'utilizzo di AWS CLI](Tools.CLI.md).

1. Esegui il comando seguente per verificare che i comandi CLI di Timestream siano stati aggiornati. Verifica che create-batch-load-task sia nell'elenco.

   `aws timestream-write help`

1. Prepara una fonte di dati seguendo le istruzioni riportate in[Preparazione di un file di dati di caricamento in batch](batch-load-preparing-data-file.md).

1. Crea un database e una tabella seguendo le istruzioni riportate in[Accesso ad Amazon Timestream LiveAnalytics per l'utilizzo di AWS CLI](Tools.CLI.md).

1. Crea un bucket S3 per l'output dei report. Il bucket deve trovarsi nella stessa regione. Per ulteriori informazioni sui bucket, consulta [Creazione, configurazione e utilizzo dei bucket Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-buckets-s3.html).

1. Crea un'attività di caricamento in batch. Per le fasi, consulta [Crea un'attività di caricamento in batch](#batch-load-using-cli-create-task).

1. Conferma lo stato dell'attività. Per le fasi, consulta [Descrivi l'operazione di caricamento batch](#batch-load-using-cli-describe-task).

## Crea un'attività di caricamento in batch
<a name="batch-load-using-cli-create-task"></a>

È possibile creare un'attività di caricamento in batch con il `create-batch-load-task` comando. Quando si crea un'attività di caricamento in batch utilizzando la CLI, è possibile utilizzare un parametro JSON`cli-input-json`, che consente di aggregare i parametri in un singolo frammento JSON. È inoltre possibile suddividere questi dettagli utilizzando diversi altri parametri`data-model-configuration`,,, `data-source-configuration` e. `report-configuration` `target-database-name` `target-table-name`

Per un esempio, consulta [Crea un esempio di attività di caricamento in batch](#batch-load-using-cli-example)

## Descrivi l'operazione di caricamento batch
<a name="batch-load-using-cli-describe-task"></a>

È possibile recuperare la descrizione dell'attività di caricamento in batch come segue.

```
aws timestream-write describe-batch-load-task --task-id <value>
```

Di seguito è riportata una risposta di esempio:

```
{
    "BatchLoadTaskDescription": {
        "TaskId": "<TaskId>",
        "DataSourceConfiguration": {
            "DataSourceS3Configuration": {
                "BucketName": "test-batch-load-west-2",
                "ObjectKeyPrefix": "sample.csv"
            },
            "CsvConfiguration": {},
            "DataFormat": "CSV"
        },
        "ProgressReport": {
            "RecordsProcessed": 2,
            "RecordsIngested": 0,
            "FileParseFailures": 0,
            "RecordIngestionFailures": 2,
            "FileFailures": 0,
            "BytesIngested": 119
        },
        "ReportConfiguration": {
            "ReportS3Configuration": {
                "BucketName": "test-batch-load-west-2",
                "ObjectKeyPrefix": "<ObjectKeyPrefix>",
                "EncryptionOption": "SSE_S3"
            }
        },
        "DataModelConfiguration": {
            "DataModel": {
                "TimeColumn": "timestamp",
                "TimeUnit": "SECONDS",
                "DimensionMappings": [
                    {
                        "SourceColumn": "vehicle",
                        "DestinationColumn": "vehicle"
                    },
                    {
                        "SourceColumn": "registration",
                        "DestinationColumn": "license"
                    }
                ],
                "MultiMeasureMappings": {
                    "TargetMultiMeasureName": "test",
                    "MultiMeasureAttributeMappings": [
                        {
                            "SourceColumn": "wgt",
                            "TargetMultiMeasureAttributeName": "weight",
                            "MeasureValueType": "DOUBLE"
                        },
                        {
                            "SourceColumn": "spd",
                            "TargetMultiMeasureAttributeName": "speed",
                            "MeasureValueType": "DOUBLE"
                        },
                        {
                            "SourceColumn": "fuel",
                            "TargetMultiMeasureAttributeName": "fuel",
                            "MeasureValueType": "DOUBLE"
                        },
                        {
                            "SourceColumn": "miles",
                            "TargetMultiMeasureAttributeName": "miles",
                            "MeasureValueType": "DOUBLE"
                        }
                    ]
                }
            }
        },
        "TargetDatabaseName": "BatchLoadExampleDatabase",
        "TargetTableName": "BatchLoadExampleTable",
        "TaskStatus": "FAILED",
        "RecordVersion": 1,
        "CreationTime": 1677167593.266,
        "LastUpdatedTime": 1677167602.38
    }
}
```

## Elenca le attività di caricamento in batch
<a name="batch-load-using-cli-list-tasks"></a>

È possibile elencare le attività di caricamento in batch come segue.

```
aws timestream-write list-batch-load-tasks
```

L'output viene visualizzato come segue.

```
{
    "BatchLoadTasks": [
        {
            "TaskId": "<TaskId>",
            "TaskStatus": "FAILED",
            "DatabaseName": "BatchLoadExampleDatabase",
            "TableName": "BatchLoadExampleTable",
            "CreationTime": 1677167593.266,
            "LastUpdatedTime": 1677167602.38
        }
    ]
}
```

## Riprendi l'operazione di caricamento in batch
<a name="batch-load-using-cli-resume-task"></a>

È possibile riprendere un'attività di caricamento in batch come segue.

```
aws timestream-write resume-batch-load-task --task-id <value>
```

Una risposta può indicare un successo o contenere informazioni sull'errore.

## Crea un esempio di attività di caricamento in batch
<a name="batch-load-using-cli-example"></a>

**Example**  

1. Crea un flusso temporale per il LiveAnalytics database denominato `BatchLoad` e una tabella denominata. `BatchLoadTest` Verificate e, se necessario, regolate i valori di `MemoryStoreRetentionPeriodInHours` e. `MagneticStoreRetentionPeriodInDays`

   ```
   aws timestream-write create-database --database-name BatchLoad \
   
   aws timestream-write create-table --database-name BatchLoad \
   --table-name BatchLoadTest \
   --retention-properties "{\"MemoryStoreRetentionPeriodInHours\": 12, \"MagneticStoreRetentionPeriodInDays\": 100}"
   ```

1. Utilizzando la console, crea un bucket S3 e copia il `sample.csv` file in quella posizione. [Puoi scaricare un file CSV di esempio dalla pagina Sample CSV.](samples/batch-load-sample-file.csv.zip)

1. Utilizzando la console, crea un bucket S3 per Timestream per scrivere un rapporto se l' LiveAnalytics attività di caricamento in batch viene completata con errori.

1. Crea un'attività di caricamento in batch. Assicurati di sostituire *\$1INPUT\$1BUCKET* e *\$1REPORT\$1BUCKET* con i bucket che hai creato nei passaggi precedenti.

   ```
   aws timestream-write create-batch-load-task \
   --data-model-configuration "{\
               \"DataModel\": {\
                 \"TimeColumn\": \"timestamp\",\
                 \"TimeUnit\": \"SECONDS\",\
                 \"DimensionMappings\": [\
                   {\
                     \"SourceColumn\": \"vehicle\"\
                   },\
                   {\
                     \"SourceColumn\": \"registration\",\
                     \"DestinationColumn\": \"license\"\
                   }\
                 ],
                 \"MultiMeasureMappings\": {\
                   \"TargetMultiMeasureName\": \"mva_measure_name\",\
                   \"MultiMeasureAttributeMappings\": [\
                     {\
                       \"SourceColumn\": \"wgt\",\
                       \"TargetMultiMeasureAttributeName\": \"weight\",\
                       \"MeasureValueType\": \"DOUBLE\"\
                     },\
                     {\
                       \"SourceColumn\": \"spd\",\
                       \"TargetMultiMeasureAttributeName\": \"speed\",\
                       \"MeasureValueType\": \"DOUBLE\"\
                     },\
                     {\
                       \"SourceColumn\": \"fuel_consumption\",\
                       \"TargetMultiMeasureAttributeName\": \"fuel\",\
                       \"MeasureValueType\": \"DOUBLE\"\
                     },\
                     {\
                       \"SourceColumn\": \"miles\",\
                       \"MeasureValueType\": \"BIGINT\"\
                     }\
                   ]\
                 }\
               }\
             }" \
   --data-source-configuration "{
               \"DataSourceS3Configuration\": {\
                 \"BucketName\": \"$INPUT_BUCKET\",\
                 \"ObjectKeyPrefix\": \"$INPUT_OBJECT_KEY_PREFIX\"
               },\
               \"DataFormat\": \"CSV\"\
             }" \
   --report-configuration "{\
               \"ReportS3Configuration\": {\
                 \"BucketName\": \"$REPORT_BUCKET\",\
                 \"EncryptionOption\": \"SSE_S3\"\
               }\
             }" \
   --target-database-name BatchLoad \
   --target-table-name BatchLoadTest
   ```

   Il comando precedente restituisce l'output seguente.

   ```
   {
       "TaskId": "TaskId "
   }
   ```

1. Controlla lo stato di avanzamento dell'operazione. Assicurati di sostituirlo *\$1TASK\$1ID* con l'ID dell'attività restituito nel passaggio precedente.

   ```
   aws timestream-write describe-batch-load-task --task-id $TASK_ID 
   ```
**Output di esempio**  

```
{
    "BatchLoadTaskDescription": {
        "ProgressReport": {
            "BytesIngested": 1024,
            "RecordsIngested": 2,
            "FileFailures": 0,
            "RecordIngestionFailures": 0,
            "RecordsProcessed": 2,
            "FileParseFailures": 0
        },
        "DataModelConfiguration": {
            "DataModel": {
                "DimensionMappings": [
                    {
                        "SourceColumn": "vehicle",
                        "DestinationColumn": "vehicle"
                    },
                    {
                        "SourceColumn": "registration",
                        "DestinationColumn": "license"
                    }
                ],
                "TimeUnit": "SECONDS",
                "TimeColumn": "timestamp",
                "MultiMeasureMappings": {
                    "MultiMeasureAttributeMappings": [
                        {
                            "TargetMultiMeasureAttributeName": "weight",
                            "SourceColumn": "wgt",
                            "MeasureValueType": "DOUBLE"
                        },
                        {
                            "TargetMultiMeasureAttributeName": "speed",
                            "SourceColumn": "spd",
                            "MeasureValueType": "DOUBLE"
                        },
                        {
                            "TargetMultiMeasureAttributeName": "fuel",
                            "SourceColumn": "fuel_consumption",
                            "MeasureValueType": "DOUBLE"
                        },
                        {
                            "TargetMultiMeasureAttributeName": "miles",
                            "SourceColumn": "miles",
                            "MeasureValueType": "DOUBLE"
                        }
                    ],
                    "TargetMultiMeasureName": "mva_measure_name"
                }
            }
        },
        "TargetDatabaseName": "BatchLoad",
        "CreationTime": 1672960381.735,
        "TaskStatus": "SUCCEEDED",
        "RecordVersion": 1,
        "TaskId": "TaskId ",
        "TargetTableName": "BatchLoadTest",
        "ReportConfiguration": {
            "ReportS3Configuration": {
                "EncryptionOption": "SSE_S3",
                "ObjectKeyPrefix": "ObjectKeyPrefix ",
                "BucketName": "amzn-s3-demo-bucket"
            }
        },
        "DataSourceConfiguration": {
            "DataSourceS3Configuration": {
                "ObjectKeyPrefix": "sample.csv",
                "BucketName": "amzn-s3-demo-source-bucket"
            },
            "DataFormat": "CSV",
            "CsvConfiguration": {}
        },
        "LastUpdatedTime": 1672960387.334
    }
}
```

# Utilizzo del caricamento in batch con AWS SDKs
<a name="batch-load-using-sdk"></a>

Per esempi su come creare, descrivere ed elencare le attività di caricamento in batch con AWS SDKs[Crea attività di caricamento in batch](code-samples.create-batch-load.md), vedere[Descrizione dell'attività di caricamento in batch](code-samples.describe-batch-load.md),[Elenca le attività di caricamento in batch](code-samples.list-batch-load-tasks.md), e[Riprendi l'operazione di caricamento in batch](code-samples.resume-batch-load-task.md).

# Utilizzo dei report sugli errori di caricamento in batch
<a name="batch-load-using-error-reports"></a>

Le attività di caricamento in batch hanno uno dei seguenti valori di stato:
+ `CREATED`(**Creato**): l'attività viene creata.
+ `IN_PROGRESS`(**In corso**): l'attività è in corso.
+ `FAILED`(**Non riuscito**): l'attività è stata completata. Ma sono stati rilevati uno o più errori.
+ `SUCCEEDED`(**Completata**): l'attività è stata completata senza errori.
+ `PROGRESS_STOPPED`(**Progresso interrotto**): l'attività è stata interrotta ma non completata. È possibile tentare di riprendere l'attività.
+ `PENDING_RESUME`(**Curriculum in sospeso**): l'attività è in attesa di ripresa.

In caso di errori, viene creato un report di registro degli errori nel bucket S3 definito a tale scopo. Gli errori sono classificati come TaskErrors o FileErrors in matrici separate. Di seguito è riportato un esempio di segnalazione di errori.

```
{
    "taskId": "9367BE28418C5EF902676482220B631C",
    "taskErrors": [],
    "fileErrors": [
        {
            "fileName": "example.csv",
            "errors": [
                {
                    "reason": "The record timestamp is outside the time range of the data ingestion window.",
                    "lineRanges": [
                        [
                            2,
                            3
                        ]
                    ]
                }
            ]
        }
    ]
}
```

# Utilizzo delle interrogazioni pianificate in Timestream per LiveAnalytics
<a name="scheduledqueries"></a>

La funzionalità di interrogazione pianificata di Amazon Timestream LiveAnalytics for è una soluzione completamente gestita, serverless e scalabile per il calcolo e l'archiviazione di aggregati, rollup e altre forme di dati preelaborati tipicamente utilizzati per dashboard operativi, report aziendali, analisi ad hoc e altre applicazioni. Le interrogazioni pianificate rendono l'analisi in tempo reale più performante ed economica, in modo da poter ricavare ulteriori informazioni dai dati e continuare a prendere decisioni aziendali migliori. 

Con le query pianificate, definisci le query di analisi in tempo reale che calcolano aggregati, rollup e altre operazioni sui dati, mentre Amazon Timestream esegue LiveAnalytics periodicamente e automaticamente queste query e scrive in modo affidabile i risultati delle query in una tabella separata. I dati vengono generalmente calcolati e aggiornati in queste tabelle entro pochi minuti. 

È quindi possibile indirizzare i dashboard e i report in modo da interrogare le tabelle che contengono dati aggregati anziché interrogare le tabelle di origine, notevolmente più grandi. Ciò porta a miglioramenti in termini di prestazioni e costi che possono superare ordini di grandezza. Questo perché le tabelle con dati aggregati contengono molti meno dati rispetto alle tabelle di origine, quindi offrono query più veloci e un'archiviazione dei dati più economica. 

Inoltre, le tabelle con interrogazioni pianificate offrono tutte le funzionalità esistenti di un Timestream for table. LiveAnalytics Ad esempio, è possibile interrogare le tabelle utilizzando SQL. È possibile visualizzare i dati memorizzati nelle tabelle utilizzando Grafana. Puoi anche inserire dati nella tabella utilizzando Amazon Kinesis, Amazon MSK AWS , IoT Core e Telegraf. Puoi configurare le politiche di conservazione dei dati su queste tabelle per la gestione automatica del ciclo di vita dei dati. 

Poiché la conservazione dei dati delle tabelle che contengono dati aggregati è completamente disaccoppiata da quella delle tabelle di origine, puoi anche scegliere di ridurre la conservazione dei dati delle tabelle di origine e conservare i dati aggregati per una durata molto più lunga, a una frazione del costo di archiviazione dei dati. Le query pianificate rendono l'analisi in tempo reale più veloce, economica e quindi più accessibile a molti più clienti, in modo che possano monitorare le loro applicazioni e prendere decisioni aziendali migliori basate sui dati. 

**Topics**
+ [Vantaggi](#scheduledqueries-benifits)
+ [Casi d’uso](#scheduledqueries-usescases)
+ [Esempio](#scheduledqueries-example)
+ [Concetti](scheduledqueries-concepts.md)
+ [Espressioni di pianificazione](scheduledqueries-schedule.md)
+ [Mappature dei modelli di dati](scheduledqueries-mappings.md)
+ [Messaggi di notifica](scheduledqueries-notification.md)
+ [Rapporti di errore](scheduledqueries-errorreport.md)
+ [Schemi ed esempi](scheduledqueries-examplesandpatterns.md)

## Vantaggi delle interrogazioni pianificate
<a name="scheduledqueries-benifits"></a>

Di seguito sono riportati i vantaggi delle interrogazioni pianificate:
+ **Facilità operativa**: le query pianificate sono senza server e completamente gestite. 
+ **Prestazioni e costi**: poiché le query pianificate precalcolano gli aggregati, i rollup o altre operazioni di analisi in tempo reale dei dati e archiviano i risultati in una tabella, le query che accedono alle tabelle popolate da query pianificate contengono meno dati rispetto alle tabelle di origine. Pertanto, le query eseguite su queste tabelle sono più veloci ed economiche. Le tabelle popolate da calcoli pianificati contengono meno dati rispetto alle tabelle di origine e quindi aiutano a ridurre i costi di archiviazione. È inoltre possibile conservare questi dati per un periodo più lungo nell'archivio di memoria a una frazione del costo di conservazione dei dati di origine nell'archivio di memoria.
+ **Interoperabilità**: le tabelle popolate da query pianificate offrono tutte le funzionalità esistenti di Timestream per le LiveAnalytics tabelle e possono essere utilizzate con tutti i servizi e gli strumenti compatibili con Timestream for. LiveAnalytics [Vedi Lavorare con altri servizi per i dettagli.](https://docs.aws.amazon.com/timestream/latest/developerguide/OtherServices.html)

## Casi d'uso delle interrogazioni pianificate
<a name="scheduledqueries-usescases"></a>

È possibile utilizzare le query pianificate per i report aziendali che riepilogano l'attività dell'utente finale delle applicazioni, in modo da poter addestrare modelli di machine learning per la personalizzazione. Puoi anche utilizzare le query pianificate per gli allarmi che rilevano anomalie, intrusioni di rete o attività fraudolente, in modo da poter intraprendere azioni correttive immediate. 

Inoltre, puoi utilizzare le query pianificate per una governance dei dati più efficace. Puoi farlo concedendo l'accesso alla tabella di origine esclusivamente alle query pianificate e fornendo agli sviluppatori l'accesso solo alle tabelle popolate dalle query pianificate. Ciò riduce al minimo l'impatto delle query involontarie e di lunga durata.

## Esempio: utilizzo di analisi in tempo reale per rilevare pagamenti fraudolenti e prendere decisioni aziendali migliori
<a name="scheduledqueries-example"></a>

Prendi in considerazione un sistema di pagamento che elabora le transazioni inviate da più point-of-sale terminali distribuiti nelle principali città metropolitane degli Stati Uniti d'America. Vuoi utilizzare Amazon Timestream LiveAnalytics per archiviare e analizzare i dati delle transazioni, in modo da poter rilevare transazioni fraudolente ed eseguire query di analisi in tempo reale. Queste domande possono aiutarti a rispondere a domande aziendali come identificare i point-of-sale terminali più trafficati e meno utilizzati all'ora, l'ora più trafficata del giorno per ogni città e la città con il maggior numero di transazioni all'ora. 

Il sistema elabora circa 100.000 transazioni al minuto. Ogni transazione memorizzata in Amazon Timestream è di 100 LiveAnalytics byte. Hai configurato 10 query che vengono eseguite ogni minuto per rilevare vari tipi di pagamenti fraudolenti. Hai anche creato 25 query che aggregano e suddividono i dati in varie dimensioni per aiutarti a rispondere alle tue domande aziendali. Ognuna di queste query elabora i dati dell'ultima ora. 

Hai creato una dashboard per visualizzare i dati generati da queste query. La dashboard contiene 25 widget, viene aggiornata ogni ora e in genere è accessibile da 10 utenti in un dato momento. Infine, l'archivio di memoria è configurato con un periodo di conservazione dei dati di 2 ore e l'archivio magnetico è configurato per avere un periodo di conservazione dei dati di 6 mesi. 

In questo caso, puoi utilizzare query di analisi in tempo reale che ricalcolano i dati ogni volta che si accede e si aggiorna la dashboard, oppure utilizzare tabelle derivate per la dashboard. Il costo delle query per i dashboard basati su query di analisi in tempo reale sarà di 120,70 dollari al mese. [Al contrario, il costo delle query di dashboard basate su tabelle derivate sarà di 12,27 dollari al mese (consulta Amazon Timestream per i prezzi). LiveAnalytics](https://aws.amazon.com/timestream/pricing/) In questo caso, l'utilizzo di tabelle derivate riduce il costo delle query di circa 10 volte.

# Concetti di interrogazione pian
<a name="scheduledqueries-concepts"></a>

**Stringa di interrogazione**: questa è l'interrogazione il cui risultato viene precalcolato e memorizzato in un altro Timestream per tabella. LiveAnalytics [È possibile definire una query pianificata utilizzando l'intera area di superficie SQL di Timestream for LiveAnalytics, che offre la flessibilità di scrivere query con espressioni di tabella comuni, query annidate, funzioni di finestra o qualsiasi tipo di funzione aggregata e scalare supportata da Timestream per il linguaggio di query. LiveAnalytics ](https://docs.aws.amazon.com/timestream/latest/developerguide/reference.html)

**Espressione di pianificazione**: consente di specificare quando vengono eseguite le istanze di query pianificate. È possibile specificare le espressioni utilizzando un'espressione cron (ad esempio, esegui ogni giorno alle 8:00 UTC) o un'espressione di frequenza (ad esempio esegui ogni 10 minuti). 

**Configurazione della destinazione**: consente di specificare come mappare il risultato di una query pianificata nella tabella di destinazione in cui verranno archiviati i risultati di questa query pianificata. 

**Configurazione delle notifiche**: Timestream for esegue LiveAnalytics automaticamente le istanze di una query pianificata in base all'espressione di pianificazione. Riceverai una notifica per ogni query di questo tipo eseguita su un argomento SNS configurato quando crei una query pianificata. Questa notifica specifica se l'istanza è stata eseguita correttamente o se si sono verificati errori. Inoltre, fornisce informazioni come i byte misurati, i dati scritti nella tabella di destinazione, l'ora di chiamata successiva e così via.

Di seguito è riportato un esempio di questo tipo di messaggio di notifica.

```
{
    "type":"AUTO_TRIGGER_SUCCESS",
    "arn":"arn:aws:timestream:us-east-1:123456789012:scheduled-query/ PT1mPerMinutePerRegionMeasureCount-9376096f7309",
    "nextInvocationEpochSecond":1637302500,
    "scheduledQueryRunSummary":
    {
        "invocationEpochSecond":1637302440,
        "triggerTimeMillis":1637302445697,
        "runStatus":"AUTO_TRIGGER_SUCCESS",
        "executionStats":
        {
            "executionTimeInMillis":21669,
            "dataWrites":36864,
            "bytesMetered":13547036820,
            "recordsIngested":1200,
            "queryResultRows":1200
        }
    }
}
```

In questo messaggio di notifica, `bytesMetered` sono i byte scansionati dalla query nella tabella di origine e DataWrites sono i byte scritti nella tabella di destinazione. 

**Nota**  
 Se utilizzi queste notifiche a livello di codice, tieni presente che in futuro potrebbero essere aggiunti nuovi campi al messaggio di notifica.

**Posizione del rapporto di errore**: le query pianificate vengono eseguite in modo asincrono e memorizzano i dati nella tabella di destinazione. Se un'istanza rileva errori (ad esempio dati non validi che non è stato possibile archiviare), i record in cui si sono verificati errori vengono scritti in un report di errore nella posizione specificata al momento della creazione di una query pianificata. Devi specificare il bucket S3 e il prefisso per la posizione. Timestream for LiveAnalytics aggiunge il nome della query pianificata e l'ora di invocazione a questo prefisso per aiutarti a identificare gli errori associati a un'istanza specifica di una query pianificata.

**Etichettatura**: è possibile specificare facoltativamente tag da associare a una query pianificata. Per maggiori dettagli, consulta [Tagging Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/tagging-keyspaces.html) for Resources. LiveAnalytics

**Esempio**

Nell'esempio seguente, si calcola un aggregato semplice utilizzando una query pianificata:

```
SELECT region, bin(time, 1m) as minute, 
    SUM(CASE WHEN measure_name = 'metrics' THEN 20 ELSE 5 END) as numDataPoints 
FROM raw_data.devops 
WHERE time BETWEEN @scheduled_runtime - 10m AND @scheduled_runtime + 1m 
GROUP BY bin(time, 1m), region
```

`@scheduled_runtime parameter`- In questo esempio, noterai che la query accetta uno speciale parametro denominato. `@scheduled_runtime` Si tratta di un parametro speciale (di tipo Timestamp) che il servizio imposta quando richiama un'istanza specifica di una query pianificata in modo da poter controllare in modo deterministico l'intervallo di tempo per il quale un'istanza specifica di una query pianificata analizza i dati nella tabella di origine. Puoi utilizzarlo `@scheduled_runtime` nella tua query in qualsiasi posizione in cui è previsto un tipo di timestamp.

Consideriamo un esempio in cui si imposta un'espressione di pianificazione: cron (0/5 \$1 \$1 \$1? \$1) dove la query pianificata verrà eseguita al minuto 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55 di ogni ora. Per l'istanza attivata il 2021-12-01 00:05:00, il parametro @scheduled\$1runtime viene inizializzato su questo valore, in modo che l'istanza in questo momento operi su dati compresi tra 2021-11-30 23:55:00 e 2021-12-01 00:06:00.

**Istanze con intervalli di tempo sovrapposti: come vedrai in questo esempio, due istanze successive di una query pianificata possono sovrapporsi nei rispettivi intervalli di tempo.** Questo è qualcosa che puoi controllare in base ai tuoi requisiti, ai predicati temporali specificati e all'espressione di pianificazione. In questo caso, questa sovrapposizione consente a questi calcoli di aggiornare gli aggregati sulla base di tutti i dati il cui arrivo è stato leggermente ritardato, fino a 10 minuti in questo esempio. L'esecuzione della query attivata alle 00:00:00 del 2021-12-01 coprirà l'intervallo di tempo 2021-11-30 23:50:00 al 2021-12-30 00:01:00 e l'esecuzione della query attivata al 2021-12-01 00:05:00 coprirà l'intervallo dal 2021-11-30 23:55:00 al 01/12/2021 00:06:00. 

Per garantire la correttezza e assicurarsi che gli aggregati archiviati nella tabella di destinazione corrispondano agli aggregati calcolati dalla tabella di origine, Timestream for LiveAnalytics assicura che il calcolo al 01/12/2021 00:05:00 verrà eseguito solo dopo il completamento del calcolo del 01/12/2021 00:00. I risultati di questi ultimi calcoli possono aggiornare qualsiasi aggregato precedentemente materializzato se viene generato un valore più recente. Internamente, Timestream for LiveAnalytics utilizza versioni record in cui ai record generati dalle ultime istanze di una query pianificata verrà assegnato un numero di versione più elevato. Pertanto, gli aggregati calcolati dalla chiamata alle 00:05:00 del 01/12/2021 possono aggiornare gli aggregati calcolati dalla chiamata alle 00:00:00del 01/12/2021, supponendo che i dati più recenti siano disponibili nella tabella di origine.

Trigger **automatici e trigger manuali**: dopo la creazione di una query pianificata, Timestream for eseguirà automaticamente le istanze in base alla pianificazione specificata. LiveAnalytics Tali trigger automatici sono gestiti interamente dal servizio. 

Tuttavia, potrebbero esserci scenari in cui potresti voler avviare manualmente alcune istanze di una query pianificata. Ad esempio, se un'istanza specifica ha avuto esito negativo nell'esecuzione di una query, se sono arrivati dati o aggiornamenti in ritardo nella tabella di origine dopo l'esecuzione automatica della pianificazione o se si desidera aggiornare la tabella di destinazione per intervalli di tempo non coperti dalle esecuzioni automatiche di query (ad esempio, per gli intervalli di tempo prima della creazione di una query pianificata). 

È possibile utilizzare l' ExecuteScheduledQuery API per avviare manualmente un'istanza specifica di una query pianificata passando il InvocationTime parametro, che è un valore utilizzato per il parametro @scheduled\$1runtime. Di seguito sono riportate alcune considerazioni importanti relative all'utilizzo dell' ExecuteScheduledQuery API:
+ Se state attivando più di queste chiamate, dovete assicurarvi che queste chiamate non generino risultati in intervalli di tempo sovrapposti. Se non riesci a garantire che gli intervalli di tempo non si sovrappongano, assicurati che queste esecuzioni di query vengano avviate in sequenza una dopo l'altra. Se avviate contemporaneamente più esecuzioni di query che si sovrappongono nei rispettivi intervalli di tempo, nei report sugli errori relativi a queste esecuzioni di query è possibile che si verifichino conflitti di versione.
+ È possibile avviare le chiamate con qualsiasi valore di timestamp per @scheduled\$1runtime. Quindi è tua responsabilità impostare i valori in modo appropriato in modo che gli intervalli di tempo appropriati vengano aggiornati nella tabella di destinazione corrispondente agli intervalli in cui i dati sono stati aggiornati nella tabella di origine.
+ L' ExecuteScheduledQuery API funziona in modo asincrono. Dopo una chiamata riuscita, il servizio invia una risposta di 200 e procede all'esecuzione della query. Tuttavia, se sono in esecuzione contemporaneamente più esecuzioni di query pianificate, è possibile prevedere potenziali ritardi nell'esecuzione delle esecuzioni pianificate attivate manualmente. 

# Espressioni di pianificazione per le interrogazioni pianificate
<a name="scheduledqueries-schedule"></a>

Puoi creare query pianificate in base a una pianificazione automatica utilizzando Amazon LiveAnalytics Timestream per query pianificate che utilizzano espressioni cron o rate. Tutte le query pianificate utilizzano il fuso orario UTC e la precisione minima possibile per le pianificazioni è di 1 minuto. 

*Due modi per specificare le espressioni di pianificazione sono *cron* e rate.* Le espressioni cron offrono un controllo più preciso della pianificazione, mentre le espressioni rate sono più semplici da esprimere ma non dispongono di un controllo granulare. 

Ad esempio, con un'espressione cron, puoi definire una query pianificata che viene attivata a un'ora specifica in un determinato giorno di ogni settimana o mese, o un minuto specifico ogni ora solo dal lunedì al venerdì e così via. Al contrario, le espressioni rate avviano una query pianificata a una frequenza regolare, ad esempio una volta ogni minuto, ora o giorno, a partire dall'ora esatta in cui viene creata la query pianificata.

**Espressione cron**
+ *Sintassi*

  ```
  cron(fields)
  ```

  Le espressioni Cron hanno sei campi obbligatori separati da uno spazio vuoto.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/scheduledqueries-schedule.html)

**Caratteri jolly**
  + Il carattere jolly \$1, \$1 (virgola) include valori aggiuntivi. Nel campo Month (Mese), JAN,FEB,MAR (GEN,FEB,MAR) include gennaio, febbraio e marzo.
  + Il carattere jolly \$1-\$1 (trattino) specifica gli intervalli. Nel campo Day (Giorno), 1-15 include i giorni dall'1 al 15 del mese specificato. 
  + Il carattere jolly \$1\$1\$1 (asterisco) include tutti i valori del campo. Nel campo Ore, \$1\$1\$1 includerebbe ogni ora. Non è possibile utilizzare \$1\$1\$1 in entrambi i Day-of-week campi Day-of-month e. Se lo usi in uno, devi usare\$1? \$1 nell'altra.
  + Il carattere jolly \$1/\$1 (barra in avanti) specifica gli incrementi. Nel campo Minuti, è possibile inserire 1/10 per specificare ogni decimo minuto, a partire dal primo minuto dell'ora (ad esempio, l'undicesimo, il ventunesimo e il 31° minuto e così via). 
  + Il\$1? \$1 (punto interrogativo) il carattere jolly specifica l'uno o l'altro. Nel Day-of-month campo puoi inserire \$17\$1 e se non ti interessa in che giorno della settimana è il 7, puoi inserire\$1? \$1 nel campo. Day-of-week
  + Il carattere jolly \$1L\$1 nei Day-of-week campi Day-of-month or specifica l'ultimo giorno del mese o della settimana. 
  + Il carattere jolly W nel campo specifica un giorno della settimana Day-of-month. Nel Day-of-month campo, 3W specifica il giorno della settimana più vicino al terzo giorno del mese. 
  + Il carattere jolly \$1\$1\$1 nel Day-of-week campo specifica una determinata istanza del giorno della settimana specificato all'interno di un mese. Ad esempio, 3\$12 sarebbe il secondo martedì del mese: il 3 fa riferimento a martedì perché è il terzo giorno di ogni settimana e il 2 fa riferimento al secondo giorno di questo tipo in un mese. 
**Nota**  
Se si utilizza un carattere '\$1', è possibile definire solo un'espressione nel campo. day-of-week Ad esempio, "3\$11,6\$13" non è valido perché viene interpretato come due espressioni. 

**Limitazioni**
  + Non puoi specificare i campi Day-of-month e Day-of-week nella stessa espressione cron. Se si specifica un valore (o un \$1) in uno dei campi, è necessario utilizzare un \$1? \$1 (punto interrogativo) nell'altro.
  + Le espressioni Cron che indicano frequenze più rapide di 1 minuto non sono supportate.

  **Esempi**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/scheduledqueries-schedule.html)

**Espressioni della frequenza**
+ Un espressione rate inizia quando crei la regola di evento pianificato e successivamente la esegui nella relativa pianificazione definita. Le espressioni rate hanno due campi obbligatori. I campi sono separati da uno spazio vuoto. 

  *Sintassi*

  ```
  rate(value unit)
  ```
  + `value`: Un numero positivo.
  + `unit`: L'unità di tempo. Sono necessarie unità diverse per i valori di 1 (ad esempio, minuto) e i valori superiori a 1 (ad esempio, minuti). Valori validi: minuto \$1 minuti \$1 ora \$1 ore \$1 giorno \$1 giorni

# Mappature dei modelli di dati per le interrogazioni pianificate
<a name="scheduledqueries-mappings"></a>

Timestream for LiveAnalytics supporta la modellazione flessibile dei dati nelle sue tabelle e questa stessa flessibilità si applica ai risultati delle query pianificate che vengono materializzate in un altro Timestream per tabella. LiveAnalytics Con le interrogazioni pianificate, è possibile eseguire query su qualsiasi tabella, indipendentemente dal fatto che contenga dati in record a più misure o record di singola misura, e scrivere i risultati della query utilizzando record a più o a misura singola. 

È possibile utilizzare il TargetConfiguration nella specifica di un'interrogazione pianificata per mappare i risultati della query alle colonne appropriate nella tabella derivata di destinazione. Le sezioni seguenti descrivono i diversi modi di TargetConfiguration specificarlo per ottenere modelli di dati diversi nella tabella derivata. In particolare, vedrai:
+ Come scrivere su record multimisura quando il risultato della query non ha un nome di misura e si specifica il nome della TargetConfiguration misura di destinazione in.
+ Come si utilizza il nome della misura nei risultati della query per scrivere record con più misure. 
+ Come definire un modello per scrivere più record con diversi attributi multimisura.
+ Come definire un modello per scrivere su record di singola misura nella tabella derivata.
+ In che modo è possibile interrogare record di singola misura, record di and/or più misure in un'interrogazione pianificata e far sì che i risultati vengano materializzati in un record a misura singola o in un record a più misure, il che consente di scegliere la flessibilità dei modelli di dati.

## Esempio: nome della misura di destinazione per i record multimisura
<a name="scheduledqueries-mappings-targetmeasurename"></a>

In questo esempio, si vedrà che la query sta leggendo i dati da una tabella con dati a più misure e sta scrivendo i risultati in un'altra tabella utilizzando record multimisura. Il risultato della query pianificata non ha una colonna con il nome della misura naturale. Qui, si specifica il nome della misura nella tabella derivata utilizzando la TargetMultiMeasureName proprietà in TargetConfiguration. TimestreamConfiguration. 

```
{
    "Name" : "CustomMultiMeasureName",
    "QueryString" : "SELECT region, bin(time, 1h) as hour, AVG(memory_cached) as avg_mem_cached_1h, MIN(memory_free) as min_mem_free_1h, MAX(memory_used) as max_mem_used_1h, SUM(disk_io_writes) as sum_1h, AVG(disk_used) as avg_disk_used_1h, AVG(disk_free) as avg_disk_free_1h, MAX(cpu_user) as max_cpu_user_1h, MIN(cpu_idle) as min_cpu_idle_1h, MAX(cpu_system) as max_cpu_system_1h FROM raw_data.devops_multi WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 14h AND bin(@scheduled_runtime, 1h) - 2h AND measure_name = 'metrics' GROUP BY region, bin(time, 1h)",
    "ScheduleConfiguration" : {
        "ScheduleExpression" : "cron(0 0/1 * * ? *)"
    },
    "NotificationConfiguration" : {
        "SnsConfiguration" : {
            "TopicArn" : "******"
        }
    },
    "ScheduledQueryExecutionRoleArn": "******",
    "TargetConfiguration": {
        "TimestreamConfiguration": {
            "DatabaseName" : "derived",
            "TableName" : "dashboard_metrics_1h_agg_1",
            "TimeColumn" : "hour",
            "DimensionMappings" : [
                {
                    "Name": "region",
                    "DimensionValueType" : "VARCHAR"
                }
            ],
            "MultiMeasureMappings" : {
                "TargetMultiMeasureName": "dashboard-metrics",
                "MultiMeasureAttributeMappings" : [
                    {
                        "SourceColumn" : "avg_mem_cached_1h",
                        "MeasureValueType" : "DOUBLE",
                        "TargetMultiMeasureAttributeName" : "avgMemCached"
                    },
                    {
                        "SourceColumn" : "min_mem_free_1h",
                        "MeasureValueType" : "DOUBLE"
                    },
                    {
                        "SourceColumn" : "max_mem_used_1h",
                        "MeasureValueType" : "DOUBLE"
                    },
                    {
                        "SourceColumn" : "sum_1h",
                        "MeasureValueType" : "DOUBLE",
                        "TargetMultiMeasureAttributeName" : "totalDiskWrites"
                    },
                    {
                        "SourceColumn" : "avg_disk_used_1h",
                        "MeasureValueType" : "DOUBLE"
                    },
                    {
                        "SourceColumn" : "avg_disk_free_1h",
                        "MeasureValueType" : "DOUBLE"
                    },
                    {
                        "SourceColumn" : "max_cpu_user_1h",
                        "MeasureValueType" : "DOUBLE",
                        "TargetMultiMeasureAttributeName" : "CpuUserP100"
                    },
                    {
                        "SourceColumn" : "min_cpu_idle_1h",
                        "MeasureValueType" : "DOUBLE"
                    },
                    {
                        "SourceColumn" : "max_cpu_system_1h",
                        "MeasureValueType" : "DOUBLE",
                        "TargetMultiMeasureAttributeName" : "CpuSystemP100"
                    }  
                ]
            }
        }
    },
    "ErrorReportConfiguration": {
        "S3Configuration" : {
            "BucketName" : "******",
            "ObjectKeyPrefix": "errors",
            "EncryptionOption": "SSE_S3"
        }
    }
}
```

La mappatura in questo esempio crea un record multimisura con il nome della misura dashboard-metrics e i nomi degli attributi, min\$1mem\$1free\$11h, max\$1mem\$1used\$11h, avg\$1disk\$1used\$11h avgMemCached, avg\$1disk\$1free\$11h, P100, min\$1cpu\$1idle\$11h, P100. totalDiskWrites CpuUser CpuSystem Si noti l'uso opzionale di TargetMultiMeasureAttributeName per rinominare le colonne di output della query con un nome di attributo diverso utilizzato per la materializzazione dei risultati.

Di seguito è riportato lo schema per la tabella di destinazione una volta materializzata questa query pianificata. Come si può vedere dal Timestream per il tipo di LiveAnalytics attributo nel risultato seguente, i risultati vengono materializzati in un record multimisura con un nome a misura singola`dashboard-metrics`, come mostrato nello schema di misura.


| Colonna | Tipo | Timestream per il tipo di attributo LiveAnalytics  | 
| --- | --- | --- | 
|  region  |  varchar  |  DIMENSIONE  | 
|  measure\$1name  |  varchar  |  MEASURE\$1NAME  | 
|  time  |  timestamp  |  TIMESTAMP  | 
|  CpuSystemP100  |  virgola mobile a doppia precisione  |  MULTIPLO  | 
|  avgMemCached  |  virgola mobile a doppia precisione  |  MULTI  | 
|  min\$1cpu\$1idle\$11h  |  virgola mobile a doppia precisione  |  MULTIPLO  | 
|  avg\$1disk\$1free\$11h  |  virgola mobile a doppia precisione  |  MULTIPLO  | 
|  avg\$1disk\$1used\$11h  |  virgola mobile a doppia precisione  |  MULTI  | 
|  totalDiskWrites  |  virgola mobile a doppia precisione  |  MULTI  | 
|  max\$1mem\$1used\$11 h  |  virgola mobile a doppia precisione  |  MULTIPLO  | 
|  min\$1mem\$1free\$11 h  |  virgola mobile a doppia precisione  |  MULTIPLO  | 
|  CpuUserP100  |  virgola mobile a doppia precisione  |  MULTIPLO  | 

Di seguito sono riportate le misure corrispondenti ottenute con una query SHOW MEASURES.


| measure\$1name | data\$1type | Dimensioni | 
| --- | --- | --- | 
|  metriche del pannello di controllo  |  multi  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 

## Esempio: utilizzo del nome della misura da una query pianificata in record multimisura
<a name="scheduledqueries-mappings-usingmeasurename"></a>

In questo esempio, vedrete una query che legge da una tabella con record a misura singola e materializza i risultati in record a più misure. In questo caso, il risultato della query pianificata ha una colonna i cui valori possono essere utilizzati come nomi di misure nella tabella di destinazione in cui vengono materializzati i risultati dell'interrogazione pianificata. È quindi possibile specificare il nome della misura per il record multimisura nella tabella derivata utilizzando la MeasureNameColumn proprietà in. TargetConfiguration TimestreamConfiguration. 

```
{
    "Name" : "UsingMeasureNameFromQueryResult",
    "QueryString" : "SELECT region, bin(time, 1h) as hour, measure_name, AVG(CASE WHEN measure_name IN ('memory_cached', 'disk_used', 'disk_free') THEN measure_value::double ELSE NULL END) as avg_1h, MIN(CASE WHEN measure_name IN ('memory_free', 'cpu_idle') THEN measure_value::double ELSE NULL END) as min_1h, SUM(CASE WHEN measure_name IN ('disk_io_writes') THEN measure_value::double ELSE NULL END) as sum_1h, MAX(CASE WHEN measure_name IN ('memory_used', 'cpu_user', 'cpu_system') THEN measure_value::double ELSE NULL END) as max_1h FROM raw_data.devops WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 14h AND bin(@scheduled_runtime, 1h) - 2h AND measure_name IN ('memory_free', 'memory_used', 'memory_cached', 'disk_io_writes', 'disk_used', 'disk_free', 'cpu_user', 'cpu_system', 'cpu_idle') GROUP BY region, measure_name, bin(time, 1h)",
    "ScheduleConfiguration" : {
        "ScheduleExpression" : "cron(0 0/1 * * ? *)"
    },
    "NotificationConfiguration" : {
        "SnsConfiguration" : {
            "TopicArn" : "******"
        }
    },
    "ScheduledQueryExecutionRoleArn": "******",
    "TargetConfiguration": {
        "TimestreamConfiguration": {
            "DatabaseName" : "derived",
            "TableName" : "dashboard_metrics_1h_agg_2",
            "TimeColumn" : "hour",
            "DimensionMappings" : [
                {
                    "Name": "region",
                    "DimensionValueType" : "VARCHAR"
                }
            ],
            "MeasureNameColumn" : "measure_name",
            "MultiMeasureMappings" : {
                "MultiMeasureAttributeMappings" : [
                    {
                        "SourceColumn" : "avg_1h",
                        "MeasureValueType" : "DOUBLE"
                    },
                    {
                        "SourceColumn" : "min_1h",
                        "MeasureValueType" : "DOUBLE",
                        "TargetMultiMeasureAttributeName": "p0_1h"
                    },
                    {
                        "SourceColumn" : "sum_1h",
                        "MeasureValueType" : "DOUBLE"
                    },
                    {
                        "SourceColumn" : "max_1h",
                        "MeasureValueType" : "DOUBLE",
                        "TargetMultiMeasureAttributeName": "p100_1h"
                    } 
                ]
            }
        }
    },
    "ErrorReportConfiguration": {
        "S3Configuration" : {
            "BucketName" : "******",
            "ObjectKeyPrefix": "errors",
            "EncryptionOption": "SSE_S3"
        }
    }
}
```

La mappatura in questo esempio creerà record multimisura con gli attributi avg\$11h, p0\$11h, sum\$11h, p100\$11h e utilizzerà i valori della colonna measure\$1name nel risultato della query come nome della misura per i record multimisura nella tabella di destinazione. Si noti inoltre che gli esempi precedenti utilizzano facoltativamente il con un sottoinsieme delle mappature per rinominare gli attributi. TargetMultiMeasureAttributeName Ad esempio, min\$11h è stato rinominato in p0\$11h e max\$11h è stato rinominato in p100\$11h.

Di seguito è riportato lo schema per la tabella di destinazione una volta materializzata questa query pianificata. Come si può vedere dal Timestream per il tipo di LiveAnalytics attributo nel risultato seguente, i risultati vengono materializzati in un record multimisura. Se si esamina lo schema di misura, sono stati inseriti nove diversi nomi di misure che corrispondono ai valori visualizzati nei risultati della query.


| Colonna | Tipo | Timestream per il tipo di attributo LiveAnalytics  | 
| --- | --- | --- | 
|  region  |  varchar  |  DIMENSIONE  | 
|  measure\$1name  |  varchar  |  MEASURE\$1NAME  | 
|  time  |  timestamp  |  TIMESTAMP  | 
|  sum\$11h  |  virgola mobile a doppia precisione  |  MULTI  | 
|  p100\$11h  |  virgola mobile a doppia precisione  |  MULTI  | 
|  p0\$11h  |  virgola mobile a doppia precisione  |  MULTI  | 
|  avg\$11h  |  virgola mobile a doppia precisione  |  MULTI  | 

Di seguito sono riportate le misure corrispondenti ottenute con una query SHOW MEASURES.


| measure\$1name | data\$1type | Dimensioni | 
| --- | --- | --- | 
|  cpu\$1idle  |  multi  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 
|  sistema\$1cpu  |  multiplo  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 
|  cpu\$1user  |  multiplo  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 
|  disk\$1free  |  multi  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 
|  disk\$1io\$1write  |  multi  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 
|  disk\$1used  |  multi  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 
|  memoria\$1memorizzata nella cache  |  multi  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 
|  senza memoria  |  multiplo  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 
|  senza memoria  |  multiplo  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 

## Esempio: mappatura dei risultati su diversi record multimisura con attributi diversi
<a name="scheduledqueries-mappings-mappintresultstodiffrentmultimeasure"></a>

L'esempio seguente mostra come è possibile mappare diverse colonne del risultato della query in diversi record multimisura con nomi di misure diversi. Se viene visualizzata la seguente definizione di query pianificata, il risultato della query ha le seguenti colonne: region, hour, avg\$1mem\$1cached\$11h, min\$1mem\$1free\$11h, max\$1mem\$1used\$11h, total\$1disk\$1io\$1writes\$11h, avg\$1disk\$1used\$11h, avg\$1disk\$1free\$11h, max\$1cpu\$1utente\$11h, sistema\$1cpu\$1max\$11h, min\$1cpu\$1sistema\$11h. `region`è mappato alla dimensione ed `hour` è mappato alla colonna del tempo. 

La MixedMeasureMappings proprietà in. TargetConfiguration TimestreamConfigurationspecifica come mappare le misure su record multimisura nella tabella derivata. 

In questo esempio specifico, avg\$1mem\$1cached\$11h, min\$1mem\$1free\$11h, max\$1mem\$1used\$11h vengono utilizzati in un record multimisura con nome di misura mem\$1aggregates, total\$1disk\$1io\$1writes\$11h, avg\$1disk\$1used\$11h, avg\$1disk\$1free\$11h vengono utilizzati in un altro record multimisura con misura name of disk\$1aggregates e infine max\$1cpu\$1user\$11h, max\$1cpu\$1system\$11h, min\$1cpu\$1system\$11h vengono utilizzati in un altro record multimisura con nome di misura cpu\$1aggregates. 

In queste mappature, è anche possibile utilizzare facoltativamente TargetMultiMeasureAttributeName per rinominare la colonna dei risultati della query in modo che abbia un nome di attributo diverso nella tabella di destinazione. Ad esempio, la colonna dei risultati avg\$1mem\$1cached\$11h viene rinominata in, total\$1disk\$1io\$1writes\$11h viene rinominata total, ecc. avgMemCached IOWrites 

Quando definisci le mappature per i record multimisura, Timestream for ispeziona ogni riga dei risultati della query e ignora automaticamente i valori delle colonne con valori NULL. LiveAnalytics Di conseguenza, nel caso di mappature con più nomi di misure, se tutti i valori di colonna per quel gruppo nella mappatura sono NULL per una determinata riga, per quella riga non viene inserito alcun valore per il nome di quella misura. 

Ad esempio, nella mappatura seguente, avg\$1mem\$1cached\$11h, min\$1mem\$1free\$11h e max\$1mem\$1used\$11h vengono mappati per misurare il nome mem\$1aggregates. Se per una determinata riga del risultato della query, tutti questi valori della colonna sono NULL, Timestream for non inserirà la misura mem\$1aggregates per quella riga. LiveAnalytics Se tutte e nove le colonne di una determinata riga sono NULL, nel rapporto di errore verrà riportato un errore utente. 

```
{
    "Name" : "AggsInDifferentMultiMeasureRecords",
    "QueryString" : "SELECT region, bin(time, 1h) as hour, AVG(CASE WHEN measure_name = 'memory_cached' THEN measure_value::double ELSE NULL END) as avg_mem_cached_1h, MIN(CASE WHEN measure_name = 'memory_free' THEN measure_value::double ELSE NULL END) as min_mem_free_1h, MAX(CASE WHEN measure_name = 'memory_used' THEN measure_value::double ELSE NULL END) as max_mem_used_1h, SUM(CASE WHEN measure_name = 'disk_io_writes' THEN measure_value::double ELSE NULL END) as total_disk_io_writes_1h, AVG(CASE WHEN measure_name = 'disk_used' THEN measure_value::double ELSE NULL END) as avg_disk_used_1h, AVG(CASE WHEN measure_name = 'disk_free' THEN measure_value::double ELSE NULL END) as avg_disk_free_1h, MAX(CASE WHEN measure_name = 'cpu_user' THEN measure_value::double ELSE NULL END) as max_cpu_user_1h, MAX(CASE WHEN measure_name = 'cpu_system' THEN measure_value::double ELSE NULL END) as max_cpu_system_1h, MIN(CASE WHEN measure_name = 'cpu_idle' THEN measure_value::double ELSE NULL END) as min_cpu_system_1h FROM raw_data.devops WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 14h AND bin(@scheduled_runtime, 1h) - 2h AND measure_name IN ('memory_cached', 'memory_free', 'memory_used', 'disk_io_writes', 'disk_used', 'disk_free', 'cpu_user', 'cpu_system', 'cpu_idle') GROUP BY region, bin(time, 1h)",
    "ScheduleConfiguration" : {
        "ScheduleExpression" : "cron(0 0/1 * * ? *)"
    },
    "NotificationConfiguration" : {
        "SnsConfiguration" : {
            "TopicArn" : "******"
        }
    },
    "ScheduledQueryExecutionRoleArn": "******",
    "TargetConfiguration": {
        "TimestreamConfiguration": {
            "DatabaseName" : "derived",
            "TableName" : "dashboard_metrics_1h_agg_3",
            "TimeColumn" : "hour",
            "DimensionMappings" : [
                {
                    "Name": "region",
                    "DimensionValueType" : "VARCHAR"
                }
            ],
            "MixedMeasureMappings" : [
                {
                    "MeasureValueType" : "MULTI",
                    "TargetMeasureName" : "mem_aggregates",
                    "MultiMeasureAttributeMappings" : [
                        {
                            "SourceColumn" : "avg_mem_cached_1h",
                            "MeasureValueType" : "DOUBLE",
                            "TargetMultiMeasureAttributeName": "avgMemCached"
                        },
                        {
                            "SourceColumn" : "min_mem_free_1h",
                            "MeasureValueType" : "DOUBLE"
                        },
                        {
                            "SourceColumn" : "max_mem_used_1h",
                            "MeasureValueType" : "DOUBLE",
                            "TargetMultiMeasureAttributeName": "maxMemUsed"
                        }
                    ]
                },
                {
                    "MeasureValueType" : "MULTI",
                    "TargetMeasureName" : "disk_aggregates",
                    "MultiMeasureAttributeMappings" : [
                        {
                            "SourceColumn" : "total_disk_io_writes_1h",
                            "MeasureValueType" : "DOUBLE",
                            "TargetMultiMeasureAttributeName": "totalIOWrites"
                        },
                        {
                            "SourceColumn" : "avg_disk_used_1h",
                            "MeasureValueType" : "DOUBLE"
                        },
                        {
                            "SourceColumn" : "avg_disk_free_1h",
                            "MeasureValueType" : "DOUBLE"
                        }
                    ]
                },
                {
                    "MeasureValueType" : "MULTI",
                    "TargetMeasureName" : "cpu_aggregates",
                    "MultiMeasureAttributeMappings" : [
                        {
                            "SourceColumn" : "max_cpu_user_1h",
                            "MeasureValueType" : "DOUBLE"
                        },
                        {
                            "SourceColumn" : "max_cpu_system_1h",
                            "MeasureValueType" : "DOUBLE"
                        },
                        {
                            "SourceColumn" : "min_cpu_idle_1h",
                            "MeasureValueType" : "DOUBLE",
                            "TargetMultiMeasureAttributeName": "minCpuIdle"
                        }
                    ]
                }
            ]
        }
    },
    "ErrorReportConfiguration": {
        "S3Configuration" : {
            "BucketName" : "******",
            "ObjectKeyPrefix": "errors",
            "EncryptionOption": "SSE_S3"
        }
    }
}
```

Di seguito è riportato lo schema per la tabella di destinazione una volta materializzata questa query pianificata.


| Colonna | Tipo | Timestream per il tipo di attributo LiveAnalytics  | 
| --- | --- | --- | 
|  region  |  varchar  |  DIMENSIONE  | 
|  measure\$1name  |  varchar  |  MEASURE\$1NAME  | 
|  time  |  timestamp  |  TIMESTAMP  | 
|  minCpuIdle  |  virgola mobile a doppia precisione  |  MULTIPLO  | 
|  max\$1cpu\$1system\$11h  |  virgola mobile a doppia precisione  |  MULTIPLO  | 
|  max\$1cpu\$1user\$11h  |  virgola mobile a doppia precisione  |  MULTIPLO  | 
|  avgMemCached  |  virgola mobile a doppia precisione  |  MULTI  | 
|  maxMemUsed  |  virgola mobile a doppia precisione  |  MULTI  | 
|  min\$1mem\$1free\$11 h  |  virgola mobile a doppia precisione  |  MULTIPLO  | 
|  avg\$1disk\$1free\$11h  |  virgola mobile a doppia precisione  |  MULTIPLO  | 
|  avg\$1disk\$1used\$11h  |  virgola mobile a doppia precisione  |  MULTI  | 
|  totale IOWrites  |  virgola mobile a doppia precisione  |  MULTIPLO  | 

Di seguito sono riportate le misure corrispondenti ottenute con una query SHOW MEASURES.


| measure\$1name | data\$1type | Dimensioni | 
| --- | --- | --- | 
|  cpu\$1aggregates  |  multi  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 
|  disk\$1aggregates  |  multi  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 
|  mem\$1aggregates  |  multi  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 

## Esempio: mappatura dei risultati su record a misura singola con il nome della misura dai risultati della query
<a name="scheduledqueries-mappings-mappintresultstosinglemeasurerecords"></a>

Di seguito è riportato un esempio di interrogazione pianificata i cui risultati vengono materializzati in record a misura singola. In questo esempio, il risultato della query contiene la colonna measure\$1name i cui valori verranno utilizzati come nomi delle misure nella tabella di destinazione. Si utilizza l' MixedMeasureMappings attributo in. TargetConfiguration TimestreamConfiguration per specificare la mappatura della colonna dei risultati della query alla misura scalare nella tabella di destinazione. 

Nella definizione dell'esempio seguente, il risultato della query è previsto in nove valori distinti di measure\$1name. Si elencano tutti i nomi di queste misure nella mappatura e si specifica quale colonna utilizzare per il valore di misura singola per quel nome di misura. Ad esempio, in questa mappatura, se il nome della misura di memory\$1cached viene visualizzato per una determinata riga di risultati, il valore nella colonna avg\$11h viene utilizzato come valore per la misura quando i dati vengono scritti nella tabella di destinazione. Facoltativamente, è possibile utilizzare per fornire un nuovo nome di misura per TargetMeasureName questo valore. 

```
{
    "Name" : "UsingMeasureNameColumnForSingleMeasureMapping",
    "QueryString" : "SELECT region, bin(time, 1h) as hour, measure_name, AVG(CASE WHEN measure_name IN ('memory_cached', 'disk_used', 'disk_free') THEN measure_value::double ELSE NULL END) as avg_1h, MIN(CASE WHEN measure_name IN ('memory_free', 'cpu_idle') THEN measure_value::double ELSE NULL END) as min_1h, SUM(CASE WHEN measure_name IN ('disk_io_writes') THEN measure_value::double ELSE NULL END) as sum_1h, MAX(CASE WHEN measure_name IN ('memory_used', 'cpu_user', 'cpu_system') THEN measure_value::double ELSE NULL END) as max_1h FROM raw_data.devops WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 14h AND bin(@scheduled_runtime, 1h) - 2h AND measure_name IN ('memory_free', 'memory_used', 'memory_cached', 'disk_io_writes', 'disk_used', 'disk_free', 'cpu_user', 'cpu_system', 'cpu_idle') GROUP BY region, bin(time, 1h), measure_name",
    "ScheduleConfiguration" : {
        "ScheduleExpression" : "cron(0 0/1 * * ? *)"
    },
    "NotificationConfiguration" : {
        "SnsConfiguration" : {
            "TopicArn" : "******"
        }
    },
    "ScheduledQueryExecutionRoleArn": "******",
    "TargetConfiguration": {
        "TimestreamConfiguration": {
            "DatabaseName" : "derived",
            "TableName" : "dashboard_metrics_1h_agg_4",
            "TimeColumn" : "hour",
            "DimensionMappings" : [
                {
                    "Name": "region",
                    "DimensionValueType" : "VARCHAR"
                }
            ],
            "MeasureNameColumn" : "measure_name",
            "MixedMeasureMappings" : [
                {
                    "MeasureName" : "memory_cached",
                    "MeasureValueType" : "DOUBLE",
                    "SourceColumn" : "avg_1h",
                    "TargetMeasureName" : "AvgMemCached"
                },
                {
                    "MeasureName" : "disk_used",
                    "MeasureValueType" : "DOUBLE",
                    "SourceColumn" : "avg_1h"
                },
                {
                    "MeasureName" : "disk_free",
                    "MeasureValueType" : "DOUBLE",
                    "SourceColumn" : "avg_1h"
                },
                {
                    "MeasureName" : "memory_free",
                    "MeasureValueType" : "DOUBLE",
                    "SourceColumn" : "min_1h",
                    "TargetMeasureName" : "MinMemFree"
                },
                {
                    "MeasureName" : "cpu_idle",
                    "MeasureValueType" : "DOUBLE",
                    "SourceColumn" : "min_1h"
                },
                {
                    "MeasureName" : "disk_io_writes",
                    "MeasureValueType" : "DOUBLE",
                    "SourceColumn" : "sum_1h",
                    "TargetMeasureName" : "total-disk-io-writes"
                },
                {
                    "MeasureName" : "memory_used",
                    "MeasureValueType" : "DOUBLE",
                    "SourceColumn" : "max_1h",
                    "TargetMeasureName" : "maxMemUsed"
                },
                {
                    "MeasureName" : "cpu_user",
                    "MeasureValueType" : "DOUBLE",
                    "SourceColumn" : "max_1h"
                },
                {
                    "MeasureName" : "cpu_system",
                    "MeasureValueType" : "DOUBLE",
                    "SourceColumn" : "max_1h"
                }
            ]
        }
    },
    "ErrorReportConfiguration": {
        "S3Configuration" : {
            "BucketName" : "******",
            "ObjectKeyPrefix": "errors",
            "EncryptionOption": "SSE_S3"
        }
    }
}
```

Di seguito è riportato lo schema per la tabella di destinazione una volta materializzata questa query pianificata. Come si può vedere dallo schema, la tabella utilizza record a misura singola. Se si elenca lo schema di misure per la tabella, verranno visualizzate le nove misure scritte in base alla mappatura fornita nelle specifiche.


| Colonna | Tipo | Timestream per il tipo di attributo LiveAnalytics  | 
| --- | --- | --- | 
|  region  |  varchar  |  DIMENSIONE  | 
|  measure\$1name  |  varchar  |  MEASURE\$1NAME  | 
|  time  |  timestamp  |  TIMESTAMP  | 
|  measure\$1value::double  |  virgola mobile a doppia precisione  |  MISURA\$1VALORE  | 

Di seguito sono riportate le misure corrispondenti ottenute con una query SHOW MEASURES.


| measure\$1name | data\$1type | Dimensioni | 
| --- | --- | --- | 
|  AvgMemCached  |  virgola mobile a doppia precisione  |  [\$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1]  | 
|  MinMemFree  |  virgola mobile a doppia precisione  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 
|  cpu\$1idle  |  virgola mobile a doppia precisione  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 
|  sistema\$1cpu  |  virgola mobile a doppia precisione  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 
|  cpu\$1user  |  virgola mobile a doppia precisione  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 
|  disk\$1free  |  virgola mobile a doppia precisione  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 
|  disk\$1used  |  virgola mobile a doppia precisione  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 
|  maxMemUsed  |  virgola mobile a doppia precisione  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 
|  total-disk-io-writes  |  virgola mobile a doppia precisione  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 

## Esempio: mappatura dei risultati su record a misura singola con colonne di risultati di query come nomi di misure
<a name="scheduledqueries-mappings-mappintresultstsolumnsasmeasurename"></a>

In questo esempio, si dispone di una query i cui risultati non hanno una colonna con il nome della misura. Al contrario, si desidera utilizzare il nome della colonna dei risultati della query come nome della misura quando si esegue la mappatura dell'output su record a misura singola. In precedenza c'era un esempio in cui un risultato simile veniva scritto su un record a più misure. In questo esempio, vedrete come mapparlo su record a misura singola, se ciò si adatta allo scenario dell'applicazione. 

Ancora una volta, si specifica questa mappatura utilizzando la MixedMeasureMappings proprietà in. TargetConfiguration TimestreamConfiguration. Nell'esempio seguente, si vede che il risultato della query ha nove colonne. Le colonne dei risultati vengono utilizzate come nomi di misure e i valori come valori di singola misura. 

Ad esempio, per una determinata riga del risultato della query, il nome di colonna avg\$1mem\$1cached\$11h viene utilizzato come nome della colonna e valore associato alla colonna e avg\$1mem\$1cached\$11h viene utilizzato come valore di misura per il record a misura singola. È inoltre possibile utilizzare TargetMeasureName un nome di misura diverso nella tabella di destinazione. Ad esempio, per i valori nella colonna sum\$11h, la mappatura specifica di utilizzare total\$1disk\$1io\$1writes\$11h come nome della misura nella tabella di destinazione. Se il valore di una colonna è NULL, la misura corrispondente viene ignorata. 

```
{
    "Name" : "SingleMeasureMappingWithoutMeasureNameColumnInQueryResult",
    "QueryString" : "SELECT region, bin(time, 1h) as hour, AVG(CASE WHEN measure_name = 'memory_cached' THEN measure_value::double ELSE NULL END) as avg_mem_cached_1h, AVG(CASE WHEN measure_name = 'disk_used' THEN measure_value::double ELSE NULL END) as avg_disk_used_1h, AVG(CASE WHEN measure_name = 'disk_free' THEN measure_value::double ELSE NULL END) as avg_disk_free_1h, MIN(CASE WHEN measure_name = 'memory_free' THEN measure_value::double ELSE NULL END) as min_mem_free_1h, MIN(CASE WHEN measure_name = 'cpu_idle' THEN measure_value::double ELSE NULL END) as min_cpu_idle_1h, SUM(CASE WHEN measure_name = 'disk_io_writes' THEN measure_value::double ELSE NULL END) as sum_1h, MAX(CASE WHEN measure_name = 'memory_used' THEN measure_value::double ELSE NULL END) as max_mem_used_1h, MAX(CASE WHEN measure_name = 'cpu_user' THEN measure_value::double ELSE NULL END) as max_cpu_user_1h, MAX(CASE WHEN measure_name = 'cpu_system' THEN measure_value::double ELSE NULL END) as max_cpu_system_1h FROM raw_data.devops WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 14h AND bin(@scheduled_runtime, 1h) - 2h AND measure_name IN ('memory_free', 'memory_used', 'memory_cached', 'disk_io_writes', 'disk_used', 'disk_free', 'cpu_user', 'cpu_system', 'cpu_idle') GROUP BY region, bin(time, 1h)",
    "ScheduleConfiguration" : {
        "ScheduleExpression" : "cron(0 0/1 * * ? *)"
    },
    "NotificationConfiguration" : {
        "SnsConfiguration" : {
            "TopicArn" : "******"
        }
    },
    "ScheduledQueryExecutionRoleArn": "******",
    "TargetConfiguration": {
        "TimestreamConfiguration": {
            "DatabaseName" : "derived",
            "TableName" : "dashboard_metrics_1h_agg_5",
            "TimeColumn" : "hour",
            "DimensionMappings" : [
                {
                    "Name": "region",
                    "DimensionValueType" : "VARCHAR"
                }
            ],
            "MixedMeasureMappings" : [
                {
                    "MeasureValueType" : "DOUBLE",
                    "SourceColumn" : "avg_mem_cached_1h"
                },
                {
                    "MeasureValueType" : "DOUBLE",
                    "SourceColumn" : "avg_disk_used_1h"
                },
                {
                    "MeasureValueType" : "DOUBLE",
                    "SourceColumn" : "avg_disk_free_1h"
                },
                {
                    "MeasureValueType" : "DOUBLE",
                    "SourceColumn" : "min_mem_free_1h"
                },
                {
                    "MeasureValueType" : "DOUBLE",
                    "SourceColumn" : "min_cpu_idle_1h"
                },
                {
                    "MeasureValueType" : "DOUBLE",
                    "SourceColumn" : "sum_1h",
                    "TargetMeasureName" : "total_disk_io_writes_1h"
                },
                {
                    "MeasureValueType" : "DOUBLE",
                    "SourceColumn" : "max_mem_used_1h"
                },
                {
                    "MeasureValueType" : "DOUBLE",
                    "SourceColumn" : "max_cpu_user_1h"
                },
                {
                    "MeasureValueType" : "DOUBLE",
                    "SourceColumn" : "max_cpu_system_1h"
                }
            ]
        }
    },
    "ErrorReportConfiguration": {
        "S3Configuration" : {
            "BucketName" : "******",
            "ObjectKeyPrefix": "errors",
            "EncryptionOption": "SSE_S3"
        }
    }
}
```

Di seguito è riportato lo schema per la tabella di destinazione una volta materializzata questa query pianificata. Come puoi vedere, la tabella di destinazione memorizza record con valori a misura singola di tipo double. Analogamente, lo schema delle misure per la tabella mostra i nomi delle nove misure. Notate inoltre che il nome della misura total\$1disk\$1io\$1writes\$11h è presente sin dalla mappatura rinominata sum\$11h in total\$1disk\$1io\$1writes\$11h.


| Colonna | Tipo |  LiveAnalytics Timestream per il tipo di attributo | 
| --- | --- | --- | 
|  region  |  varchar  |  DIMENSIONE  | 
|  measure\$1name  |  varchar  |  MEASURE\$1NAME  | 
|  time  |  timestamp  |  TIMESTAMP  | 
|  measure\$1value::double  |  virgola mobile a doppia precisione  |  MISURA\$1VALORE  | 

Di seguito sono riportate le misure corrispondenti ottenute con una query SHOW MEASURES.


| measure\$1name | data\$1type | Dimensioni | 
| --- | --- | --- | 
|  avg\$1disk\$1free\$11h  |  virgola mobile a doppia precisione  |  [\$1'dimension\$1name': 'regione', 'tipo\$1dati': 'varchar'\$1]  | 
|  avg\$1disk\$1used\$11h  |  virgola mobile a doppia precisione  |  [\$1'dimension\$1name': 'regione', 'tipo\$1dati': 'varchar'\$1]  | 
|  avg\$1mem\$1cached\$11h  |  virgola mobile a doppia precisione  |  [\$1'dimension\$1name': 'regione', 'tipo\$1dati': 'varchar'\$1]  | 
|  max\$1cpu\$1system\$11h  |  virgola mobile a doppia precisione  |  [\$1'dimension\$1name': 'regione', 'tipo\$1dati': 'varchar'\$1]  | 
|  max\$1cpu\$1user\$11h  |  virgola mobile a doppia precisione  |  [\$1'dimension\$1name': 'regione', 'tipo\$1dati': 'varchar'\$1]  | 
|  max\$1mem\$1used\$11h  |  virgola mobile a doppia precisione  |  [\$1'dimension\$1name': 'regione', 'tipo\$1dati': 'varchar'\$1]  | 
|  min\$1cpu\$1idle\$11h  |  virgola mobile a doppia precisione  |  [\$1'dimension\$1name': 'regione', 'tipo\$1dati': 'varchar'\$1]  | 
|  min\$1mem\$1free\$11h  |  virgola mobile a doppia precisione  |  [\$1'dimension\$1name': 'regione', 'tipo\$1dati': 'varchar'\$1]  | 
|  total-disk-io-writes  |  virgola mobile a doppia precisione  |  [\$1'dimension\$1name': 'regione', 'data\$1type': 'varchar'\$1]  | 

# Messaggi di notifica delle interrogazioni pianificate
<a name="scheduledqueries-notification"></a>

Questa sezione descrive i messaggi inviati da Timestream per la LiveAnalytics creazione, l'eliminazione, l'esecuzione o l'aggiornamento dello stato di una query pianificata. 


| Nome del messaggio di notifica | Struttura | Description | 
| --- | --- | --- | 
|  CreatingNotificationMessage  |  <pre>CreatingNotificationMessage {<br />    String arn;<br />    NotificationType type;<br />}</pre>  |  Questo messaggio di notifica viene inviato prima dell'invio della risposta per`CreateScheduledQuery`. La query pianificata viene abilitata dopo l'invio di questa notifica.  *arn* - L'ARN della query pianificata che viene creata. *tipo* - SCHEDULED\$1QUERY\$1CREATING  | 
|  UpdateNotificationMessage  |  <pre> UpdateNotificationMessage {<br />    String arn;<br />    NotificationType type;<br />    QueryState state;<br />}</pre>  |  Questo messaggio di notifica viene inviato quando viene aggiornata una query pianificata. Timestream for LiveAnalytics può disabilitare automaticamente la query pianificata, nel caso in cui si verifichi un errore non recuperabile, ad esempio: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/scheduledqueries-notification.html) *arn* - L'ARN della query pianificata che viene aggiornata. *tipo* - SCHEDULED\$1QUERY\$1UPDATE *stato*: ABILITATO o DISABILITATO  | 
|  DeleteNotificationMessage  |  <pre>DeletionNotificationMessage {<br />    String arn;<br />    NotificationType type;<br />}</pre>  |  Questo messaggio di notifica viene inviato quando viene eliminata una query pianificata.  *arn* - L'ARN della query pianificata che viene creata. *tipo* - SCHEDULED\$1QUERY\$1DELETED  | 
|  SuccessNotificationMessage  |  <pre>SuccessNotificationMessage {<br />    NotificationType type;<br />    String arn;<br />    Date nextInvocationEpochSecond;<br />    ScheduledQueryRunSummary runSummary;<br />}<br /><br />ScheduledQueryRunSummary {<br />    Date invocationTime;<br />    Date triggerTime;<br />    String runStatus;<br />    ExecutionStats executionstats;<br />    ErrorReportLocation errorReportLocation;<br />    String failureReason;<br />}<br /><br /><br />ExecutionStats {<br />    Long bytesMetered;<br />    Long dataWrites;<br />    Long queryResultRows;<br />    Long recordsIngested;<br />    Long executionTimeInMillis;<br />}<br /><br /><br />ErrorReportLocation {<br />    S3ReportLocation s3ReportLocation;<br />}<br /><br /><br />S3ReportLocation {<br />    String bucketName;<br />    String objectKey;<br />}</pre>  |  Questo messaggio di notifica viene inviato dopo l'esecuzione della query pianificata e l'inserimento dei risultati è stato completato correttamente.  *ARN*: l'ARN della query pianificata che viene eliminata. *NotificationType*- AUTO\$1TRIGGER\$1SUCCESS o MANUAL\$1TRIGGER\$1SUCCESS. *nextInvocationEpochSecondo: la* prossima volta che Timestream for eseguirà la query pianificata. LiveAnalytics *RunSummary*: informazioni sull'esecuzione pianificata della query.  | 
|  FailureNotificationMessage  |  <pre>FailureNotificationMessage {<br />    NotificationType type;<br />    String arn;<br />    ScheduledQueryRunSummary runSummary;<br />}<br /><br />ScheduledQueryRunSummary {<br />    Date invocationTime;<br />    Date triggerTime;<br />    String runStatus;<br />    ExecutionStats executionstats;<br />    ErrorReportLocation errorReportLocation;<br />    String failureReason;<br />}<br /><br /><br />ExecutionStats {<br />    Long bytesMetered;<br />    Long dataWrites;<br />    Long queryResultRows;<br />    Long recordsIngested;<br />    Long executionTimeInMillis;<br />}<br /><br /><br />ErrorReportLocation {<br />    S3ReportLocation s3ReportLocation;<br />}<br /><br /><br />S3ReportLocation {<br />    String bucketName;<br />    String objectKey;<br />}</pre>  |  Questo messaggio di notifica viene inviato quando si verifica un errore durante l'esecuzione di una query pianificata o durante l'acquisizione dei risultati della query.  *arn* - L'ARN della query pianificata che viene eseguita. *tipo* - AUTO\$1TRIGGER\$1FAILURE o MANUAL\$1TRIGGER\$1FAILURE. *RunSummary: informazioni sull'esecuzione pianificata della query.*  | 

# Rapporti sugli errori delle query pianificate
<a name="scheduledqueries-errorreport"></a>

Questa sezione descrive la posizione, il formato e i motivi delle segnalazioni di errori generate da Timestream relative agli errori rilevati LiveAnalytics durante l'esecuzione di query pianificate.

**Topics**
+ [Motivi](#scheduled-queries-error-report-reasons)
+ [Location (Ubicazione)](#scheduled-queries-error-report-location)
+ [Formato](#scheduled-queries-error-report-format)
+ [Tipi di errore](#scheduled-queries-error-report-error-types)
+ [Esempio](#scheduled-queries-error-report-example)

## I motivi delle segnalazioni di errore delle query pianificate
<a name="scheduled-queries-error-report-reasons"></a>

I report sugli errori vengono generati per errori ripristinabili. I report sugli errori non vengono generati per errori non recuperabili. Timestream for LiveAnalytics può disabilitare automaticamente le query pianificate quando si verificano errori non recuperabili. Ciò include:
+ `AssumeRole`fallimento
+ Eventuali errori 4xx riscontrati durante la comunicazione con KMS quando viene specificata una chiave KMS gestita dal cliente
+ Eventuali errori 4xx riscontrati durante l'esecuzione di una query pianificata
+ Eventuali errori 4xx riscontrati durante l'inserimento dei risultati della query

Per gli errori non recuperabili, Timestream for LiveAnalytics invia una notifica di errore con un messaggio di errore non recuperabile. Viene inoltre inviata una notifica di aggiornamento che indica che la query pianificata è disabilitata.

## Posizione dei report di errore delle interrogazioni pianificate
<a name="scheduled-queries-error-report-location"></a>

La posizione di segnalazione degli errori di interrogazione pianificata ha la seguente convenzione di denominazione:

```
s3://customer-bucket/customer-prefix/
```

Di seguito è riportato un esempio di query pianificata ARN:

```
arn:aws:timestream:us-east-1:000000000000:scheduled-query/test-query-hd734tegrgfd
```

```
s3://customer-bucket/customer-prefix/test-query-hd734tegrgfd/<InvocationTime>/<Auto or Manual>/<Actual Trigger Time>
```

*Auto*indica le query pianificate automaticamente da Timestream per LiveAnalytics e *Manual* indica le query pianificate attivate manualmente da un utente tramite un'azione API `ExecuteScheduledQuery` in Amazon Timestream for Query. LiveAnalytics Per ulteriori informazioni su `ExecuteScheduledQuery`, consultare [ExecuteScheduledQuery](https://docs.aws.amazon.com/timestream/latest/developerguide/API_query_ExecuteScheduledQuery.html).

## Formato dei report sugli errori delle query pianificate
<a name="scheduled-queries-error-report-format"></a>

 Le segnalazioni di errore hanno il seguente formato JSON:

```
{
    "reportId": <String>,            // A unique string ID for all error reports belonging to a particular scheduled query run
    "errors": [ <Error>, ... ],      // One or more errors
}
```

## Tipi di errori di interrogazione pianificati
<a name="scheduled-queries-error-report-error-types"></a>

L'`Error`oggetto può essere di tre tipi: 
+ Registra gli errori di inserimento

  ```
  {
      "reason": <String>,              // The error message String
      "records": [ <Record>, ... ],    // One or more rejected records )
  }
  ```
+ Errori di analisi e convalida delle righe

  ```
  {
      "reason": <String>,        // The error message String
      "rawLine": <String>,       // [Optional] The raw line String that is being parsed into record(s) to be ingested. This line has encountered the above-mentioned parse error.
  }
  ```
+ Errori generali

  ```
  {
      "reason": <String>,        // The error message
  }
  ```

## Esempio di report sugli errori di interrogazione pianificata
<a name="scheduled-queries-error-report-example"></a>

Di seguito è riportato un esempio di segnalazione di errori prodotta a causa di errori di inserimento. 

```
{
    "reportId": "C9494AABE012D1FBC162A67EA2C18255",
    "errors": [
        {
            "reason": "The record timestamp is outside the time range [2021-11-12T14:18:13.354Z, 2021-11-12T16:58:13.354Z) of the memory store.",
            "records": [
                {
                    "dimensions": [
                        {
                            "name": "dim0",
                            "value": "d0_1",
                            "dimensionValueType": null
                        },
                        {
                            "name": "dim1",
                            "value": "d1_1",
                            "dimensionValueType": null
                        }
                    ],
                    "measureName": "random_measure_value",
                    "measureValue": "3.141592653589793",
                    "measureValues": null,
                    "measureValueType": "DOUBLE",
                    "time": "1637166175635000000",
                    "timeUnit": "NANOSECONDS",
                    "version": null
                },
                {
                    "dimensions": [
                        {
                            "name": "dim0",
                            "value": "d0_2",
                            "dimensionValueType": null
                        },
                        {
                            "name": "dim1",
                            "value": "d1_2",
                            "dimensionValueType": null
                        }
                    ],
                    "measureName": "random_measure_value",
                    "measureValue": "6.283185307179586",
                    "measureValues": null,
                    "measureValueType": "DOUBLE",
                    "time": "1637166175636000000",
                    "timeUnit": "NANOSECONDS",
                    "version": null
                },
                {
                    "dimensions": [
                        {
                            "name": "dim0",
                            "value": "d0_3",
                            "dimensionValueType": null
                        },
                        {
                            "name": "dim1",
                            "value": "d1_3",
                            "dimensionValueType": null
                        }
                    ],
                    "measureName": "random_measure_value",
                    "measureValue": "9.42477796076938",
                    "measureValues": null,
                    "measureValueType": "DOUBLE",
                    "time": "1637166175637000000",
                    "timeUnit": "NANOSECONDS",
                    "version": null
                },
                {
                    "dimensions": [
                        {
                            "name": "dim0",
                            "value": "d0_4",
                            "dimensionValueType": null
                        },
                        {
                            "name": "dim1",
                            "value": "d1_4",
                            "dimensionValueType": null
                        }
                    ],
                    "measureName": "random_measure_value",
                    "measureValue": "12.566370614359172",
                    "measureValues": null,
                    "measureValueType": "DOUBLE",
                    "time": "1637166175638000000",
                    "timeUnit": "NANOSECONDS",
                    "version": null
                }
            ]
        }
    ]
}
```

# Modelli ed esempi di interrogazioni pianificate
<a name="scheduledqueries-examplesandpatterns"></a>

Questa sezione descrive i modelli di utilizzo per le query pianificate e end-to-end alcuni esempi.

**Topics**
+ [Schema di esempio](scheduledqueries-common-schema-example.md)
+ [Pattern](scheduledqueries-patterns.md)
+ [Esempi](scheduledqueries-examples.md)

# Schema di esempio per le interrogazioni pianificate
<a name="scheduledqueries-common-schema-example"></a>

In questo esempio utilizzeremo un'applicazione di esempio che imita uno DevOps scenario di monitoraggio delle metriche di un'ampia flotta di server. Gli utenti desiderano avvisare sull'utilizzo anomalo delle risorse, creare dashboard sul comportamento e sull'utilizzo aggregati della flotta ed eseguire analisi sofisticate su dati recenti e storici per trovare correlazioni. Il diagramma seguente fornisce un'illustrazione della configurazione in cui un insieme di istanze monitorate emette metriche a Timestream for. LiveAnalytics Un altro gruppo di utenti simultanei invia query per avvisi, dashboard o analisi ad hoc, in cui le query e l'inserimento vengono eseguite in parallelo. 

![\[Diagram showing data flow from servers to Timestream database, with users querying for analytics.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/schedquery_common_schema_example.png)


L'applicazione monitorata è modellata come un servizio altamente scalabile distribuito in diverse regioni del mondo. Ogni regione è ulteriormente suddivisa in una serie di unità di scala chiamate celle che presentano un livello di isolamento in termini di infrastruttura all'interno della regione. Ogni cella è ulteriormente suddivisa in silos, che rappresentano un livello di isolamento del software. Ogni silo dispone di cinque microservizi che comprendono un'istanza isolata del servizio. Ogni microservizio dispone di diversi server con diversi tipi di istanze e versioni del sistema operativo, che vengono distribuiti in tre zone di disponibilità. [Questi attributi che identificano i server che emettono le metriche sono modellati come dimensioni in Timestream for.](https://docs.aws.amazon.com/timestream/latest/developerguide/concepts.html) LiveAnalytics In questa architettura, abbiamo una gerarchia di dimensioni (come region, cell, silo e microservice\$1name) e altre dimensioni che attraversano la gerarchia (come instance\$1type e availability\$1zone). 

L'applicazione emette una varietà di metriche (come cpu\$1user e memory\$1free) ed eventi (come task\$1completed e gc\$1reclaimed). Ogni metrica o evento è associato a otto dimensioni (come regione o cella) che identificano in modo univoco il server che lo emette. I dati vengono scritti con le 20 metriche archiviate insieme in un record multimisura con metriche relative ai nomi delle misure e tutti e 5 gli eventi vengono archiviati insieme in un altro record multimisura con eventi relativi ai nomi delle misure. [Il modello di dati, lo schema e la generazione dei dati sono disponibili nel generatore di dati open source.](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/tools/python/perf-scale-workload) Oltre allo schema e alle distribuzioni dei dati, il generatore di dati fornisce un esempio di utilizzo di più scrittori per inserire dati in parallelo, utilizzando la scalabilità di ingestione di Timestream per importare milioni di misurazioni LiveAnalytics al secondo. Di seguito mostriamo lo schema (tabella e schema di misura) e alcuni dati di esempio dal set di dati.

**Topics**
+ [Record multimisura](#scheduledqueries-common-schema-example-mmr)
+ [Record a misura singola](#scheduledqueries-common-schema-example-smr)

## Record multimisura
<a name="scheduledqueries-common-schema-example-mmr"></a>

**Schema della tabella**

Di seguito è riportato lo schema della tabella una volta che i dati vengono inseriti utilizzando record multimisura. È l'output della query DESCRIBE. Supponendo che i dati vengano inseriti in un database raw\$1data e nella tabella devops, di seguito è riportata la query.

```
DESCRIBE "raw_data"."devops"
```


| Colonna | Tipo |  LiveAnalytics Timestream per il tipo di attributo | 
| --- | --- | --- | 
| availability\$1zone | varchar | DIMENSIONE | 
| microservice\$1name | varchar | DIMENSIONE | 
| nome\$1istanza | varchar | DIMENSIONE | 
| nome\$1processo | varchar | DIMENSIONE | 
| os\$1version | varchar | DIMENSIONE | 
| versione jdk | varchar | DIMENSIONE | 
| cellula | varchar | DIMENSIONE | 
| region | varchar | DIMENSIONE | 
| silo | varchar | DIMENSIONE | 
| instance\$1type | varchar | DIMENSIONE | 
| measure\$1name | varchar | MEASURE\$1NAME | 
| time | timestamp | TIMESTAMP | 
| senza memoria | virgola mobile a doppia precisione | MULTIPLO | 
| cpu\$1steal | virgola mobile a doppia precisione | MULTI | 
| cpu\$1iowait | virgola mobile a doppia precisione | MULTI | 
| cpu\$1user | virgola mobile a doppia precisione | MULTI | 
| memoria\$1memorizzata | virgola mobile a doppia precisione | MULTI | 
| disk\$1io\$1reads | virgola mobile a doppia precisione | MULTIPLO | 
| cpu\$1hi | virgola mobile a doppia precisione | MULTI | 
| latenza\$1per\$1lettura | virgola mobile a doppia precisione | MULTI | 
| network\$1bytes\$1out | virgola mobile a doppia precisione | MULTIPLO | 
| cpu\$1idle | virgola mobile a doppia precisione | MULTI | 
| disk\$1free | virgola mobile a doppia precisione | MULTI | 
| memoria\$1usata | virgola mobile a doppia precisione | MULTIPLO | 
| sistema\$1CPU | virgola mobile a doppia precisione | MULTIPLO | 
| descrittori di file in uso | virgola mobile a doppia precisione | MULTIPLO | 
| disk\$1used | virgola mobile a doppia precisione | MULTI | 
| cpu\$1nice | virgola mobile a doppia precisione | MULTI | 
| disk\$1io\$1write | virgola mobile a doppia precisione | MULTI | 
| cpu\$1si | virgola mobile a doppia precisione | MULTI | 
| latenza\$1per\$1scrittura | virgola mobile a doppia precisione | MULTI | 
| bytes\$1in di rete | virgola mobile a doppia precisione | MULTIPLO | 
| stato\$1finale dell'attività | varchar | MULTIPLO | 
| gc\$1pause | virgola mobile a doppia precisione | MULTI | 
| task\$1completato | bigint | MULTIPLO | 
| gc\$1reclaimed | virgola mobile a doppia precisione | MULTI | 

**Schema di misura**

Di seguito è riportato lo schema di misura restituito dalla query SHOW MEASURES.

```
SHOW MEASURES FROM "raw_data"."devops"
```


| measure\$1name | data\$1type | Dimensioni | 
| --- | --- | --- | 
| eventi | multi | [\$1"data\$1type» :"varchar», "dimension\$1name» :"availability\$1zone "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"microservice\$1name "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"nome\$1istanza "\$1, \$1" tipo\$1dati» :"varchar» :"varchar» :"nome\$1istanza "\$1, \$1" tipo\$1dati» :"varchar»», "dimension\$1name» :"process\$1name "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"jdk\$1version "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"cell "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"region "\$1, \$1" tipo\$1dati» :"varchar», "dimension\$1name» :"region "\$1, \$1" tipo\$1dati» :"varchar», "dimension\$1name» :"region "\$1, \$1" tipo\$1dati» :"varchar»» :"varchar», "nome\$1dimensione» :"silo "\$1] | 
| metriche | multi | [\$1"data\$1type» :"varchar», "dimension\$1name» :"availability\$1zone "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"microservice\$1name "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"nome\$1istanza "\$1, \$1" tipo\$1dati» :"varchar» :"varchar» :"nome\$1istanza "\$1, \$1" tipo\$1dati» :"varchar»», "dimension\$1name» :"os\$1version "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"cell "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"region "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"silo "\$1, \$1" tipo\$1dati» :"varchar» :"dimension\$1name» :"silo "\$1, \$1" tipo\$1dati» :"varchar» :"dimension\$1name» :"silo "\$1, \$1" tipo\$1dati» :"varchar» :"dimension\$1name» :"silo "\$1, \$1" tipo\$1dati» :"varchar» :"dimension\$1name» :"silo "\$1 «varchar», "nome\$1dimensione» :"tipo\$1istanza "\$1] | 

**Dati di esempio**


| region | Cella | Silo | availability\$1zone | nome\$1servizio | nome\$1istanza | instance\$1type | os\$1version | nome\$1processo | versione jdk | measure\$1name | Orario | cpu\$1user | sistema\$1cpu | cpu\$1idle | cpu\$1steal | cpu\$1iowait | cpu\$1nice | cpu\$1hi | cpu\$1si | memoria\$1usata | memoria\$1memorizzata nella cache | disk\$1io\$1reads | latenza\$1per\$1lettura | disk\$1io\$1write | latenza\$1per\$1scrittura | disk\$1used | disk\$1free | bytes\$1in di rete | network\$1bytes\$1out | descrizioni\$1di\$1file in uso | senza memoria | stato\$1finale dell'attività | gc\$1pause | task\$1completato | gc\$1reclaimed | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| us-east-2 | us-east-2-cell-1 | us-east-2-celle-1-silo-2 | Stati Uniti est-2-1 | atena | i- - zaZswmJk -2-cell-1-silo-2-00000216.amazonaws.com athena-us-east | m5.8xlarge | AL2012 |  |  | metriche | 12/11/2021 12:43 | 62,8 | 0,408 | 34.2 | 0,972 | 0,0877 | 0,103 | 0,567 | 0,844 | 57,6 | 88,9 | 52,6 | 91,9 | 31,7 | 2,25 | 63,5 | 29,2 | 85,3 | 49,8 | 32,3 | 57,6 |  |  |  |  | 
| us-east-2 | us-east-2-cell-1 | us-east-2-celle-1-silo-2 | Stati Uniti est-2-1 | atena | i- - zaZswmJk -2-cell-1-silo-2-00000216.amazonaws.com athena-us-east | m5.8xlarge | AL2012 |  |  | metriche | 12/11/2021 12:41 | 56 | 0,923 | 39,9 | 0,799 | 0,532 | 0,655 | 0,851 | 0,317 | 90,5 | 31,9 | 56,6 | 37,1 | 25 | 93,3 | 52,2 | 33,1 | 7,14 | 53,7 | 65,9 | 20,4 |  |  |  |  | 
| us-east-2 | us-east-2-cell-1 | us-east-2-celle-1-silo-2 | Stati Uniti est-2-1 | atena | i- - zaZswmJk -2-cell-1-silo-2-00000216.amazonaws.com athena-us-east | m5.8xlarge | AL2012 |  |  | metriche | 12/11/2021 12:39 | 48,5 | 0,801 | 48,2 | 0,18 | 0,943 | 0,0316 | 0,844 | 0,54 | 97,4 | 41,4 | 55,1 | 32,7 | 86,2 | 33,7 | 72,7 | 61,5 | 80,8 | 5,15 | 44,3 | 8,5 |  |  |  |  | 
| us-east-2 | us-east-2-cell-1 | us-east-2-celle-1-silo-2 | Stati Uniti est-2-1 | atena | i- - zaZswmJk -2-cell-1-silo-2-00000216.amazonaws.com athena-us-east | m5.8xlarge | AL2012 |  |  | metriche | 12/11/2021 12:38 | 37,5 | 0,723 | 58,8 | 0,317 | 0,608 | 0,859 | 0,791 | 0,3393 | 4,84 | 78,9 | 20,3 | 41,4 | 46,8 | 3,87 | 84,6 | 60,6 | 21,1 | 11.8 | 2,76 | 10 |  |  |  |  | 
| us-east-2 | us-east-2-cell-1 | us-east-2-celle-1-silo-2 | Stati Uniti est-2-1 | atena | i- - zaZswmJk -2-cell-1-silo-2-00000216.amazonaws.com athena-us-east | m5.8xlarge | AL2012 |  |  | metriche | 12/11/2021 12:36 | 58 | 0,786 | 38,7 | 0.219 | 0,436 | 0,829 | 0,331 | 0,734 | 51 | 36,8 | 81,8 | 50,5 | 77,9 | 17,8 | 82,3 | 64 | 7,69 | 66,5 | 56,2 | 31,3 |  |  |  |  | 
| us-east-2 | us-east-2-cell-1 | us-east-2-celle-1-silo-2 | Stati Uniti est-2-1 | atena | i- - zaZswmJk -2-cell-1-silo-2-00000216.amazonaws.com athena-us-east |  |  | host\$1manager | JDK\$18 | eventi | 12/11/2021 12:43 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 75,8 | SUCCESSO\$1CON\$1NO\$1RISULTATO | 85,5 | 348 | 64,8 | 
| us-east-2 | us-east-2-cell-1 | us-east-2-celle-1-silo-2 | Stati Uniti est-2-1 | atena | i- - zaZswmJk -2-cell-1-silo-2-00000216.amazonaws.com athena-us-east |  |  | host\$1manager | JDK\$18 | eventi | 12/11/2021 12:41 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 7,47 | SUCCESSO\$1CON\$1RISULTATO | 22.8 | 42 | 7,45 | 
| us-east-2 | us-east-2-cell-1 | us-east-2-celle-1-silo-2 | Stati Uniti est-2-1 | atena | i- - zaZswmJk -2-cell-1-silo-2-00000216.amazonaws.com athena-us-east |  |  | host\$1manager | JDK\$18 | eventi | 12/11/2021 12:39 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 64,1 | SUCCESSO\$1CON\$1RISULTATO | 6.77 | 249 | 72,3 | 
| us-east-2 | us-east-2-cell-1 | us-east-2-celle-1-silo-2 | Stati Uniti est-2-1 | atena | i- - zaZswmJk -2-cell-1-silo-2-00000216.amazonaws.com athena-us-east |  |  | host\$1manager | JDK\$18 | eventi | 12/11/2021 12:38 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 23 | SUCCESSO\$1CON\$1RISULTATO | 53,3 | 138 | 99 | 
| us-east-2 | us-east-2-cell-1 | us-east-2-celle-1-silo-2 | Stati Uniti est-2-1 | atena | i- - zaZswmJk -2-cell-1-silo-2-00000216.amazonaws.com athena-us-east |  |  | host\$1manager | JDK\$18 | eventi | 12/11/2021 12:36 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 39,4 | SUCCESSO\$1CON\$1NO\$1RISULTATO | 79,6 | 254 | 82,9 | 

## Record a misura singola
<a name="scheduledqueries-common-schema-example-smr"></a>

Timestream for consente LiveAnalytics inoltre di inserire i dati con una misura per record di serie temporali. Di seguito sono riportati i dettagli dello schema quando vengono inseriti utilizzando record a misura singola.

**Schema della tabella**

Di seguito è riportato lo schema della tabella una volta che i dati vengono inseriti utilizzando record multimisura. È l'output della query DESCRIBE. Supponendo che i dati vengano inseriti in un database raw\$1data e nella tabella devops, di seguito è riportata la query.

```
DESCRIBE "raw_data"."devops_single"
```


| Colonna | Tipo |  LiveAnalytics Timestream per il tipo di attributo | 
| --- | --- | --- | 
| availability\$1zone | varchar | DIMENSIONE | 
| microservice\$1name | varchar | DIMENSIONE | 
| nome\$1istanza | varchar | DIMENSIONE | 
| nome\$1processo | varchar | DIMENSIONE | 
| os\$1version | varchar | DIMENSIONE | 
| versione jdk | varchar | DIMENSIONE | 
| cellula | varchar | DIMENSIONE | 
| region | varchar | DIMENSIONE | 
| silo | varchar | DIMENSIONE | 
| instance\$1type | varchar | DIMENSIONE | 
| measure\$1name | varchar | MEASURE\$1NAME | 
| time | timestamp | TIMESTAMP | 
| measure\$1value::double | virgola mobile a doppia precisione | MISURA\$1VALORE | 
| measure\$1value::bigint | bigint | MISURA\$1VALORE | 
| measure\$1value::varchar | varchar | MISURA\$1VALORE | 

**Schema di misura**

Di seguito è riportato lo schema di misura restituito dalla query SHOW MEASURES.

```
SHOW MEASURES FROM "raw_data"."devops_single"
```


| measure\$1name | data\$1type | Dimensioni | 
| --- | --- | --- | 
| cpu\$1hi | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| cpu\$1idle | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| cpu\$1iowait | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| cpu\$1nice | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| cpu\$1si | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| cpu\$1steal | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| sistema\$1CPU | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| cpu\$1user | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| disk\$1free | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| disk\$1io\$1reads | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| disk\$1io\$1write | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| disk\$1used | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| descrittori di file in uso | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| gc\$1pause | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'nome\$1istanza', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'process\$1name': 'process\$1name' ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' jdk\$1version ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' cell ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' region ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' varchar '\$1, \$1' dimension\$1name ':' varchar '\$1, \$1' dimension\$1name ':' varchar '\$1, \$1' dimension\$1name ':' varchar '\$1': 'silo', 'data\$1type': 'varchar'\$1] | 
| gc\$1reclaimed | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'nome\$1istanza', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'process\$1name': 'process\$1name' ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' jdk\$1version ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' cell ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' region ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' varchar '\$1, \$1' dimension\$1name ':' varchar '\$1, \$1' dimension\$1name ':' varchar '\$1, \$1' dimension\$1name ':' varchar '\$1': 'silo', 'data\$1type': 'varchar'\$1] | 
| latenza\$1per\$1lettura | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| latenza\$1per\$1scrittura | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| memoria\$1memorizzata nella cache | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| senza memoria | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'nome\$1istanza', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'process\$1name': 'process\$1name' ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' os\$1version ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' jdk\$1version ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' cell ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' cell ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' cell ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' cella ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' cella ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' region ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' silo ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' instance\$1type ', 'data\$1 tipo': 'varchar'\$1] | 
| memoria\$1usata | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| bytes\$1in di rete | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| network\$1bytes\$1out | virgola mobile a doppia precisione | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'instance\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'os\$1version', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'cell', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'region', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'silo', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'varchar'\$1, \$1'dimension\$1name': 'data\$1name': 'varchar'\$1: 'dimension\$1name': 'varchar': 'instance\$1type', 'data\$1type': 'varchar'\$1] | 
| attività\$1completata | bigint | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'nome\$1istanza', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'process\$1name': 'process\$1name' ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' jdk\$1version ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' cell ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' region ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' varchar '\$1, \$1' dimension\$1name ':' varchar '\$1, \$1' dimension\$1name ':' varchar '\$1, \$1' dimension\$1name ':' varchar '\$1': 'silo', 'data\$1type': 'varchar'\$1] | 
| stato\$1finale dell'attività | varchar | [\$1'dimension\$1name': 'availability\$1zone', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'microservice\$1name', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'nome\$1istanza', 'data\$1type': 'varchar'\$1, \$1'dimension\$1name': 'process\$1name': 'process\$1name' ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' jdk\$1version ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' cell ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' region ',' data\$1type ':' varchar '\$1, \$1' dimension\$1name ':' varchar '\$1, \$1' dimension\$1name ':' varchar '\$1, \$1' dimension\$1name ':' varchar '\$1, \$1' dimension\$1name ':' varchar '\$1': 'silo', 'data\$1type': 'varchar'\$1] | 

**Dati di esempio**


| availability\$1zone | microservice\$1name | nome\$1istanza | nome\$1processo | os\$1version | versione jdk | Cella | region | Silo | instance\$1type | measure\$1name | Orario | measure\$1value::double | measure\$1value::bigint | measure\$1value::varchar | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 | r5.4xlarge | cpu\$1it | 34:57,2 | 0,87169 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 | r5.4xlarge | cpu\$1idle | 34:57,2 | 3,46266 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 | r5.4xlarge | cpu\$1iowait | 34:57,2 | 0,10226 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 | r5.4xlarge | cpu\$1nice | 34:57,2 | 0,63013 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 | r5.4xlarge | cpu\$1it | 34:57,2 | 0,16441 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 | r5.4xlarge | cpu\$1steal | 34:57,2 | 0,10729 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 | r5.4xlarge | sistema\$1cpu | 34:57,2 | 0,45709 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 | r5.4xlarge | cpu\$1user | 34:57,2 | 94,20448 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 | r5.4xlarge | disk\$1free | 34:57.2 | 72,51895 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 | r5.4xlarge | disk\$1io\$1reads | 34:57,2 | 81,73383 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 | r5.4xlarge | disk\$1io\$1write | 34:57,2 | 77,11665 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 | r5.4xlarge | disk\$1used | 34:57.2 | 89,4235 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 | r5.4xlarge | descrizioni\$1di\$1file in uso | 34:57,2 | 30,08254 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west | server |  | JDK\$18 | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 |  | gc\$1pause | 34:57,2 | 60,28679 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west | server |  | JDK\$18 | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 |  | gc\$1reclaimed | 34:57,2 | 75,28839 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 | r5.4xlarge | latenza\$1per\$1lettura | 34:57,2 | 8,07605 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 | r5.4xlarge | latenza\$1per\$1scrittura | 34:57,2 | 58,11223 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 | r5.4xlarge | memoria\$1memorizzata nella cache | 34:57,2 | 87,56481 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west | server |  | JDK\$18 | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 |  | senza memoria | 34:57,2 | 18,95768 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 | r5.4xlarge | senza memoria | 34:57,2 | 9720523 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-celle-9-silo-2 | r5.4xlarge | memoria\$1usata | 34:57,2 | 12,37723 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-cell-9-silo-2 | r5.4xlarge | network\$1bytes\$1it | 34:57,2 | 31,02065 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west |  | AL2012 |  | eu-west-1-cell-9 | eu-west-1 | eu-west-1-cell-9-silo-2 | r5.4xlarge | network\$1bytes\$1out | 34:57,2 | 0,51424 |  |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west | server |  | JDK\$18 | eu-west-1-cell-9 | eu-west-1 | eu-west-1-cell-9-silo-2 |  | task\$1completato | 34:57.2 |  | 69 |  | 
| eu-west-1-1 | ercole | i- - 1-cell-9-silo-2-00000027.amazonaws.com zaZswmJk hercules-eu-west | server |  | JDK\$18 | eu-west-1-cell-9 | eu-west-1 | eu-west-1-cell-9-silo-2 |  | stato\$1finale dell'attività | 34:57,2 |  |  | SUCCESSO\$1CON\$1RISULTATO | 

# Schemi di interrogazione pianificati
<a name="scheduledqueries-patterns"></a>

In questa sezione troverai alcuni modelli comuni su come utilizzare Amazon Timestream LiveAnalytics for Scheduled Queries per ottimizzare i dashboard in modo che vengano caricati più velocemente e a costi ridotti. Gli esempi seguenti utilizzano uno scenario DevOps applicativo per illustrare i concetti chiave che si applicano alle query pianificate in generale, indipendentemente dallo scenario dell'applicazione.

Le query pianificate in Timestream for LiveAnalytics consentono di esprimere le query utilizzando l'intera area di superficie SQL di Timestream for. LiveAnalytics La tua query può includere una o più tabelle di origine, eseguire aggregazioni o qualsiasi altra query consentita dal linguaggio SQL di Timestream for e quindi materializzare i risultati LiveAnalytics della query in un'altra tabella di destinazione in Timestream for. LiveAnalytics *Per facilitare l'esposizione, questa sezione fa riferimento a questa tabella di destinazione di una query pianificata come tabella derivata.*

Di seguito sono riportati i punti chiave trattati in questa sezione.
+ Utilizzo di un semplice aggregato a livello di flotta per spiegare come definire un'interrogazione pianificata e comprendere alcuni concetti di base. 
+ Come combinare i risultati della destinazione di una query pianificata (la tabella derivata) con i risultati della tabella di origine per ottenere i vantaggi in termini di costi e prestazioni delle query pianificate. 
+ Quali sono i compromessi che si ottengono quando si configura il periodo di aggiornamento delle interrogazioni pianificate. 
+ Utilizzo di interrogazioni pianificate per alcuni scenari comuni.
  + Monitoraggio dell'ultimo punto dati di ogni istanza prima di una data specifica.
  + Valori distinti per una dimensione da utilizzare per popolare le variabili in una dashboard.
+ Come gestire i dati in arrivo in ritardo nel contesto delle interrogazioni pianificate.
+ In che modo è possibile utilizzare esecuzioni manuali una tantum per gestire una varietà di scenari non direttamente coperti dai trigger automatici per le query pianificate.

**Topics**
+ [Scenario](scheduledqueries-patterns-scenario.md)
+ [Aggregati semplici a livello di flotta](scheduledqueries-patterns-simplefleet.md)
+ [Ultimo punto di ogni dispositivo](scheduledqueries-patterns-lastpointfromdevice.md)
+ [Valori di dimensione univoci](scheduledqueries-patterns-uniquedimvalues.md)
+ [Gestione dei dati in arrivo tardivo](scheduledqueries-patterns-latearrive.md)
+ [Riempimento dei precalcoli storici](scheduledqueries-patterns-backfilling.md)

# Scenario
<a name="scheduledqueries-patterns-scenario"></a>

Gli esempi seguenti utilizzano uno scenario di DevOps monitoraggio descritto in. [Schema di esempio per le interrogazioni pianificate](scheduledqueries-common-schema-example.md)

Gli esempi forniscono la definizione delle query pianificate in cui è possibile inserire le configurazioni appropriate per ricevere le notifiche sullo stato di esecuzione per le query pianificate, dove ricevere i report sugli errori riscontrati durante l'esecuzione di una query pianificata e il ruolo IAM utilizzato dalla query pianificata per eseguire le sue operazioni.

È possibile creare queste query pianificate dopo aver compilato le opzioni precedenti, aver [creato la tabella di destinazione](https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.create-table.html) (o derivata) ed eseguirle tramite la AWS CLI. Ad esempio, si supponga che la definizione di una query pianificata sia archiviata in un file,. `scheduled_query_example.json` È possibile creare la query utilizzando il comando CLI.

```
aws timestream-query create-scheduled-query --cli-input-json  file://scheduled_query_example.json --profile aws_profile --region us-east-1
```

Nel comando precedente, il profilo passato utilizzando l'opzione --profile deve disporre delle autorizzazioni appropriate per creare query pianificate. Vedi [Politiche basate sull'identità per le interrogazioni pianificate per istruzioni dettagliate sulle politiche](https://docs.aws.amazon.com/timestream/latest/developerguide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-sheduledqueries) e le autorizzazioni.

# Aggregati semplici a livello di flotta
<a name="scheduledqueries-patterns-simplefleet"></a>

Questo primo esempio illustra alcuni dei concetti di base relativi all'utilizzo di query pianificate utilizzando un semplice esempio di calcolo degli aggregati a livello di flotta. Utilizzando questo esempio, imparerai quanto segue.
+ Come prendere la query del dashboard utilizzata per ottenere statistiche aggregate e mapparla a una query pianificata.
+ In che modo Timestream for LiveAnalytics gestisce l'esecuzione delle diverse istanze della query pianificata.
+ Come è possibile sovrapporre diverse istanze di query pianificate negli intervalli di tempo e in che modo la correttezza dei dati viene mantenuta nella tabella di destinazione per garantire che la dashboard che utilizza i risultati della query pianificata fornisca risultati corrispondenti allo stesso aggregato calcolato sui dati grezzi. 
+ Come impostare l'intervallo di tempo e la cadenza di aggiornamento per la query pianificata.
+ In che modo è possibile monitorare autonomamente i risultati delle query pianificate per ottimizzarle in modo che la latenza di esecuzione delle istanze di query rientri nei ritardi accettabili associati all'aggiornamento delle dashboard. 

**Topics**
+ [Aggrega dalle tabelle di origine](#scheduledqueries-patterns-simplefleet-aggrfromsourcetable)
+ [Interrogazione pianificata per precalcolare gli aggregati](#scheduledqueries-patterns-simplefleet-schedtoprecomputeaggr)
+ [Aggregazione da tabella derivata](#scheduledqueries-patterns-simplefleet-aggrfromderived)
+ [Aggregazione che combina tabelle di origine e derivate](#scheduledqueries-patterns-simplefleet-aggrcombsourceandderived)
+ [Aggregazione basata su calcoli pianificati aggiornati di frequente](#scheduledqueries-patterns-simplefleet-aggregatefromrequently)

## Aggrega dalle tabelle di origine
<a name="scheduledqueries-patterns-simplefleet-aggrfromsourcetable"></a>

In questo esempio, stai monitorando il numero di metriche emesse dai server all'interno di una determinata regione in ogni minuto. Il grafico seguente è un esempio di rappresentazione di questa serie temporale per la regione us-east-1.

![\[Time series graph showing fluctuating number of metrics emitted by servers in us-east-1 region.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/schedquery_aggrfromsourcetable.png)


Di seguito è riportato un esempio di query per calcolare questo aggregato dai dati grezzi. Filtra le righe per la regione us-east-1 e quindi calcola la somma al minuto tenendo conto delle 20 metriche (se measure\$1name è metrica) o dei 5 eventi (se measure\$1name è eventi). In questo esempio, l'illustrazione del grafico mostra che il numero di metriche emesse varia tra 1,5 milioni e 6 milioni al minuto. Quando si traccia questa serie temporale per diverse ore (le ultime 12 ore in questa figura), questa interrogazione sui dati grezzi analizza centinaia di milioni di righe.

```
WITH grouped_data AS (
    SELECT region, bin(time, 1m) as minute, SUM(CASE WHEN measure_name = 'metrics' THEN 20 ELSE 5 END) as numDataPoints 
    FROM "raw_data"."devops"
    WHERE time BETWEEN from_milliseconds(1636699996445) AND from_milliseconds(1636743196445)
        AND region = 'us-east-1'
    GROUP BY region, measure_name, bin(time, 1m)
)
SELECT minute, SUM(numDataPoints) AS numDataPoints
FROM grouped_data
GROUP BY minute
ORDER BY 1 desc, 2 desc
```

## Interrogazione pianificata per precalcolare gli aggregati
<a name="scheduledqueries-patterns-simplefleet-schedtoprecomputeaggr"></a>

Se desideri ottimizzare i dashboard per velocizzare il caricamento e ridurre i costi scansionando meno dati, puoi utilizzare una query pianificata per precalcolare questi aggregati. Le query pianificate in Timestream for ti LiveAnalytics consentono di materializzare questi precalcoli in un altro Timestream for table, che puoi utilizzare successivamente per i tuoi dashboard. LiveAnalytics 

Il primo passaggio per creare una query pianificata consiste nell'identificare la query che si desidera precalcolare. Nota che la dashboard precedente è stata disegnata per la regione us-east-1. Tuttavia, un utente diverso potrebbe desiderare lo stesso aggregato per una regione diversa, ad esempio us-west-2 o eu-west-1. Per evitare di creare un'interrogazione pianificata per ciascuna di queste query, puoi precalcolare l'aggregato per ogni regione e materializzare gli aggregati per regione in un altro Timestream per tabella. LiveAnalytics 

La query riportata di seguito fornisce un esempio del precalcolo corrispondente. Come puoi vedere, è simile all'espressione di tabella comune grouped\$1data utilizzata nella query sui dati grezzi, ad eccezione di due differenze: 1) non utilizza un predicato di regione, quindi possiamo usare una query per il precalcolo per tutte le regioni; e 2) utilizza un predicato temporale parametrizzato con un parametro speciale @scheduled\$1runtime, che viene spiegato in dettaglio di seguito.

```
SELECT region, bin(time, 1m) as minute, 
    SUM(CASE WHEN measure_name = 'metrics' THEN 20 ELSE 5 END) as numDataPoints 
FROM raw_data.devops 
WHERE time BETWEEN @scheduled_runtime - 10m AND @scheduled_runtime + 1m 
GROUP BY bin(time, 1m), region
```

L'interrogazione precedente può essere convertita in un'interrogazione pianificata utilizzando le seguenti specifiche. All'interrogazione pianificata viene assegnato un nome, che è un mnemonico di facile utilizzo. [Include quindi, a QueryString ScheduleConfiguration, che è un'espressione cron.](https://docs.aws.amazon.com/timestream/latest/developerguide/scheduledqueries-schedule.html) Specifica TargetConfiguration quale mappa i risultati della query alla tabella di destinazione in Timestream for. LiveAnalytics Infine, specifica una serie di altre configurazioni, come la NotificationConfiguration, in cui vengono inviate le notifiche per le singole esecuzioni della query, in cui viene scritto un rapporto nel caso in ErrorReportConfiguration cui la query riscontri errori e la ScheduledQueryExecutionRoleArn, che è il ruolo utilizzato per eseguire le operazioni per la query pianificata.

```
{
    "Name": "MultiPT5mPerMinutePerRegionMeasureCount",
    "QueryString": "SELECT region, bin(time, 1m) as minute, SUM(CASE WHEN measure_name = 'metrics' THEN 20 ELSE 5 END) as numDataPoints FROM raw_data.devops WHERE time BETWEEN @scheduled_runtime - 10m AND @scheduled_runtime + 1m GROUP BY bin(time, 1m), region",
    "ScheduleConfiguration": {
        "ScheduleExpression": "cron(0/5 * * * ? *)"
    },
    "NotificationConfiguration": {
        "SnsConfiguration": {
            "TopicArn": "******"
        }
    },
    "TargetConfiguration": {
        "TimestreamConfiguration": {
            "DatabaseName": "derived",
            "TableName": "per_minute_aggs_pt5m",
            "TimeColumn": "minute",
            "DimensionMappings": [
                {
                    "Name": "region",
                    "DimensionValueType": "VARCHAR"
                }
            ],
            "MultiMeasureMappings": {
                "TargetMultiMeasureName": "numDataPoints",
                "MultiMeasureAttributeMappings": [
                    {
                        "SourceColumn": "numDataPoints",
                        "MeasureValueType": "BIGINT"
                    }
                ]
            }
        }
    },
    "ErrorReportConfiguration": {
        "S3Configuration" : {
            "BucketName" : "******",
            "ObjectKeyPrefix": "errors",
            "EncryptionOption": "SSE_S3"
        }
    },
    "ScheduledQueryExecutionRoleArn": "******"
}
```

Nell'esempio, il ScheduleExpression cron (0/5 \$1 \$1 \$1? \$1) implica che la query venga eseguita una volta ogni 5 minuti al 5, 10, 15... minuti di ogni ora di ogni giorno. Questi timestamp quando viene attivata un'istanza specifica di questa query sono ciò che si traduce nel parametro @scheduled\$1runtime utilizzato nella query. Ad esempio, si consideri l'istanza di questa query pianificata in esecuzione il 01/12/2021 00:00:00. In questo caso, il parametro @scheduled\$1runtime viene inizializzato con il timestamp 2021-12-01 00:00:00 quando si richiama la query. Pertanto, questa istanza specifica verrà eseguita al timestamp 2021-12-01 00:00:00 e calcolerà gli aggregati al minuto dall'intervallo temporale 2021-11-30 23:50:00 al 01/12/2021 00:01:00. Allo stesso modo, l'istanza successiva di questa query viene attivata al timestamp 2021-12-01 00:05:00 e in tal caso, la query calcolerà gli aggregati al minuto dall'intervallo di tempo 2021-11-30 23:55:00 al 2021-12-01 00:06:00. Pertanto, il parametro @scheduled\$1runtime fornisce una query pianificata per precalcolare gli aggregati per gli intervalli di tempo configurati utilizzando il tempo di invocazione per le query.

Nota che due istanze successive della query si sovrappongono nei rispettivi intervalli di tempo. Questo è qualcosa che puoi controllare in base alle tue esigenze. In questo caso, questa sovrapposizione consente a queste query di aggiornare gli aggregati sulla base di tutti i dati il cui arrivo è stato leggermente ritardato, fino a 5 minuti in questo esempio. Per garantire la correttezza delle query materializzate, Timestream for LiveAnalytics assicura che la query al 2021-12-01 00:05:00 venga eseguita solo dopo il completamento della query del 2021-12-01 00:00:00 e che i risultati di queste ultime query possano aggiornare qualsiasi aggregato precedentemente materializzato utilizzando se viene generato un valore più recente. Ad esempio, se alcuni dati al timestamp 2021-11-30 23:59:00 sono arrivati dopo l'esecuzione della query per il 2021-12-01 00:00:00 ma prima della query per il 2021-12-01 00:05:00, l'esecuzione del 2021-12-01 00:05:00 ricalcola gli aggregati per il minuto 2021-11-30 23:59:00 e ciò comporterà l'aggiornamento dell'aggregato precedente con il valore appena calcolato. Puoi fare affidamento su questa semantica delle query pianificate per trovare un compromesso tra la rapidità con cui aggiorni i tuoi precalcoli e la capacità di gestire con garbo alcuni dati con arrivo ritardato. Di seguito vengono illustrate ulteriori considerazioni su come bilanciare questa cadenza di aggiornamento con l'aggiornamento dei dati e su come affrontare l'aggiornamento degli aggregati per i dati che arrivano con un ritardo ancora maggiore o se la fonte del calcolo pianificato ha valori aggiornati che richiederebbero il ricalcolo degli aggregati. 

Ogni calcolo pianificato ha una configurazione di notifica in cui Timestream for invia una notifica di ogni esecuzione di una configurazione pianificata. LiveAnalytics È possibile configurare un argomento SNS per ricevere notifiche per ogni chiamata. Oltre allo stato di successo o di fallimento di un'istanza specifica, dispone anche di diverse statistiche come il tempo impiegato per l'esecuzione del calcolo, il numero di byte scansionati dal calcolo e il numero di byte scritti dal calcolo nella tabella di destinazione. È possibile utilizzare queste statistiche per ottimizzare ulteriormente la query, pianificare la configurazione o tenere traccia della spesa per le query pianificate. Un aspetto degno di nota è il tempo di esecuzione di un'istanza. In questo esempio, il calcolo pianificato è configurato per l'esecuzione ogni 5 minuti. Il tempo di esecuzione determinerà il ritardo con cui il precalcolo sarà disponibile, il che definirà anche il ritardo nella dashboard quando si utilizzano i dati precalcolati nelle dashboard. Inoltre, se questo ritardo è costantemente superiore all'intervallo di aggiornamento, ad esempio, se il tempo di esecuzione è superiore a 5 minuti per un calcolo configurato per l'aggiornamento ogni 5 minuti, è importante ottimizzare il calcolo in modo che venga eseguito più velocemente per evitare ulteriori ritardi nelle dashboard.

## Aggregazione da tabella derivata
<a name="scheduledqueries-patterns-simplefleet-aggrfromderived"></a>

Ora che hai impostato le query pianificate e che gli aggregati sono stati precalcolati e materializzati in un altro Timestream per la LiveAnalytics tabella specificata nella configurazione di destinazione del calcolo pianificato, puoi utilizzare i dati in quella tabella per scrivere query SQL per potenziare le tue dashboard. Di seguito è riportato un equivalente della query che utilizza i preaggregati materializzati per generare l'aggregato di conteggio dei punti dati al minuto per us-east-1.

```
SELECT bin(time, 1m) as minute, SUM(numDataPoints) as numDatapoints
FROM "derived"."per_minute_aggs_pt5m"
WHERE time BETWEEN from_milliseconds(1636699996445) AND from_milliseconds(1636743196445)
    AND region = 'us-east-1'
GROUP BY bin(time, 1m)
ORDER BY 1 desc
```

![\[Graph showing data points fluctuating between 0 and 6 million over time from 23:00 to 10:00.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/schedquery_aggrfromderived.png)


La figura precedente riporta l'aggregato calcolato dalla tabella degli aggregati. Confrontando questo pannello con il pannello calcolato a partire dai dati di origine non elaborati, noterete che corrispondono esattamente, anche se questi aggregati subiscono un ritardo di alcuni minuti, a causa dell'intervallo di aggiornamento configurato per il calcolo programmato più il tempo necessario per eseguirlo.

Questa interrogazione sui dati precalcolati analizza dati di diversi ordini di grandezza inferiori rispetto agli aggregati calcolati sui dati di origine grezza. A seconda della granularità delle aggregazioni, questa riduzione può facilmente ridurre di 100 volte i costi e la latenza delle query. L'esecuzione di questo calcolo pianificato comporta un costo. Tuttavia, a seconda della frequenza con cui questi dashboard vengono aggiornati e del numero di utenti simultanei che li caricano, si finisce per ridurre in modo significativo i costi complessivi utilizzando questi precalcoli. E questo si aggiunge ai tempi di caricamento delle dashboard da 10 a 100 volte più rapidi.

## Aggregazione che combina tabelle di origine e derivate
<a name="scheduledqueries-patterns-simplefleet-aggrcombsourceandderived"></a>

I dashboard creati utilizzando le tabelle derivate possono presentare un ritardo. Se lo scenario applicativo richiede che i dashboard contengano i dati più recenti, puoi utilizzare la potenza e la flessibilità del supporto SQL di Timestream for per LiveAnalytics combinare i dati più recenti della tabella di origine con gli aggregati storici della tabella derivata per formare una vista unita. Questa vista unita utilizza la semantica di unione di SQL e gli intervalli di tempo non sovrapposti della tabella di origine e della tabella derivata. Nell'esempio seguente, stiamo usando il termine «derivato».» tabella derivata «per\$1minute\$1aggs\$1pt5m». Poiché il calcolo pianificato per quella tabella derivata si aggiorna una volta ogni 5 minuti (in base alla specifica dell'espressione di pianificazione), la seguente query utilizza i 15 minuti di dati più recenti della tabella di origine e tutti i dati più vecchi di 15 minuti dalla tabella derivata, quindi unisce i risultati per creare la vista unita che offre il meglio di entrambi i mondi: l'economia e la bassa latenza leggendo gli aggregati precalcolati più vecchi dalla tabella derivata e la freschezza dell'aggregazione proviene dalla tabella dei sorgenti per potenziare i casi d'uso dell'analisi in tempo reale.

Tieni presente che questo approccio di unione avrà una latenza di query leggermente superiore rispetto alla sola interrogazione della tabella derivata e avrà anche una scansione dei dati leggermente superiore, poiché aggrega i dati grezzi in tempo reale per riempire l'intervallo di tempo più recente. Tuttavia, questa visualizzazione unificata sarà comunque notevolmente più veloce ed economica rispetto all'aggregazione immediata dalla tabella di origine, in particolare per le dashboard che riproducono giorni o settimane di dati. Per questo esempio, puoi ottimizzare gli intervalli di tempo in base alle esigenze di aggiornamento e alla tolleranza al ritardo dell'applicazione.

```
WITH aggregated_source_data AS (
    SELECT bin(time, 1m) as minute, SUM(CASE WHEN measure_name = 'metrics' THEN 20 ELSE 5 END) as numDatapoints 
    FROM "raw_data"."devops"
    WHERE time BETWEEN bin(from_milliseconds(1636743196439), 1m) - 15m AND from_milliseconds(1636743196439)
        AND region = 'us-east-1'
    GROUP BY bin(time, 1m)
), aggregated_derived_data AS (
    SELECT bin(time, 1m) as minute, SUM(numDataPoints) as numDatapoints
    FROM "derived"."per_minute_aggs_pt5m"
    WHERE time BETWEEN from_milliseconds(1636699996439) AND bin(from_milliseconds(1636743196439), 1m) - 15m
        AND region = 'us-east-1'
    GROUP BY bin(time, 1m)
)
SELECT minute, numDatapoints
FROM (
    (
    SELECT *
    FROM aggregated_derived_data
    )
    UNION
    (
    SELECT *
    FROM aggregated_source_data
    )
)
ORDER BY 1 desc
```

Di seguito è riportato il pannello della dashboard con questa visualizzazione unificata. Come puoi vedere, la dashboard ha un aspetto quasi identico alla vista calcolata dalla tabella derivata, tranne per il fatto che avrà la parte più up-to-date aggregata nell'estremità più a destra.

![\[Time-series graph showing fluctuating data points over 11 hours, with peaks around 6 million.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/schedquery_aggrcombsourceandderived.png)


## Aggregazione basata su calcoli pianificati aggiornati di frequente
<a name="scheduledqueries-patterns-simplefleet-aggregatefromrequently"></a>

A seconda della frequenza con cui vengono caricate le dashboard e della latenza desiderata per la dashboard, esiste un altro approccio per ottenere risultati più aggiornati nella dashboard: fare in modo che il calcolo pianificato aggiorni gli aggregati più frequentemente. Ad esempio, di seguito è riportata la configurazione dello stesso calcolo pianificato, tranne per il fatto che si aggiorna una volta al minuto (si noti lo schedule express cron (0/1 \$1 \$1 \$1)? \$1)). Con questa configurazione, la tabella derivata per\$1minute\$1aggs\$1pt1m avrà aggregati molto più recenti rispetto allo scenario in cui il calcolo specificava una pianificazione di aggiornamento di una volta ogni 5 minuti.

```
{
    "Name": "MultiPT1mPerMinutePerRegionMeasureCount",
    "QueryString": "SELECT region, bin(time, 1m) as minute, SUM(CASE WHEN measure_name = 'metrics' THEN 20 ELSE 5 END) as numDataPoints FROM raw_data.devops WHERE time BETWEEN @scheduled_runtime - 10m AND @scheduled_runtime + 1m GROUP BY bin(time, 1m), region",
    "ScheduleConfiguration": {
        "ScheduleExpression": "cron(0/1 * * * ? *)"
    },
    "NotificationConfiguration": {
        "SnsConfiguration": {
            "TopicArn": "******"
        }
    },
    "TargetConfiguration": {
        "TimestreamConfiguration": {
            "DatabaseName": "derived",
            "TableName": "per_minute_aggs_pt1m",
            "TimeColumn": "minute",
            "DimensionMappings": [
                {
                    "Name": "region",
                    "DimensionValueType": "VARCHAR"
                }
            ],
            "MultiMeasureMappings": {
                "TargetMultiMeasureName": "numDataPoints",
                "MultiMeasureAttributeMappings": [
                    {
                        "SourceColumn": "numDataPoints",
                        "MeasureValueType": "BIGINT"
                    }
                ]
            }
        }
    },
    "ErrorReportConfiguration": {
        "S3Configuration" : {
            "BucketName" : "******",
            "ObjectKeyPrefix": "errors",
            "EncryptionOption": "SSE_S3"
        }
    },
    "ScheduledQueryExecutionRoleArn": "******"
}
```

```
SELECT bin(time, 1m) as minute, SUM(numDataPoints) as numDatapoints
FROM "derived"."per_minute_aggs_pt1m"
WHERE time BETWEEN from_milliseconds(1636699996446) AND from_milliseconds(1636743196446)
    AND region = 'us-east-1'
GROUP BY bin(time, 1m), region
ORDER BY 1 desc
```

Poiché la tabella derivata contiene aggregati più recenti, ora puoi interrogare direttamente la tabella derivata per\$1minute\$1aggs\$1pt1m per ottenere aggregati più recenti, come si può vedere dalla query precedente e dallo snapshot della dashboard di seguito.

![\[Graph showing fluctuating data points over time, with peaks reaching 6 million and valleys near 1 million.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/schedquery_aggregatefromrequently.png)


Tieni presente che l'aggiornamento del calcolo pianificato in base a una pianificazione più rapida (ad esempio 1 minuto rispetto a 5 minuti) aumenterà i costi di manutenzione per il calcolo pianificato. Il messaggio di notifica per l'esecuzione di ogni calcolo fornisce statistiche sulla quantità di dati scansionati e sulla quantità di scrittura nella tabella derivata. Allo stesso modo, se si utilizza la vista unita per unire la tabella derivata, si interrogano i costi sulla vista unita e la latenza di caricamento del dashboard sarà maggiore rispetto alla sola interrogazione della tabella derivata. Pertanto, l'approccio scelto dipenderà dalla frequenza di aggiornamento dei dashboard e dai costi di manutenzione delle query pianificate. Se decine di utenti aggiornano le dashboard una volta al minuto circa, un aggiornamento più frequente della tabella derivata comporterà probabilmente una riduzione dei costi complessivi.

# Ultimo punto di ogni dispositivo
<a name="scheduledqueries-patterns-lastpointfromdevice"></a>

L'applicazione potrebbe richiedere la lettura dell'ultima misurazione emessa da un dispositivo. Esistono casi d'uso più generali per ottenere l'ultima misurazione di un dispositivo prima di una determinata date/time o la prima misurazione di un dispositivo dopo una determinata data/ora. Quando si dispone di milioni di dispositivi e anni di dati, questa ricerca potrebbe richiedere la scansione di grandi quantità di dati.

Di seguito è riportato un esempio di come è possibile utilizzare le interrogazioni pianificate per ottimizzare la ricerca dell'ultimo punto emesso da un dispositivo. È possibile utilizzare lo stesso schema per ottimizzare anche la prima query, se l'applicazione ne ha bisogno.

**Topics**
+ [Calcolato dalla tabella di origine](#scheduledqueries-patterns-lastpointfromdevice-computedfromsrctable)
+ [Tabella derivata da precalcolare con granularità giornaliera](#scheduledqueries-patterns-lastpointfromdevice-derivedttabletoprecompute)
+ [Calcolato dalla tabella derivata](#scheduledqueries-patterns-lastpointfromdevice-computedfromderivedtable)
+ [Combinazione da tabella sorgente e derivata](#scheduledqueries-patterns-lastpointfromdevice-combinesourceandderived)

## Calcolato dalla tabella di origine
<a name="scheduledqueries-patterns-lastpointfromdevice-computedfromsrctable"></a>

Di seguito è riportata una query di esempio per trovare l'ultima misurazione emessa dai servizi in una distribuzione specifica (ad esempio, server per un determinato microservizio all'interno di una determinata regione, cella, silo e availability\$1zone). Nell'applicazione di esempio, questa query restituirà l'ultima misurazione per centinaia di server. Si noti inoltre che questa query ha un predicato temporale illimitato e cerca tutti i dati più vecchi di un determinato timestamp.

**Nota**  
Per informazioni sulle funzioni and, vedere. `max` `max_by` [Funzioni di aggregazione](aggregate-functions.md)

```
SELECT instance_name, MAX(time) AS time, MAX_BY(gc_pause, time) AS last_measure
FROM "raw_data"."devops"
WHERE time < from_milliseconds(1636685271872)
    AND measure_name = 'events'
    AND region = 'us-east-1'
    AND cell = 'us-east-1-cell-10'
    AND silo = 'us-east-1-cell-10-silo-3'
    AND availability_zone = 'us-east-1-1'
    AND microservice_name = 'hercules'
GROUP BY region, cell, silo, availability_zone, microservice_name,
    instance_name, process_name, jdk_version
ORDER BY instance_name, time DESC
```

## Tabella derivata da precalcolare con granularità giornaliera
<a name="scheduledqueries-patterns-lastpointfromdevice-derivedttabletoprecompute"></a>

È possibile convertire il caso d'uso precedente in un calcolo pianificato. Se i requisiti dell'applicazione sono tali da richiedere l'ottenimento di questi valori per l'intero parco macchine in più aree, celle, silos, zone di disponibilità e microservizi, è possibile utilizzare un unico calcolo di pianificazione per precalcolare i valori per l'intero parco macchine. Questa è la potenza delle query pianificate senza server di Timestream for LiveAnalytics, che consente a queste query di adattarsi ai requisiti di scalabilità dell'applicazione.

Di seguito è riportata una query per precalcolare l'ultimo punto su tutti i server per un determinato giorno. Nota che la query ha solo un predicato temporale e non un predicato sulle dimensioni. Il predicato temporale limita la query al giorno trascorso dal momento in cui il calcolo viene attivato in base all'espressione di pianificazione specificata.

```
SELECT region, cell, silo, availability_zone, microservice_name, 
    instance_name, process_name, jdk_version, 
    MAX(time) AS time, MAX_BY(gc_pause, time) AS last_measure 
FROM raw_data.devops 
WHERE time BETWEEN bin(@scheduled_runtime, 1d) - 1d AND bin(@scheduled_runtime, 1d) 
    AND measure_name = 'events' 
GROUP BY region, cell, silo, availability_zone, microservice_name, 
    instance_name, process_name, jdk_version
```

Di seguito è riportata una configurazione per il calcolo pianificato utilizzando la query precedente, che esegue tale query alle 01:00 UTC ogni giorno per calcolare l'aggregato del giorno precedente. L'espressione di pianificazione cron (0) \$1 \$1? \$1) controlla questo comportamento e viene eseguito un'ora dopo la fine della giornata, tenendo conto dei dati che arrivano fino a un giorno di ritardo.

```
{
    "Name": "PT1DPerInstanceLastpoint",
    "QueryString": "SELECT region, cell, silo, availability_zone, microservice_name, instance_name, process_name, jdk_version, MAX(time) AS time, MAX_BY(gc_pause, time) AS last_measure FROM raw_data.devops WHERE time BETWEEN bin(@scheduled_runtime, 1d) - 1d AND bin(@scheduled_runtime, 1d) AND measure_name = 'events' GROUP BY region, cell, silo, availability_zone, microservice_name, instance_name, process_name, jdk_version",
    "ScheduleConfiguration": {
        "ScheduleExpression": "cron(0 1 * * ? *)"
    },
    "NotificationConfiguration": {
        "SnsConfiguration": {
            "TopicArn": "******"
        }
    },
    "TargetConfiguration": {
        "TimestreamConfiguration": {
            "DatabaseName": "derived",
            "TableName": "per_timeseries_lastpoint_pt1d",
            "TimeColumn": "time",
            "DimensionMappings": [
                {
                    "Name": "region",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "cell",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "silo",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "availability_zone",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "microservice_name",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "instance_name",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "process_name",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "jdk_version",
                    "DimensionValueType": "VARCHAR"
                }
            ],
            "MultiMeasureMappings": {
                "TargetMultiMeasureName": "last_measure",
                "MultiMeasureAttributeMappings": [
                    {
                        "SourceColumn": "last_measure",
                        "MeasureValueType": "DOUBLE"
                    }
                ]
            }
        }
    },
    "ErrorReportConfiguration": {
        "S3Configuration" : {
            "BucketName" : "******",
            "ObjectKeyPrefix": "errors",
            "EncryptionOption": "SSE_S3"
        }
    },
    "ScheduledQueryExecutionRoleArn": "******"
}
```

## Calcolato dalla tabella derivata
<a name="scheduledqueries-patterns-lastpointfromdevice-computedfromderivedtable"></a>

Una volta definita la tabella derivata utilizzando la configurazione precedente e dopo che almeno un'istanza della query pianificata ha materializzato i dati nella tabella derivata, è ora possibile interrogare la tabella derivata per ottenere la misurazione più recente. Di seguito è riportato un esempio di query sulla tabella derivata.

```
SELECT instance_name, MAX(time) AS time, MAX_BY(last_measure, time) AS last_measure
FROM "derived"."per_timeseries_lastpoint_pt1d"
WHERE time < from_milliseconds(1636746715649)
    AND measure_name = 'last_measure'
    AND region = 'us-east-1'
    AND cell = 'us-east-1-cell-10'
    AND silo = 'us-east-1-cell-10-silo-3'
    AND availability_zone = 'us-east-1-1'
    AND microservice_name = 'hercules'
GROUP BY region, cell, silo, availability_zone, microservice_name,
    instance_name, process_name, jdk_version
ORDER BY instance_name, time DESC
```

## Combinazione da tabella sorgente e derivata
<a name="scheduledqueries-patterns-lastpointfromdevice-combinesourceandderived"></a>

Analogamente all'esempio precedente, tutti i dati della tabella derivata non avranno le scritture più recenti. Pertanto, è possibile utilizzare nuovamente uno schema simile a quello precedente per unire i dati della tabella derivata con i dati precedenti e utilizzare i dati di origine per il suggerimento rimanente. Di seguito è riportato un esempio di tale interrogazione che utilizza l'approccio UNION simile. Poiché il requisito dell'applicazione è quello di trovare la misurazione più recente prima di un periodo di tempo e l'ora di inizio può essere passata, il modo in cui si scrive questa query consiste nell'utilizzare l'ora fornita, utilizzare i dati di origine per un massimo di un giorno a partire dall'ora specificata e quindi utilizzare la tabella derivata sui dati più vecchi. Come si può vedere dall'esempio di query riportato di seguito, il predicato temporale sui dati di origine è limitato. Ciò garantisce un'elaborazione efficiente sulla tabella di origine, che contiene un volume di dati significativamente maggiore, e quindi il predicato temporale illimitato si trova sulla tabella derivata.

```
WITH last_point_derived AS (
    SELECT instance_name, MAX(time) AS time, MAX_BY(last_measure, time) AS last_measure
    FROM "derived"."per_timeseries_lastpoint_pt1d"
    WHERE time < from_milliseconds(1636746715649)
        AND measure_name = 'last_measure'
        AND region = 'us-east-1'
        AND cell = 'us-east-1-cell-10'
        AND silo = 'us-east-1-cell-10-silo-3'
        AND availability_zone = 'us-east-1-1'
        AND microservice_name = 'hercules'
    GROUP BY region, cell, silo, availability_zone, microservice_name,
        instance_name, process_name, jdk_version
), last_point_source AS (
    SELECT instance_name, MAX(time) AS time, MAX_BY(gc_pause, time) AS last_measure
    FROM "raw_data"."devops"
    WHERE time < from_milliseconds(1636746715649) AND time > from_milliseconds(1636746715649) - 26h
        AND measure_name = 'events'
        AND region = 'us-east-1'
        AND cell = 'us-east-1-cell-10'
        AND silo = 'us-east-1-cell-10-silo-3'
        AND availability_zone = 'us-east-1-1'
        AND microservice_name = 'hercules'
    GROUP BY region, cell, silo, availability_zone, microservice_name,
        instance_name, process_name, jdk_version
)
SELECT instance_name, MAX(time) AS time, MAX_BY(last_measure, time) AS last_measure
FROM (
    SELECT * FROM last_point_derived
    UNION
    SELECT * FROM last_point_source
)
GROUP BY instance_name
ORDER BY instance_name, time DESC
```

La precedente è solo un'illustrazione di come è possibile strutturare le tabelle derivate. Se disponi di anni di dati, puoi utilizzare più livelli di aggregazioni. Ad esempio, puoi aggiungere aggregati mensili a quelli giornalieri e aggiungere aggregati orari prima di quelli giornalieri. In questo modo puoi unire i dati più recenti per inserire l'ultima ora, quelli con frequenza oraria per inserire l'ultimo giorno, quelli giornalieri per compilare l'ultimo mese e quelli mensili per inserire i dati più vecchi. Il numero di livelli impostati rispetto alla pianificazione degli aggiornamenti dipenderà dalle vostre esigenze relative alla frequenza con cui queste query vengono emesse e al numero di utenti che le emettono contemporaneamente.

# Valori di dimensione univoci
<a name="scheduledqueries-patterns-uniquedimvalues"></a>

Potresti avere un caso d'uso in cui disponi di dashboard in cui desideri utilizzare i valori univoci delle dimensioni come variabili per approfondire le metriche corrispondenti a una specifica porzione di dati. L'istantanea seguente è un esempio in cui la dashboard precompila i valori univoci di diverse dimensioni come region, cell, silo, microservice e availability\$1zone. Qui mostriamo un esempio di come è possibile utilizzare le query pianificate per velocizzare in modo significativo il calcolo di questi valori distinti di queste variabili in base alle metriche che stai monitorando.

**Topics**
+ [Sui dati grezzi](#scheduledqueries-patterns-uniquedimvalues-onraw)
+ [Precalcola valori di dimensione univoci](#scheduledqueries-patterns-uniquedimvalues-precompute)
+ [Calcolo delle variabili dalla tabella derivata](#scheduledqueries-patterns-uniquedimvalues-fromderived)

## Sui dati grezzi
<a name="scheduledqueries-patterns-uniquedimvalues-onraw"></a>

Puoi usare SELECT DISTINCT per calcolare i valori distinti visti dai tuoi dati. Ad esempio, se desideri ottenere i valori distinti della regione, puoi utilizzare la query di questo modulo.

```
SELECT DISTINCT region
FROM "raw_data"."devops"
WHERE time > ago(1h)
ORDER BY 1
```

Potresti tracciare milioni di dispositivi e miliardi di serie temporali. Tuttavia, nella maggior parte dei casi, queste variabili interessanti riguardano dimensioni di cardinalità inferiori, in cui sono presenti da poche a decine di valori. Il calcolo di DISTINCT dai dati grezzi può richiedere la scansione di grandi volumi di dati. 

## Precalcola valori di dimensione univoci
<a name="scheduledqueries-patterns-uniquedimvalues-precompute"></a>

Desideri che queste variabili si carichino rapidamente in modo che i dashboard siano interattivi. Inoltre, queste variabili vengono spesso calcolate su ogni caricamento del dashboard, quindi è necessario che siano anche convenienti. È possibile ottimizzare la ricerca di queste variabili utilizzando query pianificate e materializzandole in una tabella derivata.

Innanzitutto, è necessario identificare le dimensioni per le quali è necessario calcolare i valori o le colonne DISTINCT che verranno utilizzati nei predicati durante il calcolo del valore DISTINCT.

In questo esempio, puoi vedere che la dashboard sta inserendo valori distinti per le dimensioni region, cell, silo, availability\$1zone e microservice. Quindi puoi usare la query seguente per precalcolare questi valori unici.

```
SELECT region, cell, silo, availability_zone, microservice_name, 
    min(@scheduled_runtime) AS time, COUNT(*) as numDataPoints 
FROM raw_data.devops 
WHERE time BETWEEN @scheduled_runtime - 15m AND @scheduled_runtime 
GROUP BY region, cell, silo, availability_zone, microservice_name
```

Ci sono alcune cose importanti da notare qui.
+ È possibile utilizzare un calcolo pianificato per precalcolare i valori per molte query diverse. Ad esempio, si utilizza la query precedente per precalcolare i valori per cinque diverse variabili. Quindi non è necessario uno per ogni variabile. È possibile utilizzare lo stesso schema per identificare calcoli condivisi su più pannelli per ottimizzare il numero di query pianificate da gestire.
+ I valori univoci delle dimensioni non sono intrinsecamente dati di serie temporali. Quindi li converti in serie temporali usando @scheduled\$1runtime. Associando questi dati al parametro @scheduled\$1runtime, puoi anche tenere traccia di quali valori univoci sono comparsi in un determinato momento, creando così dati di serie temporali a partire da essi.
+ Nell'esempio precedente, vedrete il tracciamento di un valore metrico. Questo esempio utilizza COUNT (\$1). Puoi calcolare altri aggregati significativi se desideri monitorarli per le tue dashboard.

Di seguito è riportata una configurazione per un calcolo pianificato utilizzando la query precedente. In questo esempio, è configurato per l'aggiornamento una volta ogni 15 minuti utilizzando l'espressione di pianificazione cron (0/15 \$1 \$1 \$1? \$1). 

```
{
    "Name": "PT15mHighCardPerUniqueDimensions",
    "QueryString": "SELECT region, cell, silo, availability_zone, microservice_name, min(@scheduled_runtime) AS time, COUNT(*) as numDataPoints FROM raw_data.devops WHERE time BETWEEN @scheduled_runtime - 15m AND @scheduled_runtime GROUP BY region, cell, silo, availability_zone, microservice_name",
    "ScheduleConfiguration": {
        "ScheduleExpression": "cron(0/15 * * * ? *)"
    },
    "NotificationConfiguration": {
        "SnsConfiguration": {
            "TopicArn": "******"
        }
    },
    "TargetConfiguration": {
        "TimestreamConfiguration": {
            "DatabaseName": "derived",
            "TableName": "hc_unique_dimensions_pt15m",
            "TimeColumn": "time",
            "DimensionMappings": [
                {
                    "Name": "region",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "cell",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "silo",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "availability_zone",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "microservice_name",
                    "DimensionValueType": "VARCHAR"
                }
            ],
            "MultiMeasureMappings": {
                "TargetMultiMeasureName": "count_multi",
                "MultiMeasureAttributeMappings": [
                    {
                        "SourceColumn": "numDataPoints",
                        "MeasureValueType": "BIGINT"
                    }
                ]
            }
        }
    },
    "ErrorReportConfiguration": {
        "S3Configuration" : {
            "BucketName" : "******",
            "ObjectKeyPrefix": "errors",
            "EncryptionOption": "SSE_S3"
        }
    },
    "ScheduledQueryExecutionRoleArn": "******"
}
```

## Calcolo delle variabili dalla tabella derivata
<a name="scheduledqueries-patterns-uniquedimvalues-fromderived"></a>

Una volta che il calcolo pianificato ha prematerializzato i valori univoci nella tabella derivata hc\$1unique\$1dimensions\$1pt15m, è possibile utilizzare la tabella derivata per calcolare in modo efficiente i valori univoci delle dimensioni. Di seguito sono riportati alcuni esempi di query su come calcolare i valori univoci e su come utilizzare altre variabili come predicati in queste query con valori unici.

**Region**

```
SELECT DISTINCT region
FROM "derived"."hc_unique_dimensions_pt15m"
WHERE time > ago(1h)
ORDER BY 1
```

**Cella**

```
SELECT DISTINCT cell
FROM "derived"."hc_unique_dimensions_pt15m"
WHERE time > ago(1h)
  AND region = '${region}'
ORDER BY 1
```

**Silo**

```
SELECT DISTINCT silo
FROM "derived"."hc_unique_dimensions_pt15m"
WHERE time > ago(1h)
   AND region = '${region}' AND cell = '${cell}'
ORDER BY 1
```

**Microservizio**

```
SELECT DISTINCT microservice_name
FROM "derived"."hc_unique_dimensions_pt15m"
WHERE time > ago(1h)
   AND region = '${region}' AND cell = '${cell}'
ORDER BY 1
```

**Zona di disponibilità**

```
SELECT DISTINCT availability_zone
FROM "derived"."hc_unique_dimensions_pt15m"
WHERE time > ago(1h)
   AND region = '${region}' AND cell = '${cell}' AND silo = '${silo}'
ORDER BY 1
```

# Gestione dei dati in arrivo tardivo
<a name="scheduledqueries-patterns-latearrive"></a>

Potrebbero verificarsi scenari in cui è possibile che i dati arrivino con notevole ritardo, ad esempio, il momento in cui i dati sono stati importati in Timestream for LiveAnalytics è notevolmente ritardato rispetto al timestamp associato alle righe che vengono importate. Negli esempi precedenti, avete visto come utilizzare gli intervalli di tempo definiti dal parametro @scheduled\$1runtime per tenere conto di alcuni dati che arrivano in ritardo. Tuttavia, se avete casi d'uso in cui i dati possono essere ritardati di ore o giorni, potrebbe essere necessario un modello diverso per assicurarvi che i calcoli preliminari nella tabella derivata siano aggiornati in modo appropriato per riflettere tali dati in arrivo in ritardo. Per informazioni generali sui dati in arrivo in ritardo, consulta. [Scrittura di dati (inserti e sconvolgimenti)](writes.md#writes.writing-data-inserts-upserts)

Di seguito verranno illustrati due modi diversi per gestire questi dati in arrivo in ritardo.
+ Se hai ritardi prevedibili nell'arrivo dei dati, puoi utilizzare un altro calcolo pianificato «recuperato» per aggiornare gli aggregati per i dati in arrivo in ritardo.
+ Se hai ritardi imprevedibili o dati occasionali relativi agli arrivi tardivi, puoi utilizzare le esecuzioni manuali per aggiornare le tabelle derivate.

Questa discussione tratta gli scenari di arrivo tardivo dei dati. Tuttavia, gli stessi principi si applicano alle correzioni dei dati, quando hai modificato i dati nella tabella di origine e desideri aggiornare gli aggregati nelle tabelle derivate.

**Topics**
+ [Interrogazioni di recupero pianificate](#scheduledqueries-patterns-latearrive-schedcatchup)
+ [Esecuzioni manuali per dati imprevedibili in arrivo in ritardo](#scheduledqueries-patterns-latearrive-manual)

## Interrogazioni di recupero pianificate
<a name="scheduledqueries-patterns-latearrive-schedcatchup"></a>

### Interroga i dati aggregati che sono arrivati in tempo
<a name="scheduledqueries-patterns-latearrive-schedcatchup-1"></a>

Di seguito è riportato uno schema che illustra come è possibile utilizzare un metodo automatizzato per aggiornare gli aggregati in caso di ritardi prevedibili nell'arrivo dei dati. Considera uno degli esempi precedenti di calcolo pianificato su dati in tempo reale riportati di seguito. Questo calcolo pianificato aggiorna la tabella derivata una volta ogni 30 minuti e tiene già conto dei dati con un ritardo fino a un'ora.

```
{
    "Name": "MultiPT30mPerHrPerTimeseriesDPCount",
    "QueryString": "SELECT region, cell, silo, availability_zone, microservice_name, instance_type, os_version, instance_name, process_name, jdk_version, bin(time, 1h) as hour, SUM(CASE WHEN measure_name = 'metrics' THEN 20 ELSE 5 END) as numDataPoints FROM raw_data.devops WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 1h AND @scheduled_runtime + 1h GROUP BY region, cell, silo, availability_zone, microservice_name, instance_type, os_version, instance_name, process_name, jdk_version, bin(time, 1h)",
    "ScheduleConfiguration": {
        "ScheduleExpression": "cron(0/30 * * * ? *)"
    },
    "NotificationConfiguration": {
        "SnsConfiguration": {
            "TopicArn": "******"
        }
    },
    "TargetConfiguration": {
        "TimestreamConfiguration": {
            "DatabaseName": "derived",
            "TableName": "dp_per_timeseries_per_hr",
            "TimeColumn": "hour",
            "DimensionMappings": [
                {
                    "Name": "region",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "cell",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "silo",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "availability_zone",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "microservice_name",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "instance_type",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "os_version",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "instance_name",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "process_name",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "jdk_version",
                    "DimensionValueType": "VARCHAR"
                }
            ],
            "MultiMeasureMappings": {
                "TargetMultiMeasureName": "numDataPoints",
                "MultiMeasureAttributeMappings": [
                    {
                        "SourceColumn": "numDataPoints",
                        "MeasureValueType": "BIGINT"
                    }
                ]
            }
        }
    },
    "ErrorReportConfiguration": {
        "S3Configuration" : {
            "BucketName" : "******",
            "ObjectKeyPrefix": "errors",
            "EncryptionOption": "SSE_S3"
        }
    },
    "ScheduledQueryExecutionRoleArn": "******"
}
```

### Interrogazione di recupero che aggiorna gli aggregati per i dati in arrivo in ritardo
<a name="scheduledqueries-patterns-latearrive-schedcatchup-2"></a>

Ora, se consideri il caso, i tuoi dati possono subire un ritardo di circa 12 ore. Di seguito è riportata una variante della stessa query. Tuttavia, la differenza è che calcola gli aggregati sui dati che subiscono un ritardo fino a 12 ore rispetto a quando viene attivato il calcolo pianificato. Ad esempio, come vedi la query nell'esempio seguente, l'intervallo di tempo a cui si rivolge questa query è compreso tra 2 e 14 ore prima dell'attivazione della query. Inoltre, se notate l'espressione di pianificazione cron (0) 0,12 \$1 \$1? \$1), attiverà il calcolo ogni giorno alle 00:00 UTC e alle 12:00 UTC. Pertanto, quando la query viene attivata il 01/12/2021 00:00:00, aggiorna gli aggregati nell'intervallo di tempo 2021-11-30 10:00:00 e 2021-11-30 22:00:00. Le query pianificate utilizzano una semantica upsert simile alle scritture di Timestream for, in cui questa query LiveAnalytics di recupero aggiornerà i valori aggregati con valori più recenti se nella finestra sono presenti dati in arrivo in ritardo o se vengono trovati aggregati più recenti (ad esempio, in questo aggregato viene visualizzato un nuovo raggruppamento che non era presente quando è stato attivato il calcolo pianificato originale), quindi il nuovo aggregato verrà inserito nella tabella derivata. Allo stesso modo, quando l'istanza successiva viene attivata il 2021-12-01 12:00:00, quell'istanza aggiornerà gli aggregati nell'intervallo 2021-11-30 22:00:00 e 2021-12-01 10:00:00.

```
       {
    "Name": "MultiPT12HPerHrPerTimeseriesDPCountCatchUp",
    "QueryString": "SELECT region, cell, silo, availability_zone, microservice_name, instance_type, os_version, instance_name, process_name, jdk_version, bin(time, 1h) as hour, SUM(CASE WHEN measure_name = 'metrics' THEN 20 ELSE 5 END) as numDataPoints FROM raw_data.devops WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 14h AND bin(@scheduled_runtime, 1h) - 2h GROUP BY region, cell, silo, availability_zone, microservice_name, instance_type, os_version, instance_name, process_name, jdk_version, bin(time, 1h)",
    "ScheduleConfiguration": {
        "ScheduleExpression": "cron(0 0,12 * * ? *)"
    },
    "NotificationConfiguration": {
        "SnsConfiguration": {
            "TopicArn": "******"
        }
    },
    "TargetConfiguration": {
        "TimestreamConfiguration": {
            "DatabaseName": "derived",
            "TableName": "dp_per_timeseries_per_hr",
            "TimeColumn": "hour",
            "DimensionMappings": [
                {
                    "Name": "region",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "cell",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "silo",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "availability_zone",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "microservice_name",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "instance_type",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "os_version",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "instance_name",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "process_name",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "jdk_version",
                    "DimensionValueType": "VARCHAR"
                }
            ],
            "MultiMeasureMappings": {
                "TargetMultiMeasureName": "numDataPoints",
                "MultiMeasureAttributeMappings": [
                    {
                        "SourceColumn": "numDataPoints",
                        "MeasureValueType": "BIGINT"
                    }
                ]
            }
        }
    },
    "ErrorReportConfiguration": {
        "S3Configuration" : {
            "BucketName" : "******",
            "ObjectKeyPrefix": "errors",
            "EncryptionOption": "SSE_S3"
        }
    },
    "ScheduledQueryExecutionRoleArn": "******"
}
```

L'esempio precedente è un'illustrazione che presuppone che l'arrivo in ritardo sia limitato a 12 ore e che sia possibile aggiornare la tabella derivata una volta ogni 12 ore per i dati che arrivano dopo la finestra in tempo reale. È possibile adattare questo modello per aggiornare la tabella derivata una volta ogni ora in modo che rifletta prima i dati che arrivano in ritardo. Allo stesso modo, puoi adattare l'intervallo di tempo in modo che sia più vecchio di 12 ore, ad esempio un giorno o anche una settimana o più, per gestire dati prevedibili in arrivo tardivo.

## Esecuzioni manuali per dati imprevedibili in arrivo in ritardo
<a name="scheduledqueries-patterns-latearrive-manual"></a>

In alcuni casi possono esserci dati imprevedibili con arrivo tardivo o in cui si sono apportate modifiche ai dati di origine e si sono aggiornati alcuni valori a posteriori. In tutti questi casi, è possibile attivare manualmente le interrogazioni pianificate per aggiornare la tabella derivata. Di seguito è riportato un esempio di come è possibile raggiungere questo obiettivo.

Supponiamo di avere il caso d'uso in cui il calcolo è scritto nella tabella derivata dp\$1per\$1timeseries\$1per\$1hr. I tuoi dati di base nella tabella devops sono stati aggiornati nell'intervallo di tempo 2021-11-30 23:00:00 - 2021-12-01 00:00:00. Esistono due diverse query pianificate che possono essere utilizzate per aggiornare questa tabella derivata: Multi e Multi. PT30m PerHrPerTimeseries DPCount PT12 HPer HrPerTimeseries DPCount CatchUp Ogni calcolo pianificato per cui crei in Timestream LiveAnalytics ha un ARN univoco che ottieni quando crei il calcolo o quando esegui un'operazione sull'elenco. È possibile utilizzare l'ARN per il calcolo e un valore per il parametro @scheduled\$1runtime utilizzato dalla query per eseguire questa operazione. 

Supponiamo che il calcolo per Multi PT30m PerHrPerTimeseries DPCount abbia un ARN arn\$11 e desideri utilizzare questo calcolo per aggiornare la tabella derivata. Poiché il calcolo pianificato precedente aggiorna gli aggregati 1 ora prima e 1 ora dopo il valore @scheduled\$1runtime, puoi coprire l'intervallo di tempo per l'aggiornamento (2021-11-30 23:00:00 - 2021-12-01 00:00:00) utilizzando un valore di 2021-12-01 00:00:00 per il parametro @scheduled\$1runtime. A tal fine, puoi utilizzare l' ExecuteScheduledQuery API per passare l'ARN di questo calcolo e il valore del parametro temporale in secondi epoch (in UTC). Di seguito è riportato un esempio che utilizza la AWS CLI e puoi seguire lo stesso schema utilizzando uno qualsiasi dei SDKs supportati da Timestream for. LiveAnalytics

```
aws timestream-query execute-scheduled-query --scheduled-query-arn arn_1 --invocation-time 1638316800 --profile profile --region us-east-1
```

Nell'esempio precedente, profile è il AWS profilo che dispone dei privilegi appropriati per effettuare questa chiamata API e 1638316800 corrisponde al secondo periodo del 2021-12-01 00:00:00. Questo trigger manuale si comporta quasi come il trigger automatico, presupponendo che il sistema abbia attivato questa chiamata nel periodo di tempo desiderato.

Se hai ricevuto un aggiornamento in un periodo di tempo più lungo, ad esempio i dati di base sono stati aggiornati per il 2021-11-30 23:00:00 - 01/12/2021 11:00:00, puoi attivare le query precedenti più volte per coprire l'intero intervallo di tempo. Ad esempio, potresti eseguire sei diverse esecuzioni come segue.

```
aws timestream-query execute-scheduled-query --scheduled-query-arn arn_1 --invocation-time 1638316800 --profile profile --region us-east-1

aws timestream-query execute-scheduled-query --scheduled-query-arn arn_1 --invocation-time 1638324000 --profile profile --region us-east-1

aws timestream-query execute-scheduled-query --scheduled-query-arn arn_1 --invocation-time 1638331200 --profile profile --region us-east-1

aws timestream-query execute-scheduled-query --scheduled-query-arn arn_1 --invocation-time 1638338400 --profile profile --region us-east-1

aws timestream-query execute-scheduled-query --scheduled-query-arn arn_1 --invocation-time 1638345600 --profile profile --region us-east-1

aws timestream-query execute-scheduled-query --scheduled-query-arn arn_1 --invocation-time 1638352800 --profile profile --region us-east-1
```

I sei comandi precedenti corrispondono al calcolo pianificato richiamato al 2021-12-01 00:00:00, 2021-12-01 02:00:00, 2021-12-01 04:0:00, 2021-12-01 06:00:00, 2021-12-01 08:00:00e 2021-12-01 10:00:

In alternativa, puoi utilizzare il calcolo Multi PT12 HPer HrPerTimeseries DPCount CatchUp attivato alle 13:00:00 del 01/12/2021 per un'esecuzione per aggiornare gli aggregati per l'intero intervallo di tempo di 12 ore. Ad esempio, se arn\$12 è l'ARN per quel calcolo, puoi eseguire il seguente comando dalla CLI.

```
aws timestream-query execute-scheduled-query --scheduled-query-arn arn_2 --invocation-time 1638363600 --profile profile --region us-east-1
```

Vale la pena notare che per un trigger manuale, è possibile utilizzare un timestamp per il parametro invocationtime che non deve essere allineato con i timestamp di quel trigger automatico. Ad esempio, nell'esempio precedente, hai attivato il calcolo all'ora 2021-12-01 13:00:00 anche se la pianificazione automatica si attiva solo nei timestamp 2021-12-01 10:00:00, 2021-12-01 12:00:00e 2021-12-02 00:00:00. Timestream for offre la flessibilità necessaria per attivarlo con i valori appropriati necessari per le operazioni manuali. LiveAnalytics 

Di seguito sono riportate alcune considerazioni importanti sull'utilizzo dell'API. ExecuteScheduledQuery 
+ Se state attivando più di queste chiamate, dovete assicurarvi che queste chiamate non generino risultati in intervalli di tempo sovrapposti. Ad esempio, negli esempi precedenti, c'erano sei invocazioni. Ogni chiamata copre un intervallo di tempo di 2 ore, quindi i timestamp di invocazione sono stati distribuiti di due ore ciascuno per evitare sovrapposizioni negli aggiornamenti. Ciò garantisce che i dati nella tabella derivata finiscano in uno stato in cui le corrispondenze siano aggregate dalla tabella di origine. Se non riesci a garantire intervalli di tempo non sovrapposti, assicurati che queste esecuzioni vengano attivate in sequenza una dopo l'altra. Se si attivano più esecuzioni contemporaneamente che si sovrappongono nei rispettivi intervalli di tempo, nei report sugli errori relativi a queste esecuzioni è possibile che si verifichino conflitti di versione. Ai risultati generati da una chiamata di interrogazione pianificata viene assegnata una versione in base a quando è stata attivata la chiamata. Pertanto, le righe generate da chiamate più recenti hanno versioni successive. Un record di versione superiore può sovrascrivere un record di versione inferiore. Per le query pianificate attivate automaticamente, Timestream for gestisce LiveAnalytics automaticamente le pianificazioni in modo da non visualizzare questi problemi anche se le chiamate successive hanno intervalli di tempo sovrapposti.
+ notato in precedenza, è possibile attivare le invocazioni con qualsiasi valore di timestamp per @scheduled\$1runtime. Quindi è tua responsabilità impostare i valori in modo appropriato in modo che gli intervalli di tempo appropriati vengano aggiornati nella tabella derivata corrispondente agli intervalli in cui i dati sono stati aggiornati nella tabella di origine.
+ È inoltre possibile utilizzare questi trigger manuali per le query pianificate che si trovano nello stato DISABILITATO. Ciò consente di definire interrogazioni speciali che non vengono eseguite in una pianificazione automatica, poiché si trovano nello stato DISABILITATO. Piuttosto, puoi utilizzare i trigger manuali su di essi per gestire le correzioni dei dati o i casi di utilizzo in ritardo.

# Riempimento dei precalcoli storici
<a name="scheduledqueries-patterns-backfilling"></a>

Quando crei un calcolo pianificato, Timestream for LiveAnalytics gestisce le esecuzioni delle query in futuro, laddove l'aggiornamento è regolato dall'espressione di pianificazione fornita. A seconda della quantità di dati storici contenuta nella tabella di origine, potresti voler aggiornare la tabella derivata con aggregati corrispondenti ai dati storici. Puoi utilizzare la logica precedente per i trigger manuali per riempire nuovamente gli aggregati storici.

Ad esempio, se consideriamo la tabella derivata per\$1timeseries\$1lastpoint\$1pt1d, il calcolo pianificato viene aggiornato una volta al giorno per il giorno passato. Se la tabella di origine contiene un anno di dati, puoi utilizzare l'ARN per questo calcolo pianificato e attivarlo manualmente per ogni giorno fino a un anno in modo che la tabella derivata contenga tutte le query storiche popolate. Nota che qui si applicano tutte le avvertenze relative ai trigger manuali. Inoltre, se la tabella derivata è configurata in modo tale che l'acquisizione storica venga scritta nell'archivio magnetico della tabella derivata, tenete presente le [migliori pratiche](https://docs.aws.amazon.com/timestream/latest/developerguide/best-practices.html) e [i limiti per le scritture](https://docs.aws.amazon.com/timestream/latest/developerguide/ts-limits.html) sull'archivio magnetico.

# Esempi di interrogazioni pianificate
<a name="scheduledqueries-examples"></a>

Questa sezione contiene esempi di come utilizzare Timestream for Scheduled Queries per LiveAnalytics ottimizzare i costi e i tempi di caricamento della dashboard durante la visualizzazione delle statistiche relative all'intera flotta e monitorare efficacemente la flotta di dispositivi. Le query pianificate in Timestream for ti LiveAnalytics consentono di esprimere le tue query utilizzando l'intera area di superficie SQL di Timestream for. LiveAnalytics La tua query può includere una o più tabelle di origine, eseguire aggregazioni o qualsiasi altra query consentita dal linguaggio SQL di Timestream for e quindi archiviare i risultati LiveAnalytics della query in un'altra tabella di destinazione in Timestream for. LiveAnalytics

*Questa sezione fa riferimento alla tabella di destinazione di una query pianificata come tabella derivata.*

Ad esempio, utilizzeremo un' DevOps applicazione in cui si monitora un'ampia flotta di server distribuiti in più distribuzioni (ad esempio regioni, celle e silos), più microservizi e si monitorano le statistiche a livello di flotta utilizzando Timestream for. LiveAnalytics [Lo schema di esempio che utilizzeremo è descritto in Schema di esempio per le query pianificate.](https://docs.aws.amazon.com/timestream/latest/developerguide/scheduledqueries-common-schema-example.html) 

Verranno descritti i seguenti scenari.
+ Come convertire una dashboard, tracciare statistiche aggregate dai dati grezzi che inserite in Timestream per LiveAnalytics trasformarle in una query pianificata e quindi come utilizzare gli aggregati precalcolati per creare una nuova dashboard che mostri statistiche aggregate.
+ Come combinare le interrogazioni pianificate per ottenere una visualizzazione aggregata e i dati granulari non elaborati per approfondire i dettagli. Ciò consente di archiviare e analizzare i dati grezzi ottimizzando al contempo le operazioni comuni a livello di flotta utilizzando query pianificate.
+ Come ottimizzare i costi utilizzando le query pianificate individuando quali aggregati vengono utilizzati in più dashboard e hanno la stessa query pianificata per popolare più pannelli nello stesso o in più dashboard.

**Topics**
+ [Conversione di un pannello di controllo aggregato in una query pianificata](scheduledqueries-example1.md)
+ [Utilizzo di query pianificate e dati non elaborati per i drill down](scheduledqueries-example2.md)
+ [Ottimizzazione dei costi condividendo le query pianificate tra i dashboard](scheduledqueries-example3.md)
+ [Confronto di un'interrogazione su una tabella di base con un'interrogazione dei risultati di una query pianificata](scheduledqueries-example4-clickstream.md)

# Conversione di un pannello di controllo aggregato in una query pianificata
<a name="scheduledqueries-example1"></a>

Supponiamo che stiate calcolando le statistiche relative all'intero parco macchine, ad esempio il numero di host presenti nel parco macchine in base ai cinque microservizi e alle sei regioni in cui viene distribuito il servizio. Dall'istantanea qui sotto, puoi vedere che ci sono 500.000 server che emettono metriche e alcune delle regioni più grandi (ad esempio, us-east-1) hanno più di 200.000 server.

Il calcolo di questi aggregati, in cui si calcolano nomi di istanze distinti su centinaia di gigabyte di dati, può comportare una latenza delle query di decine di secondi, oltre al costo della scansione dei dati.

![\[Instance counts for microservices: apollo and zeus 150k, hercules 100k, athena and demeter 50k each.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/sched_query_ex1_img1.png)


**Interrogazione originale sulla dashboard**

L'aggregato mostrato nel pannello della dashboard viene calcolato, a partire da dati grezzi, utilizzando la query seguente. La query utilizza più costrutti SQL, come conteggi distinti e più funzioni di aggregazione.

```
SELECT CASE WHEN microservice_name = 'apollo' THEN num_instances ELSE NULL END AS apollo,
    CASE WHEN microservice_name = 'athena' THEN num_instances ELSE NULL END AS athena,
    CASE WHEN microservice_name = 'demeter' THEN num_instances ELSE NULL END AS demeter,
    CASE WHEN microservice_name = 'hercules' THEN num_instances ELSE NULL END AS hercules,
    CASE WHEN microservice_name = 'zeus' THEN num_instances ELSE NULL END AS zeus
FROM (
    SELECT microservice_name, SUM(num_instances) AS num_instances
    FROM (
        SELECT microservice_name, COUNT(DISTINCT instance_name) as num_instances
        FROM "raw_data"."devops"
        WHERE time BETWEEN from_milliseconds(1636526171043) AND from_milliseconds(1636612571043)
            AND measure_name = 'metrics'
        GROUP BY region, cell, silo, availability_zone, microservice_name
    )
    GROUP BY microservice_name
)
```

**Conversione in una query pianificata**

L'interrogazione precedente può essere convertita in un'interrogazione pianificata come segue. Innanzitutto si calcolano i nomi host distinti all'interno di una determinata distribuzione in una regione, cella, silo, zona di disponibilità e microservizio. Quindi si sommano gli host per calcolare un numero di host all'ora per microservizio. Utilizzando il `@scheduled_runtime` parametro supportato dalle query pianificate, è possibile ricalcolarlo per l'ultima ora in cui viene richiamata la query. La `WHERE` clausola `bin(@scheduled_runtime, 1h)` in della query interna assicura che, anche se l'interrogazione è pianificata a metà ora, si ottengono comunque i dati per l'intera ora.

Anche se la query calcola aggregati orari, come illustrato nella configurazione di calcolo pianificata, è impostata per l'aggiornamento ogni mezz'ora, in modo da ottenere più rapidamente gli aggiornamenti nella tabella derivata. È possibile regolarlo in base ai requisiti di freschezza, ad esempio ricalcolando gli aggregati ogni 15 minuti o ricalcolandoli in base ai limiti delle ore.

```
SELECT microservice_name, hour, SUM(num_instances) AS num_instances    
FROM (
        SELECT microservice_name, bin(time, 1h) AS hour, 
            COUNT(DISTINCT instance_name) as num_instances
       FROM raw_data.devops        
       WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 1h AND @scheduled_runtime        
           AND measure_name = 'metrics'        
       GROUP BY region, cell, silo, availability_zone, microservice_name, bin(time, 1h)    
     )    
GROUP BY microservice_name, hour
```

```
{
    "Name": "MultiPT30mHostCountMicroservicePerHr",
    "QueryString": "SELECT microservice_name, hour, SUM(num_instances) AS num_instances    FROM (        SELECT microservice_name, bin(time, 1h) AS hour, COUNT(DISTINCT instance_name) as num_instances        FROM raw_data.devops        WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 1h AND @scheduled_runtime            AND measure_name = 'metrics'        GROUP BY region, cell, silo, availability_zone, microservice_name, bin(time, 1h)    )    GROUP BY microservice_name, hour",
    "ScheduleConfiguration": {
        "ScheduleExpression": "cron(0/30 * * * ? *)"
    },
    "NotificationConfiguration": {
        "SnsConfiguration": {
            "TopicArn": "******"
        }
    },
    "TargetConfiguration": {
        "TimestreamConfiguration": {
            "DatabaseName": "derived",
            "TableName": "host_count_pt1h",
            "TimeColumn": "hour",
            "DimensionMappings": [
                {
                    "Name": "microservice_name",
                    "DimensionValueType": "VARCHAR"
                }
            ],
            "MultiMeasureMappings": {
                "TargetMultiMeasureName": "num_instances",
                "MultiMeasureAttributeMappings": [
                    {
                        "SourceColumn": "num_instances",
                        "MeasureValueType": "BIGINT"
                    }
                ]
            }
        }
    },
    "ErrorReportConfiguration": {
        "S3Configuration" : {
            "BucketName" : "******",
            "ObjectKeyPrefix": "errors",
            "EncryptionOption": "SSE_S3"
        }
    },
    "ScheduledQueryExecutionRoleArn": "******"
}
```

**Utilizzo dei risultati precalcolati in una nuova dashboard**

Ora vedrai come creare la tua dashboard di visualizzazione aggregata utilizzando la tabella derivata dalla query pianificata che hai creato. Dall'istantanea del dashboard, potrai anche verificare che anche gli aggregati calcolati dalla tabella derivata e dalla tabella di base corrispondano. Una volta create le dashboard utilizzando le tabelle derivate, noterete i tempi di caricamento notevolmente più rapidi e i costi inferiori legati all'utilizzo delle tabelle derivate rispetto al calcolo di questi aggregati a partire dai dati grezzi. Di seguito è riportata un'istantanea della dashboard che utilizza dati precalcolati e la query utilizzata per il rendering di questo pannello utilizzando i dati precalcolati memorizzati nella tabella «derivata».» host\$1count\$1pt1h». Nota che la struttura della query è molto simile alla query utilizzata nella dashboard sui dati grezzi, tranne per il fatto che utilizza la tabella derivata che calcola già i conteggi distinti che questa query sta aggregando. 

![\[Instance count by microservice showing values for apollo, athena, demeter, hercules, and zeus.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/sched_query_ex1_img2.png)


```
SELECT CASE WHEN microservice_name = 'apollo' THEN num_instances ELSE NULL END AS apollo,
    CASE WHEN microservice_name = 'athena' THEN num_instances ELSE NULL END AS athena,
    CASE WHEN microservice_name = 'demeter' THEN num_instances ELSE NULL END AS demeter,
    CASE WHEN microservice_name = 'hercules' THEN num_instances ELSE NULL END AS hercules,
    CASE WHEN microservice_name = 'zeus' THEN num_instances ELSE NULL END AS zeus
FROM (
    SELECT microservice_name, AVG(num_instances) AS num_instances
    FROM (
        SELECT microservice_name, bin(time, 1h), SUM(num_instances) as num_instances
        FROM "derived"."host_count_pt1h"
        WHERE time BETWEEN from_milliseconds(1636567785421) AND from_milliseconds(1636654185421)
            AND measure_name = 'num_instances'
        GROUP BY microservice_name, bin(time, 1h)
    )
    GROUP BY microservice_name
)
```

# Utilizzo di query pianificate e dati non elaborati per i drill down
<a name="scheduledqueries-example2"></a>

Puoi utilizzare le statistiche aggregate del tuo parco macchine per identificare le aree che necessitano di approfondimenti e quindi utilizzare i dati grezzi per approfondire i dati granulari e ottenere informazioni più approfondite.

In questo esempio, vedrete come utilizzare la dashboard aggregata per identificare qualsiasi implementazione (una distribuzione riguarda un determinato microservizio all'interno di una determinata regione, cella, silo e zona di disponibilità) che sembra avere un utilizzo della CPU maggiore rispetto ad altre implementazioni. È quindi possibile approfondire per comprendere meglio l'utilizzo dei dati grezzi. Poiché questi approfondimenti potrebbero essere poco frequenti e accedere solo ai dati pertinenti alla distribuzione, è possibile utilizzare i dati grezzi per questa analisi e non è necessario utilizzare query pianificate. 

**Drill down per distribuzione**

La dashboard seguente fornisce informazioni dettagliate su statistiche più granulari e a livello di server all'interno di una determinata implementazione. Per aiutarti ad analizzare in dettaglio le diverse parti della tua flotta, questa dashboard utilizza variabili come region, cell, silo, microservice e availability\$1zone. Quindi mostra alcune statistiche aggregate per quella distribuzione.

![\[Dashboard showing deployment statistics with filters for region, cell, silo, and other parameters.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/sched_query_ex2_img1.png)


![\[CPU distribution graph showing consistent patterns for avg, p90, p95, and p99 values over 24 hours.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/sched_query_ex2_img2.png)


Nella query riportata di seguito, puoi vedere che i valori scelti nell'elenco a discesa delle variabili vengono utilizzati come predicati nella `WHERE` clausola della query, il che consente di concentrarti solo sui dati per la distribuzione. Quindi il pannello traccia le metriche aggregate della CPU per le istanze di quella distribuzione. È possibile utilizzare i dati grezzi per eseguire questo drill down con la latenza delle query interattive per ottenere informazioni più approfondite.

```
SELECT bin(time, 5m) as minute,
    ROUND(AVG(cpu_user), 2) AS avg_value,
    ROUND(APPROX_PERCENTILE(cpu_user, 0.9), 2) AS p90_value,
    ROUND(APPROX_PERCENTILE(cpu_user, 0.95), 2) AS p95_value,
    ROUND(APPROX_PERCENTILE(cpu_user, 0.99), 2) AS p99_value
FROM "raw_data"."devops"
WHERE time BETWEEN from_milliseconds(1636527099476) AND from_milliseconds(1636613499476)
    AND region = 'eu-west-1'
    AND cell = 'eu-west-1-cell-10'
    AND silo = 'eu-west-1-cell-10-silo-1'
    AND microservice_name = 'demeter'
    AND availability_zone = 'eu-west-1-3'
    AND measure_name = 'metrics'
GROUP BY bin(time, 5m)
ORDER BY 1
```

**Statistiche a livello di istanza**

Questa dashboard calcola ulteriormente un'altra variabile che elenca anche quelle servers/instances con un elevato utilizzo della CPU, ordinate in ordine decrescente di utilizzo. La query utilizzata per calcolare questa variabile viene visualizzata di seguito.

```
WITH microservice_cell_avg AS (
    SELECT AVG(cpu_user) AS microservice_avg_metric
    FROM "raw_data"."devops"
    WHERE $__timeFilter
        AND measure_name = 'metrics'
        AND region = '${region}'
        AND cell = '${cell}'
        AND silo = '${silo}'
        AND availability_zone = '${availability_zone}'
        AND microservice_name = '${microservice}'
), instance_avg AS (
    SELECT instance_name,
        AVG(cpu_user) AS instance_avg_metric
    FROM "raw_data"."devops"
    WHERE $__timeFilter
        AND measure_name = 'metrics'
        AND region = '${region}'
        AND cell = '${cell}'
        AND silo = '${silo}'
        AND microservice_name = '${microservice}'
        AND availability_zone = '${availability_zone}'
    GROUP BY availability_zone, instance_name
) 
SELECT i.instance_name
FROM instance_avg i CROSS JOIN microservice_cell_avg m 
WHERE i.instance_avg_metric > (1 + ${utilization_threshold}) * m.microservice_avg_metric
ORDER BY i.instance_avg_metric DESC
```

Nella query precedente, la variabile viene ricalcolata dinamicamente in base ai valori scelti per le altre variabili. Una volta compilata la variabile per una distribuzione, puoi selezionare singole istanze dall'elenco per visualizzare ulteriormente le metriche di quell'istanza. Puoi scegliere le diverse istanze dal menu a discesa dei nomi delle istanze, come mostrato nell'istantanea qui sotto.

![\[List of Amazon Web Services (AWS) resource identifiers for Demeter instances in eu-west-1 region.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/sched_query_ex2_img3.png)


![\[Dashboard showing CPU utilization, memory usage, GC pause events, and disk I/O metrics for an AWS instance.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/sched_query_ex2_img4.png)


I pannelli precedenti mostrano le statistiche per l'istanza selezionata e di seguito sono riportate le query utilizzate per recuperare queste statistiche.

```
SELECT BIN(time, 30m) AS time_bin, 
    AVG(cpu_user) AS avg_cpu,
    ROUND(APPROX_PERCENTILE(cpu_user, 0.99), 2) as p99_cpu
FROM "raw_data"."devops"
WHERE time BETWEEN from_milliseconds(1636527099477) AND from_milliseconds(1636613499477)
    AND measure_name = 'metrics'
    AND region = 'eu-west-1' AND cell = 'eu-west-1-cell-10' AND silo = 'eu-west-1-cell-10-silo-1' 
    AND availability_zone = 'eu-west-1-3' AND microservice_name = 'demeter' 
    AND instance_name = 'i-zaZswmJk-demeter-eu-west-1-cell-10-silo-1-00000272.amazonaws.com'
GROUP BY BIN(time, 30m)
ORDER BY time_bin desc
```

```
SELECT BIN(time, 30m) AS time_bin, 
    AVG(memory_used) AS avg_memory,
    ROUND(APPROX_PERCENTILE(memory_used, 0.99), 2) as p99_memory
FROM "raw_data"."devops"
WHERE time BETWEEN from_milliseconds(1636527099477) AND from_milliseconds(1636613499477)
    AND measure_name = 'metrics'
    AND region = 'eu-west-1' AND cell = 'eu-west-1-cell-10' AND silo = 'eu-west-1-cell-10-silo-1' 
    AND availability_zone = 'eu-west-1-3' AND microservice_name = 'demeter' 
    AND instance_name = 'i-zaZswmJk-demeter-eu-west-1-cell-10-silo-1-00000272.amazonaws.com'
GROUP BY BIN(time, 30m)
ORDER BY time_bin desc
```

```
SELECT COUNT(gc_pause)
FROM "raw_data"."devops"
WHERE time BETWEEN from_milliseconds(1636527099477) AND from_milliseconds(1636613499478)
    AND measure_name = 'events'
    AND region = 'eu-west-1' AND cell = 'eu-west-1-cell-10' AND silo = 'eu-west-1-cell-10-silo-1' 
    AND availability_zone = 'eu-west-1-3' AND microservice_name = 'demeter' 
    AND instance_name = 'i-zaZswmJk-demeter-eu-west-1-cell-10-silo-1-00000272.amazonaws.com'
```

```
SELECT avg(gc_pause) as avg, round(approx_percentile(gc_pause, 0.99), 2) as p99
FROM "raw_data"."devops"
WHERE time BETWEEN from_milliseconds(1636527099478) AND from_milliseconds(1636613499478)
    AND measure_name = 'events'
    AND region = 'eu-west-1' AND cell = 'eu-west-1-cell-10' AND silo = 'eu-west-1-cell-10-silo-1' 
    AND availability_zone = 'eu-west-1-3' AND microservice_name = 'demeter' 
    AND instance_name = 'i-zaZswmJk-demeter-eu-west-1-cell-10-silo-1-00000272.amazonaws.com'
```

```
SELECT BIN(time, 30m) AS time_bin, 
    AVG(disk_io_reads) AS avg,
    ROUND(APPROX_PERCENTILE(disk_io_reads, 0.99), 2) as p99
FROM "raw_data"."devops"
WHERE time BETWEEN from_milliseconds(1636527099478) AND from_milliseconds(1636613499478)
    AND measure_name = 'metrics'
    AND region = 'eu-west-1' AND cell = 'eu-west-1-cell-10' AND silo = 'eu-west-1-cell-10-silo-1' 
    AND availability_zone = 'eu-west-1-3' AND microservice_name = 'demeter' 
    AND instance_name = 'i-zaZswmJk-demeter-eu-west-1-cell-10-silo-1-00000272.amazonaws.com'
GROUP BY BIN(time, 30m)
ORDER BY time_bin desc
```

# Ottimizzazione dei costi condividendo le query pianificate tra i dashboard
<a name="scheduledqueries-example3"></a>

In questo esempio, vedremo uno scenario in cui più pannelli di dashboard visualizzano variazioni di informazioni simili (individuando host di CPU elevati e una frazione del parco macchine con un elevato utilizzo della CPU) e come è possibile utilizzare la stessa query pianificata per precalcolare i risultati, che vengono poi utilizzati per popolare più pannelli. Questo riutilizzo ottimizza ulteriormente i costi laddove invece di utilizzare diverse query pianificate, una per ogni pannello, si utilizza only owner. 

## Pannelli di controllo con dati grezzi
<a name="scheduledqueries-example3-dashboard-raw"></a>

**Utilizzo della CPU per regione per microservizio**

Il primo pannello calcola le istanze il cui utilizzo medio della CPU è una soglia inferiore o superiore all'utilizzo della CPU indicato sopra per una determinata distribuzione all'interno di una regione, cella, silo, zona di disponibilità e microservizio. Quindi ordina la regione e il microservizio che hanno la più alta percentuale di host con un elevato utilizzo. Consente di identificare la temperatura di funzionamento dei server di una specifica implementazione e successivamente approfondisce i problemi per comprendere meglio i problemi. 

La query per il pannello dimostra la flessibilità del supporto SQL di Timestream for per eseguire attività analitiche complesse con espressioni di tabella, funzioni di finestra, join e LiveAnalytics così via comuni. 

![\[Table showing CPU utilization data for microservices across different regions.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/sched_query_ex3_img1.png)


*Interrogazione:*

```
WITH microservice_cell_avg AS (
    SELECT region, cell, silo, availability_zone, microservice_name, AVG(cpu_user) AS microservice_avg_metric
    FROM "raw_data"."devops"
    WHERE time BETWEEN from_milliseconds(1636526593876) AND from_milliseconds(1636612993876)
        AND measure_name = 'metrics'
    GROUP BY region, cell, silo, availability_zone, microservice_name
), instance_avg AS (
    SELECT region, cell, silo, availability_zone, microservice_name, instance_name,
        AVG(cpu_user) AS instance_avg_metric
    FROM "raw_data"."devops"
    WHERE time BETWEEN from_milliseconds(1636526593876) AND from_milliseconds(1636612993876)
        AND measure_name = 'metrics'
    GROUP BY region, cell, silo, availability_zone, microservice_name, instance_name
), instances_above_threshold AS (
  SELECT i.*,
    CASE WHEN i.instance_avg_metric > (1 + 0.2) * m.microservice_avg_metric THEN 1 ELSE 0 END AS high_utilization,
    CASE WHEN i.instance_avg_metric < (1 - 0.2) * m.microservice_avg_metric THEN 1 ELSE 0 END AS low_utilization
  FROM instance_avg i INNER JOIN microservice_cell_avg m 
    ON i.region = m.region AND i.cell = m.cell AND i.silo = m.silo AND i.availability_zone = m.availability_zone
      AND m.microservice_name = i.microservice_name
), per_deployment_high AS (
SELECT region, microservice_name, COUNT(*) AS num_hosts, SUM(high_utilization) AS high_utilization_hosts, SUM(low_utilization) AS low_utilization_hosts,
    ROUND(SUM(high_utilization) * 100.0 / COUNT(*), 0) AS percent_high_utilization_hosts,
    ROUND(SUM(low_utilization) * 100.0 / COUNT(*), 0) AS percent_low_utilization_hosts
FROM instances_above_threshold
GROUP BY region, microservice_name
), per_region_ranked AS (
    SELECT *,
        DENSE_RANK() OVER (PARTITION BY region ORDER BY percent_high_utilization_hosts DESC, high_utilization_hosts DESC) AS rank
    FROM per_deployment_high
)
SELECT *
FROM per_region_ranked
WHERE rank <= 2
ORDER BY percent_high_utilization_hosts desc, rank asc
```

**Approfondisci un microservizio per trovare gli hot spot**

La dashboard successiva consente di approfondire uno dei microservizi per scoprire la regione, la cella e il silo specifici in cui tale microservizio è in esecuzione, quale frazione della sua flotta utilizza un maggiore utilizzo della CPU. Ad esempio, nella dashboard a livello di flotta, hai visto il microservizio demeter apparire nelle prime posizioni in classifica, quindi in questa dashboard vuoi approfondire quel microservizio. 

Questa dashboard utilizza una variabile per selezionare il microservizio da approfondire e i valori della variabile vengono compilati utilizzando valori univoci della dimensione. Una volta selezionato il microservizio, il resto della dashboard si aggiorna. 

Come illustrato di seguito, il primo pannello riporta la percentuale di host in una distribuzione (una regione, una cella e un silo per un microservizio) nel tempo e la query corrispondente utilizzata per tracciare la dashboard. Questo grafico stesso identifica una distribuzione specifica con una percentuale più elevata di host con CPU elevata.

![\[Dropdown menu showing "microservice", "demeter", "topk", and "2" options.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/sched_query_ex3_img2.png)


![\[Graph showing deployments with high CPU utilization over time, with multiple flat lines.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/sched_query_ex3_img3.png)


*Interrogazione*:

```
WITH microservice_cell_avg AS (
    SELECT region, cell, silo, availability_zone, microservice_name, bin(time, 1h) as hour, AVG(cpu_user) AS microservice_avg_metric
    FROM "raw_data"."devops"
    WHERE time BETWEEN from_milliseconds(1636526898831) AND from_milliseconds(1636613298831)
        AND measure_name = 'metrics'
        AND microservice_name = 'demeter'
    GROUP BY region, cell, silo, availability_zone, microservice_name, bin(time, 1h)
), instance_avg AS (
    SELECT region, cell, silo, availability_zone, microservice_name, instance_name, bin(time, 1h) as hour,
        AVG(cpu_user) AS instance_avg_metric
    FROM "raw_data"."devops"
    WHERE time BETWEEN from_milliseconds(1636526898831) AND from_milliseconds(1636613298831)
        AND measure_name = 'metrics'
        AND microservice_name = 'demeter'
    GROUP BY region, cell, silo, availability_zone, microservice_name, instance_name, bin(time, 1h)
), instances_above_threshold AS (
  SELECT i.*,
    CASE WHEN i.instance_avg_metric > (1 + 0.2) * m.microservice_avg_metric THEN 1 ELSE 0 END AS high_utilization
  FROM instance_avg i INNER JOIN microservice_cell_avg m 
    ON i.region = m.region AND i.cell = m.cell AND i.silo = m.silo AND i.availability_zone = m.availability_zone
      AND m.microservice_name = i.microservice_name AND m.hour = i.hour
), high_utilization_percent AS (
    SELECT region, cell, silo, microservice_name, hour, COUNT(*) AS num_hosts, SUM(high_utilization) AS high_utilization_hosts,
        ROUND(SUM(high_utilization) * 100.0 / COUNT(*), 0) AS percent_high_utilization_hosts
    FROM instances_above_threshold
    GROUP BY region, cell, silo, microservice_name, hour
), high_utilization_ranked AS (
    SELECT region, cell, silo, microservice_name, 
        DENSE_RANK() OVER (PARTITION BY region ORDER BY AVG(percent_high_utilization_hosts) desc, AVG(high_utilization_hosts) desc) AS rank
    FROM high_utilization_percent 
    GROUP BY region, cell, silo, microservice_name
)
SELECT hup.silo, CREATE_TIME_SERIES(hour, hup.percent_high_utilization_hosts) AS percent_high_utilization_hosts
FROM high_utilization_percent hup INNER JOIN high_utilization_ranked hur
    ON hup.region = hur.region AND hup.cell = hur.cell AND hup.silo = hur.silo AND hup.microservice_name = hur.microservice_name
WHERE rank <= 2
GROUP BY hup.region, hup.cell, hup.silo
ORDER BY hup.silo
```

## Conversione in un'unica query pianificata che ne consente il riutilizzo
<a name="scheduledqueries-example3-query-reuse"></a>

È importante notare che un calcolo simile viene eseguito nei diversi pannelli delle due dashboard. È possibile definire un'interrogazione pianificata separata per ogni pannello. Qui vedrete come ottimizzare ulteriormente i costi definendo un'interrogazione pianificata i cui risultati possono essere utilizzati per il rendering di tutti e tre i pannelli. 

Di seguito è riportata la query che acquisisce gli aggregati calcolati e utilizzati per tutti i diversi pannelli. Osserverete diversi aspetti importanti nella definizione di questa interrogazione pianificata.
+ La flessibilità e la potenza dell'area di superficie SQL supportate dalle query pianificate, in cui è possibile utilizzare espressioni di tabella comuni, join, case statement, ecc. 
+ È possibile utilizzare una query pianificata per calcolare le statistiche con una granularità più precisa di quella necessaria per un dashboard specifico e per tutti i valori che un dashboard potrebbe utilizzare per diverse variabili. Ad esempio, vedrai che gli aggregati vengono calcolati su una regione, una cella, un silo e un microservizio. Pertanto, puoi combinarli per creare aggregati a livello di regione o regione e a livello di microservizi. Analogamente, la stessa query calcola gli aggregati per tutte le regioni, le celle, i silos e i microservizi. Consente di applicare filtri su queste colonne per ottenere gli aggregati per un sottoinsieme di valori. Ad esempio, puoi calcolare gli aggregati per qualsiasi regione, ad esempio us-east-1, o qualsiasi microservizio, ad esempio demeter, o approfondire un'implementazione specifica all'interno di una regione, cella, silo e microservizio. Questo approccio ottimizza ulteriormente i costi di manutenzione degli aggregati precalcolati. 

```
WITH microservice_cell_avg AS (
    SELECT region, cell, silo, availability_zone, microservice_name, bin(time, 1h) as hour, AVG(cpu_user) AS microservice_avg_metric    
    FROM raw_data.devops    
    WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 1h AND bin(@scheduled_runtime, 1h) + 1h
        AND measure_name = 'metrics'    
    GROUP BY region, cell, silo, availability_zone, microservice_name, bin(time, 1h)    
), instance_avg AS (
    SELECT region, cell, silo, availability_zone, microservice_name, instance_name, bin(time, 1h) as hour,
        AVG(cpu_user) AS instance_avg_metric    
   FROM raw_data.devops    
   WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 1h AND bin(@scheduled_runtime, 1h) + 1h
       AND measure_name = 'metrics'    
   GROUP BY region, cell, silo, availability_zone, microservice_name, instance_name, bin(time, 1h)    
), instances_above_threshold AS (
    SELECT i.*,
        CASE WHEN i.instance_avg_metric > (1 + 0.2) * m.microservice_avg_metric THEN 1 ELSE 0 END AS high_utilization,    
        CASE WHEN i.instance_avg_metric < (1 - 0.2) * m.microservice_avg_metric THEN 1 ELSE 0 END AS low_utilization    
   FROM instance_avg i INNER JOIN microservice_cell_avg m
       ON i.region = m.region AND i.cell = m.cell AND i.silo = m.silo AND i.availability_zone = m.availability_zone
           AND m.microservice_name = i.microservice_name AND m.hour = i.hour    
)     
SELECT region, cell, silo, microservice_name, hour,
     COUNT(*) AS num_hosts, SUM(high_utilization) AS high_utilization_hosts, SUM(low_utilization) AS low_utilization_hosts    
FROM instances_above_threshold GROUP BY region, cell, silo, microservice_name, hour
```

Di seguito è riportata una definizione di interrogazione pianificata per la query precedente. L'espressione di pianificazione è configurata per l'aggiornamento ogni 30 minuti e aggiorna i dati fino a un'ora precedente, utilizzando sempre il costrutto bin (@scheduled\$1runtime, 1h) per ottenere gli eventi dell'intera ora. A seconda dei requisiti di aggiornamento dell'applicazione, è possibile configurarla in modo che si aggiorni più o meno frequentemente. Utilizzando WHERE time BETWEEN bin (@scheduled\$1runtime, 1h) - 1h AND bin (@scheduled\$1runtime, 1h) \$1 1h, possiamo garantire che anche se esegui l'aggiornamento una volta ogni 15 minuti, otterrai i dati dell'intera ora per l'ora corrente e l'ora precedente. 

Più avanti, vedrai come i tre pannelli utilizzano questi aggregati scritti nella tabella deployment\$1cpu\$1stats\$1per\$1hr per visualizzare le metriche rilevanti per il pannello.

```
{
    "Name": "MultiPT30mHighCpuDeploymentsPerHr",
    "QueryString": "WITH microservice_cell_avg AS (    SELECT region, cell, silo, availability_zone, microservice_name, bin(time, 1h) as hour, AVG(cpu_user) AS microservice_avg_metric    FROM raw_data.devops    WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 1h AND bin(@scheduled_runtime, 1h) + 1h    AND measure_name = 'metrics'    GROUP BY region, cell, silo, availability_zone, microservice_name, bin(time, 1h)    ), instance_avg AS (    SELECT region, cell, silo, availability_zone, microservice_name, instance_name, bin(time, 1h) as hour,    AVG(cpu_user) AS instance_avg_metric    FROM raw_data.devops    WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 1h AND bin(@scheduled_runtime, 1h) + 1h    AND measure_name = 'metrics'    GROUP BY region, cell, silo, availability_zone, microservice_name, instance_name, bin(time, 1h)    ), instances_above_threshold AS (    SELECT i.*,    CASE WHEN i.instance_avg_metric > (1 + 0.2) * m.microservice_avg_metric THEN 1 ELSE 0 END AS high_utilization,    CASE WHEN i.instance_avg_metric < (1 - 0.2) * m.microservice_avg_metric THEN 1 ELSE 0 END AS low_utilization    FROM instance_avg i INNER JOIN microservice_cell_avg m    ON i.region = m.region AND i.cell = m.cell AND i.silo = m.silo AND i.availability_zone = m.availability_zone    AND m.microservice_name = i.microservice_name AND m.hour = i.hour    )     SELECT region, cell, silo, microservice_name, hour,         COUNT(*) AS num_hosts, SUM(high_utilization) AS high_utilization_hosts, SUM(low_utilization) AS low_utilization_hosts    FROM instances_above_threshold GROUP BY region, cell, silo, microservice_name, hour",
    "ScheduleConfiguration": {
        "ScheduleExpression": "cron(0/30 * * * ? *)"
    },
    "NotificationConfiguration": {
        "SnsConfiguration": {
            "TopicArn": "******"
        }
    },
    "TargetConfiguration": {
        "TimestreamConfiguration": {
            "DatabaseName": "derived",
            "TableName": "deployment_cpu_stats_per_hr",
            "TimeColumn": "hour",
            "DimensionMappings": [
                {
                    "Name": "region",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "cell",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "silo",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "Name": "microservice_name",
                    "DimensionValueType": "VARCHAR"
                }
            ],
            "MultiMeasureMappings": {
                "TargetMultiMeasureName": "cpu_user",
                "MultiMeasureAttributeMappings": [
                    {
                        "SourceColumn": "num_hosts",
                        "MeasureValueType": "BIGINT"
                    },
                    {
                        "SourceColumn": "high_utilization_hosts",
                        "MeasureValueType": "BIGINT"
                    },
                    {
                        "SourceColumn": "low_utilization_hosts",
                        "MeasureValueType": "BIGINT"
                    }
                ]
            }
        }
    },
    "ErrorReportConfiguration": {
        "S3Configuration" : {
            "BucketName" : "******",
            "ObjectKeyPrefix": "errors",
            "EncryptionOption": "SSE_S3"
        }
    },
    "ScheduledQueryExecutionRoleArn": "******"
}
```

## Dashboard con risultati precalcolati
<a name="scheduledqueries-example3-dashboard-precompute"></a>

**Host ad alto utilizzo della CPU**

Per gli host ad alto utilizzo, vedrai come i diversi pannelli utilizzano i dati di deployment\$1cpu\$1stats\$1per\$1hr per calcolare i diversi aggregati necessari per i pannelli. Ad esempio, questo pannello fornisce informazioni a livello di regione, quindi riporta gli aggregati raggruppati per regione e microservizio, senza filtrare alcuna regione o microservizio. 

![\[Table showing microservice utilization stats across regions, with high and low host percentages.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/sched_query_ex3_img4.png)


```
WITH per_deployment_hosts AS (
    SELECT region, cell, silo, microservice_name, 
        AVG(num_hosts) AS num_hosts, 
        AVG(high_utilization_hosts) AS high_utilization_hosts, 
        AVG(low_utilization_hosts) AS low_utilization_hosts
    FROM "derived"."deployment_cpu_stats_per_hr"
    WHERE time BETWEEN from_milliseconds(1636567785437) AND from_milliseconds(1636654185437)
        AND measure_name = 'cpu_user'
    GROUP BY region, cell, silo, microservice_name
), per_deployment_high AS (
    SELECT region, microservice_name,
        SUM(num_hosts) AS num_hosts, 
        ROUND(SUM(high_utilization_hosts), 0) AS high_utilization_hosts,
        ROUND(SUM(low_utilization_hosts),0) AS low_utilization_hosts,
        ROUND(SUM(high_utilization_hosts) * 100.0 / SUM(num_hosts)) AS percent_high_utilization_hosts,
        ROUND(SUM(low_utilization_hosts) * 100.0 / SUM(num_hosts)) AS percent_low_utilization_hosts
    FROM per_deployment_hosts
    GROUP BY region, microservice_name
), 
per_region_ranked AS (
    SELECT *,
        DENSE_RANK() OVER (PARTITION BY region ORDER BY percent_high_utilization_hosts DESC, high_utilization_hosts DESC) AS rank
    FROM per_deployment_high
)
SELECT *
FROM per_region_ranked
WHERE rank <= 2
ORDER BY percent_high_utilization_hosts desc, rank asc
```

**Approfondisci un microservizio per individuare implementazioni con elevato utilizzo della CPU**

Il prossimo esempio utilizza nuovamente la tabella derivata deployment\$1cpu\$1stats\$1per\$1hr, ma ora applica un filtro per un microservizio specifico (demeter in questo esempio, poiché nella dashboard aggregata sono stati segnalati host ad alto utilizzo). Questo pannello tiene traccia della percentuale di host ad alto utilizzo della CPU nel tempo.

![\[Graph showing consistent high CPU utilization percentages for multiple deployments over 24 hours.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/sched_query_ex3_img5.png)


```
WITH high_utilization_percent AS (
    SELECT region, cell, silo, microservice_name, bin(time, 1h) AS hour, MAX(num_hosts) AS num_hosts, 
        MAX(high_utilization_hosts) AS high_utilization_hosts,
        ROUND(MAX(high_utilization_hosts) * 100.0 / MAX(num_hosts)) AS percent_high_utilization_hosts
    FROM "derived"."deployment_cpu_stats_per_hr"
    WHERE time BETWEEN from_milliseconds(1636525800000) AND from_milliseconds(1636612200000)
        AND measure_name = 'cpu_user'
        AND microservice_name = 'demeter'
    GROUP BY region, cell, silo, microservice_name, bin(time, 1h)
), high_utilization_ranked AS (
    SELECT region, cell, silo, microservice_name, 
        DENSE_RANK() OVER (PARTITION BY region ORDER BY AVG(percent_high_utilization_hosts) desc, AVG(high_utilization_hosts) desc) AS rank
    FROM high_utilization_percent 
    GROUP BY region, cell, silo, microservice_name
)
SELECT hup.silo, CREATE_TIME_SERIES(hour, hup.percent_high_utilization_hosts) AS percent_high_utilization_hosts
FROM high_utilization_percent hup INNER JOIN high_utilization_ranked hur
    ON hup.region = hur.region AND hup.cell = hur.cell AND hup.silo = hur.silo AND hup.microservice_name = hur.microservice_name
WHERE rank <= 2
GROUP BY hup.region, hup.cell, hup.silo
ORDER BY hup.silo
```

# Confronto di un'interrogazione su una tabella di base con un'interrogazione dei risultati di una query pianificata
<a name="scheduledqueries-example4-clickstream"></a>

In questo esempio di query Timestream, utilizziamo lo schema, le query di esempio e gli output seguenti per confrontare una query su una tabella di base con una query su una tabella derivata di risultati di query pianificate. Con una query pianificata correttamente, è possibile ottenere una tabella derivata con un minor numero di righe e altre caratteristiche che possono portare a query più veloci di quelle possibili sulla tabella base originale. 

Per un video che descrive questo scenario, consulta [Migliorare le prestazioni delle query e ridurre i costi utilizzando le query pianificate in Amazon Timestream](https://youtu.be/x8AgLhAydzY) for. LiveAnalytics

Per questo esempio, utilizziamo lo scenario seguente:
+ **Regione**: us-east-1
+ **Tavolo base** — `"clickstream"."shopping"`
+ **Tabella derivata** — `"clickstream"."aggregate"`

## Tabella di base
<a name="scheduledqueries-example4-clickstream-base-table"></a>

Di seguito viene descritto lo schema per la tabella di base.


| Colonna | Tipo | Timestream per LiveAnalytics il tipo di attributo | 
| --- | --- | --- | 
|  channel  |  varchar  |  MULTIPLO  | 
|  description  |  varchar  |  MULTI  | 
|  evento  |  varchar  |  DIMENSIONE  | 
|  ip\$1address  |  varchar  |  DIMENSIONE  | 
|  measure\$1name  |  varchar  |  MEASURE\$1NAME  | 
|  product  |  varchar  |  MULTI  | 
|  product\$1id  |  varchar  |  MULTI  | 
|  quantity  |  virgola mobile a doppia precisione  |  MULTI  | 
|  query  |  varchar  |  MULTI  | 
|  session\$1id  |  varchar  |  DIMENSIONE  | 
|  gruppo\$1utenti  |  varchar  |  DIMENSIONE  | 
|  user\$1id  |  varchar  |  DIMENSIONE  | 

Di seguito vengono descritte le misure per la tabella base. Una *tabella di base* si riferisce a una tabella in Timestream su cui viene eseguita la query pianificata.
+ **nome\$1misura —**  `metrics`
+ **data** — multiplo
+ **dimensioni:**

  ```
  [ ( user_group, varchar ),( user_id, varchar ),( session_id, varchar ),( ip_address, varchar ),( event, varchar ) ]
  ```

## Interrogazione su una tabella di base
<a name="scheduledqueries-example4-clickstream-base-table-query"></a>

Di seguito è riportata una query ad hoc che raccoglie i conteggi in base a un aggregato di 5 minuti in un determinato intervallo di tempo.

```
SELECT BIN(time, 5m) as time, 
channel, 
product_id,
SUM(quantity) as product_quantity 
FROM "clickstream"."shopping" 
WHERE BIN(time, 5m) BETWEEN '2023-05-11 10:10:00.000000000' AND '2023-05-11 10:30:00.000000000'
AND channel = 'Social media'
and product_id = '431412'
GROUP BY BIN(time, 5m),channel,product_id
```

Output:

```
duration:1.745 sec
Bytes scanned: 29.89 MB
Query Id: AEBQEANMHG7MHHBHCKJ3BSOE3QUGIDBGWCCP5I6J6YUW5CVJZ2M3JCJ27QRMM7A
Row count:5
```

## Query pianificata
<a name="scheduledqueries-example4-clickstream-scheduled-query"></a>

Di seguito è riportata una query pianificata che viene eseguita ogni 5 minuti.

```
SELECT BIN(time, 5m) as time, channel as measure_name, product_id, product, 
SUM(quantity) as product_quantity 
FROM "clickstream"."shopping" 
WHERE time BETWEEN BIN(@scheduled_runtime, 5m) - 10m AND BIN(@scheduled_runtime, 5m) - 5m 
AND channel = 'Social media' 
GROUP BY BIN(time, 5m), channel, product_id, product
```

## Interrogazione su una tabella derivata
<a name="scheduledqueries-example4-clickstream-derived-table"></a>

Di seguito è riportata una query ad hoc su una tabella derivata. Una *tabella derivata* si riferisce a una tabella Timestream che contiene i risultati di una query pianificata.

```
SELECT time, measure_name, product_id,product_quantity 
FROM "clickstream"."aggregate"
WHERE time BETWEEN '2023-05-11 10:10:00.000000000' AND '2023-05-11 10:30:00.000000000'
AND measure_name = 'Social media'
and product_id = '431412'
```

Output:

```
duration: 0.2960 sec
Bytes scanned: 235.00 B
QueryID: AEBQEANMHHAAQU4FFTT6CFM6UYXTL4SMLZV22MFP4KV2Z7IRVOPLOMLDD6BR33Q
Row count: 5
```

## Confronto
<a name="scheduledqueries-example4-clickstream-comparison"></a>

Di seguito è riportato un confronto tra i risultati di una query su una tabella di base e di un'interrogazione su una tabella derivata. La stessa query su una tabella derivata con risultati aggregati eseguiti tramite una query pianificata viene completata più rapidamente con un minor numero di byte scansionati. 

Questi risultati mostrano l'utilità dell'utilizzo di query pianificate per aggregare i dati per ottenere query più rapide.


|  | Interrogazione sulla tabella di base | Interrogazione sulla tabella derivata | 
| --- | --- | --- | 
|  Durata  |  1.745 sec  |  0,2960 sec  | 
|  Byte scansionati  |  29,89 MB  |  235 byte  | 
|  Numero di righe  |  5  |  5  | 

# Utilizzo di UNLOAD per esportare i risultati delle query su S3 da Timestream per LiveAnalytics
<a name="export-unload"></a>

Amazon Timestream LiveAnalytics per ora ti consente di esportare i risultati delle tue query su Amazon S3 in modo economico e sicuro utilizzando l'istruzione. `UNLOAD` Utilizzando l'`UNLOAD`istruzione, ora puoi esportare i dati delle serie temporali in bucket S3 selezionati in formato Apache Parquet o Comma Separated Values (CSV), il che offre la flessibilità necessaria per archiviare, combinare e analizzare i dati delle serie temporali con altri servizi. L'`UNLOAD`istruzione consente di esportare i dati in modo compresso, il che riduce i dati trasferiti e lo spazio di archiviazione richiesto. `UNLOAD`supporta anche il partizionamento basato su attributi selezionati durante l'esportazione dei dati, migliorando le prestazioni e riducendo i tempi di elaborazione dei servizi a valle che accedono ai dati. Inoltre, puoi utilizzare chiavi gestite Amazon S3 (SSE-S3) o AWS chiavi gestite da Amazon S3 (AWS SSE-KMS) per crittografare i dati esportati.

## Vantaggi di UNLOAD di Timestream per LiveAnalytics
<a name="export-unload-benefits"></a>

I vantaggi principali dell'utilizzo della `UNLOAD` dichiarazione sono i seguenti.
+ **Facilità operativa**: con l'`UNLOAD`istruzione, è possibile esportare gigabyte di dati in un'unica richiesta di query in formato Apache Parquet o CSV, offrendo la flessibilità necessaria per selezionare il formato più adatto alle esigenze di elaborazione a valle e semplificando la creazione di data lake.
+ **Sicuro ed economico**: `UNLOAD` statement offre la possibilità di esportare i dati in un bucket S3 in modo compresso e di crittografare (SSE-KMS o SSE\$1S3) i dati utilizzando chiavi gestite dal cliente, riducendo i costi di archiviazione dei dati e proteggendo dall'accesso non autorizzato.
+ **Prestazioni**: utilizzando l'`UNLOAD`istruzione, puoi partizionare i dati durante l'esportazione in un bucket S3. Il partizionamento dei dati consente ai servizi a valle di elaborare i dati in parallelo, riducendone i tempi di elaborazione. Inoltre, i servizi a valle possono elaborare solo i dati di cui hanno bisogno, riducendo le risorse di elaborazione necessarie e quindi i costi associati.

## Casi d'uso di UNLOAD from Timestream per LiveAnalytics
<a name="export-unload-use-cases"></a>

Puoi utilizzare l'`UNLOAD`istruzione per scrivere dati nel tuo bucket S3 nei seguenti modi.
+ **Crea un data warehouse**: puoi esportare gigabyte di risultati delle query nel bucket S3 e aggiungere più facilmente dati di serie temporali al tuo data lake. Puoi utilizzare servizi come Amazon Athena e Amazon Redshift per combinare i dati delle tue serie temporali con altri dati pertinenti per ricavare informazioni aziendali complesse. 
+ **Crea pipeline di dati AI e ML**: la `UNLOAD` dichiarazione ti consente di creare facilmente pipeline di dati per i tuoi modelli di machine learning che accedono ai dati delle serie temporali, semplificando l'utilizzo dei dati delle serie temporali con servizi come Amazon e SageMaker Amazon EMR.
+ **Semplifica l'elaborazione ETL**: l'esportazione dei dati in bucket S3 può semplificare il processo di esecuzione delle operazioni di estrazione, trasformazione, caricamento (ETL) sui dati, consentendoti di utilizzare senza problemi strumenti o servizi di terze parti AWS come AWS Glue per elaborare e trasformare i dati.

# SCARICA I CONCETTI
<a name="export-unload-concepts"></a>

## Sintassi
<a name="export-unload-concepts-syntax"></a>

```
UNLOAD (SELECT statement)
 TO 's3://bucket-name/folder'
 WITH ( option = expression [, ...] )
```

dov'è `option`

```
{ partitioned_by = ARRAY[ col_name[,…] ] 
 | format = [ '{ CSV | PARQUET }' ] 
 | compression = [ '{ GZIP | NONE }' ]
 | encryption = [ '{ SSE_KMS | SSE_S3 }' ]
 | kms_key = '<string>'
 | field_delimiter ='<character>'
 | escaped_by = '<character>'
 | include_header = ['{true, false}']
 | max_file_size = '<value>'
 | }
```

## Parameters
<a name="export-unload-concepts-parameters"></a>

dichiarazione SELECT  
L'istruzione di query utilizzata per selezionare e recuperare i dati da uno o più Timestream per le tabelle. LiveAnalytics   

```
(SELECT column 1, column 2, column 3 from database.table
      where measure_name = "ABC" and timestamp between ago (1d) and now() )
```

Clausola TO  

```
TO 's3://bucket-name/folder'
```
or  

```
TO 's3://access-point-alias/folder'
```
La `TO` clausola dell'`UNLOAD`istruzione specifica la destinazione dell'output dei risultati della query. È necessario fornire il percorso completo, incluso il nome del bucket Amazon S3 o Amazon S3 con access-point-alias posizione della cartella su Amazon S3 dove Timestream for scrive gli oggetti del file di output. LiveAnalytics Il bucket S3 deve appartenere allo stesso account e nella stessa regione. Oltre al set di risultati della query, Timestream for LiveAnalytics scrive i file manifest e di metadati nella cartella di destinazione specificata. 

Clausola PARTITIONED\$1BY  

```
partitioned_by = ARRAY [col_name[,…] , (default: none)
```
La `partitioned_by` clausola viene utilizzata nelle query per raggruppare e analizzare i dati a livello granulare. Quando esporti i risultati della query nel bucket S3, puoi scegliere di partizionare i dati in base a una o più colonne nella query di selezione. Durante il partizionamento dei dati, i dati esportati vengono suddivisi in sottoinsiemi in base alla colonna della partizione e ogni sottoinsieme viene archiviato in una cartella separata. All'interno della cartella dei risultati che contiene i dati esportati, viene creata automaticamente una sottocartella. `folder/results/partition column = partition value/` Tuttavia, tieni presente che le colonne partizionate non sono incluse nel file di output.   
`partitioned_by`non è una clausola obbligatoria nella sintassi. Se si sceglie di esportare i dati senza alcun partizionamento, è possibile escludere la clausola nella sintassi.   

**Example**  
Supponendo che tu stia monitorando i dati clickstream del tuo sito Web e che tu abbia 5 canali di traffico, vale a dire,, e. `direct` `Social Media` `Organic Search` `Other` `Referral` Quando si esportano i dati, è possibile scegliere di partizionarli utilizzando la colonna. `Channel` All'interno della tua cartella dati`s3://bucketname/results`, avrai cinque cartelle ciascuna con il rispettivo nome del canale, ad esempio, `s3://bucketname/results/channel=Social Media/.` all'interno di questa cartella troverai i dati di tutti i clienti che sono arrivati sul tuo sito web attraverso il `Social Media` canale. Allo stesso modo, avrai altre cartelle per i canali rimanenti.
Dati esportati partizionati per colonna Channel  

![\[Folder structure showing channels: Direct, Organic search, Other, Referral, and Social media.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/unload-results.png)


FORMAT  

```
format = [ '{ CSV | PARQUET }' , default: CSV
```
Le parole chiave per specificare il formato dei risultati della query scritti nel bucket S3. È possibile esportare i dati come valore separato da virgole (CSV) utilizzando una virgola (,) come delimitatore predefinito o nel formato Apache Parquet, un efficiente formato di archiviazione a colonne aperto per l'analisi. 

COMPRESSIONE  

```
compression = [ '{ GZIP | NONE }' ], default: GZIP
```
È possibile comprimere i dati esportati utilizzando l'algoritmo di compressione GZIP o decomprimerli specificando l'opzione. `NONE`

ENCRYPTION  

```
encryption = [ '{ SSE_KMS | SSE_S3 }' ], default: SSE_S3
```
I file di output su Amazon S3 vengono crittografati utilizzando l'opzione di crittografia selezionata. Oltre ai dati, anche i file manifest e i file di metadati vengono crittografati in base all'opzione di crittografia selezionata. Attualmente supportiamo la crittografia SSE\$1S3 e SSE\$1KMS. SSE\$1S3 è una crittografia lato server con Amazon S3 che crittografa i dati utilizzando la crittografia AES (Advanced Encryption Standard) a 256 bit. SSE\$1KMS è una crittografia lato server per crittografare i dati utilizzando chiavi gestite dal cliente.

KMS\$1KEY  

```
kms_key = '<string>'
```
KMS Key è una chiave definita dal cliente per crittografare i risultati delle query esportate. KMS Key è gestita in modo sicuro da AWS Key Management Service (AWS KMS) e utilizzata per crittografare i file di dati su Amazon S3.

FIELD\$1DELIMITER  

```
field_delimiter ='<character>' , default: (,)
```
Quando si esportano i dati in formato CSV, questo campo specifica un singolo carattere ASCII utilizzato per separare i campi nel file di output, ad esempio il carattere pipe (\$1), la virgola (,) o il tab (/t). Il delimitatore predefinito per i file CSV è una virgola. Se un valore nei dati contiene il delimitatore scelto, il delimitatore verrà citato tra virgolette. Ad esempio, se il valore dei dati contiene`Time,stream`, questo valore verrà citato come nei dati esportati. `"Time,stream"` Il carattere di virgoletta usato da Timestream per sono le LiveAnalytics virgolette doppie («).  
Evita di specificare il carattere di ritorno al carrello (ASCII 13`0D`, hex, text '\$1 r') o il carattere di interruzione di riga (ASCII 10, hex 0A, text'\$1n') come `FIELD_DELIMITER` se desideri includere le intestazioni nel CSV, poiché ciò impedirà a molti parser di analizzare correttamente le intestazioni nell'output CSV risultante.

ESCAPED\$1BY  

```
escaped_by = '<character>', default: (\)
```
Quando si esportano i dati in formato CSV, questo campo specifica il carattere che deve essere trattato come carattere di escape nel file di dati scritto nel bucket S3. L'escape avviene nei seguenti scenari:  

1. Se il valore stesso contiene il carattere di virgoletta («), verrà eliminato utilizzando un carattere di escape. Ad esempio, se il valore è`Time"stream`, dove (\$1) è il carattere di escape configurato, allora verrà escluso come. `Time\"stream` 

1. Se il valore contiene il carattere di escape configurato, verrà eliminato. Ad esempio, se il valore è`Time\stream`, allora verrà scappato come. `Time\\stream` 
Se l'output esportato contiene tipi di dati complessi come Arrays, Rows o Timeseries, verrà serializzato come stringa JSON. Di seguito è riportato un esempio.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/export-unload-concepts.html)

INCLUDE\$1HEADER  

```
include_header = 'true' , default: 'false'
```
Quando si esportano i dati in formato CSV, questo campo consente di includere i nomi delle colonne come prima riga dei file di dati CSV esportati.  
I valori accettati sono «true» e «false» e il valore predefinito è «false». Le opzioni di trasformazione del testo come `escaped_by` e `field_delimiter` si applicano anche alle intestazioni.  
Quando si includono le intestazioni, è importante non selezionare un carattere di ritorno (ASCII 13, hex 0D, testo '\$1 r') o un carattere di interruzione di riga (ASCII 10, hex 0A, text'\$1n') come carattere`FIELD_DELIMITER`, poiché ciò impedirà a molti parser di analizzare correttamente le intestazioni nell'output CSV risultante.

MAX\$1FILE\$1SIZE  

```
max_file_size = 'X[MB|GB]' , default: '78GB'
```
Questo campo specifica la dimensione massima dei file che l'`UNLOAD`istruzione crea in Amazon S3. L'`UNLOAD`istruzione può creare più file, ma la dimensione massima di ogni file scritto in Amazon S3 sarà approssimativamente quella specificata in questo campo.  
Il valore del campo deve essere compreso tra 16 MB e 78 GB, inclusi. È possibile specificarlo in numeri interi come `12GB` o in decimali come o. `0.5GB` `24.7MB` Il valore predefinito è 78 GB.  
La dimensione effettiva del file è approssimativa al momento della scrittura del file, pertanto la dimensione massima effettiva potrebbe non essere esattamente uguale al numero specificato.

## Cosa viene scritto nel mio bucket S3?
<a name="export-unload-common-questions-what-is-written"></a>

Per ogni query UNLOAD eseguita correttamente, Timestream for LiveAnalytics scrive i risultati della query, il file di metadati e il file manifest nel bucket S3. Se hai partizionato i dati, hai tutte le cartelle delle partizioni nella cartella dei risultati. Il file manifesto contiene un elenco dei file che sono stati scritti dal comando UNLOAD. Il file di metadati contiene informazioni che descrivono le caratteristiche, le proprietà e gli attributi dei dati scritti. 

## Qual è il nome del file esportato?
<a name="export-unload-common-questions-what-is-filename"></a>

Il nome del file esportato contiene due componenti, il primo componente è il QueryID e il secondo è un identificatore univoco.

File CSV

```
S3://bucket_name/results/<queryid>_<UUID>.csv
S3://bucket_name/results/<partitioncolumn>=<partitionvalue>/<queryid>_<UUID>.csv
```

File CSV compresso

```
S3://bucket_name/results/<partitioncolumn>=<partitionvalue>/<queryid>_<UUID>.gz 
```

File Parquet

```
S3://bucket_name/results/<partitioncolumn>=<partitionvalue>/<queryid>_<UUID>.parquet
```

Metadati e file manifesto

```
S3://bucket_name/<queryid>_<UUID>_manifest.json 
S3://bucket_name/<queryid>_<UUID>_metadata.json
```

Poiché i dati in formato CSV vengono archiviati a livello di file, quando si comprimono i dati durante l'esportazione in S3, il file avrà un'estensione «.gz». Tuttavia, i dati in Parquet vengono compressi a livello di colonna, quindi anche quando si comprimono i dati durante l'esportazione, il file avrà comunque l'estensione.parquet.

## Quali informazioni contiene ogni file?
<a name="export-unload-common-questions-what-information"></a>

### File manifest
<a name="export-unload-common-questions-what-information-manifest"></a>

Il file manifest fornisce informazioni sull'elenco dei file che vengono esportati con l'esecuzione UNLOAD. Il file manifest è disponibile nel bucket S3 fornito con un nome di file:. `s3://<bucket_name>/<queryid>_<UUID>_manifest.json` Il file manifest conterrà l'URL dei file nella cartella dei risultati, il numero di record e le dimensioni dei rispettivi file, e i metadati della query (ovvero i byte totali e le righe totali esportati in S3 per la query). 

```
{
  "result_files": [
    {
        "url":"s3://my_timestream_unloads/ec2_metrics/AEDAGANLHLBH4OLISD3CVOZZRWPX5GV2XCXRBKCVD554N6GWPWWXBP7LSG74V2Q_1448466917_szCL4YgVYzGXj2lS.gz", 
        "file_metadata": 
            { 
                "content_length_in_bytes": 32295, 
                "row_count": 10 
            }
    },
    {
        "url":"s3://my_timestream_unloads/ec2_metrics/AEDAGANLHLBH4OLISD3CVOZZRWPX5GV2XCXRBKCVD554N6GWPWWXBP7LSG74V2Q_1448466917_szCL4YgVYzGXj2lS.gz", 
        "file_metadata": 
            { 
                "content_length_in_bytes": 62295, 
                "row_count": 20 
            }
    },
  ],
  "query_metadata": 
    {
      "content_length_in_bytes": 94590, 
      "total_row_count": 30,
      "result_format": "CSV",
      "result_version": "Amazon Timestream version 1.0.0"  
    },
  "author": {
        "name": "Amazon Timestream", 
        "manifest_file_version": "1.0" 
  }
}
```

### Metadati
<a name="export-unload-common-questions-what-information-metadata"></a>

Il file di metadati fornisce informazioni aggiuntive sul set di dati come il nome della colonna, il tipo di colonna e lo schema. <queryid><UUID>Il file di metadati è disponibile nel bucket S3 fornito con un nome di file: S3: //bucket\$1name/ \$1 \$1metadata.json 

Di seguito è riportato un esempio di file di metadati.

```
{
    "ColumnInfo": [
        {
            "Name": "hostname",
            "Type": {
                "ScalarType": "VARCHAR"
            }
        },
        {
            "Name": "region",
            "Type": {
                "ScalarType": "VARCHAR"
            }
        },
        {
            "Name": "measure_name",
            "Type": {
                "ScalarType": "VARCHAR"
            }
        },
        {
            "Name": "cpu_utilization",
            "Type": {
                "TimeSeriesMeasureValueColumnInfo": {
                    "Type": {
                        "ScalarType": "DOUBLE"
                    }
                }
            }
        }
  ],
  "Author": {
        "Name": "Amazon Timestream", 
        "MetadataFileVersion": "1.0" 
  }
}
```

Le informazioni sulle colonne condivise nel file di metadati hanno la stessa struttura di quelle `ColumnInfo` inviate nella risposta dell'API Query per le `SELECT` query. 

### Risultati
<a name="export-unload-common-questions-what-information-results"></a>

La cartella dei risultati contiene i dati esportati in formato Apache Parquet o CSV. 

## Esempio
<a name="export-unload-example-short"></a>

Quando invii una richiesta come quella riportata di seguito tramite l'API `UNLOAD` Query,

```
UNLOAD(SELECT user_id, ip_address, event, session_id, measure_name, time, query, quantity, product_id, channel 
                    FROM sample_clickstream.sample_shopping WHERE time BETWEEN ago(2d) AND now()) 
                TO 's3://my_timestream_unloads/withoutpartition/' WITH ( format='CSV', compression='GZIP')
```

`UNLOAD`la risposta alla query avrà 1 riga \$1 3 colonne. Queste 3 colonne sono:
+ righe di tipo BIGINT, che indicano il numero di righe esportate
+ MetadataFile di tipo VARCHAR, che è l'URI S3 del file di metadati esportato
+ manifestFile di tipo VARCHAR, che è l'URI S3 del file manifesto esportato

Riceverai la seguente risposta dall'API Query:

```
{
    "Rows": [
        {
            "Data": [
                {
                    "ScalarValue": "20" # No of rows in output across all files
                },
                {
                    "ScalarValue": "s3://my_timestream_unloads/withoutpartition/AEDAAANGH3D7FYHOBQGQQMEAISCJ45B42OWWJMOT4N6RRJICZUA7R25VYVOHJIY_<UUID>_metadata.json" #Metadata file
                },
                {
                    "ScalarValue": "s3://my_timestream_unloads/withoutpartition/AEDAAANGH3D7FYHOBQGQQMEAISCJ45B42OWWJMOT4N6RRJICZUA7R25VYVOHJIY_<UUID>_manifest.json" #Manifest file
                }
            ]
        }
    ],
    "ColumnInfo": [
        {
            "Name": "rows",
            "Type": {
                "ScalarType": "BIGINT"
            }
        },
        {
            "Name": "metadataFile",
            "Type": {
                "ScalarType": "VARCHAR"
            }
        },
        {
            "Name": "manifestFile",
            "Type": {
                "ScalarType": "VARCHAR"
            }
        }
    ],
    "QueryId": "AEDAAANGH3D7FYHOBQGQQMEAISCJ45B42OWWJMOT4N6RRJICZUA7R25VYVOHJIY",
    "QueryStatus": {
        "ProgressPercentage": 100.0,
        "CumulativeBytesScanned": 1000,
        "CumulativeBytesMetered": 10000000
    }
}
```

## Tipi di dati
<a name="export-unload-data-types-explanation"></a>

L'`UNLOAD`istruzione supporta tutti i tipi di dati del linguaggio di query LiveAnalytics di Timestream for descritto in [Tipi di dati supportati](supported-data-types.md) tranne `time` e. `unknown`

# Prerequisiti per UNLOAD from Timestream per LiveAnalytics
<a name="export-unload-prerequisites"></a>

Di seguito sono riportati i prerequisiti per la scrittura di dati su S3 utilizzando from Timestream for. `UNLOAD` LiveAnalytics
+ È necessario disporre dell'autorizzazione a leggere i dati dal Timestream per le LiveAnalytics tabelle da utilizzare in un comando. `UNLOAD`
+ Devi avere un bucket Amazon S3 nella stessa AWS regione del tuo Timestream per le risorse. LiveAnalytics
+ Per il bucket S3 selezionato, assicurati che la [policy del bucket S3 disponga anche delle autorizzazioni per consentire a Timestream](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html) di esportare i dati. LiveAnalytics 
+ Le credenziali utilizzate per eseguire la `UNLOAD` query devono disporre delle autorizzazioni AWS Identity and Access Management (IAM) necessarie che consentano a Timestream di scrivere i dati LiveAnalytics su S3. Un esempio di politica potrebbe essere il seguente:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": [
                "timestream:Select",
                "timestream:ListMeasures",
                "timestream:WriteRecords",
                "timestream:Unload"
            ],
            "Resource": "arn:aws:timestream:us-east-2:111122223333:database/database_name/table/table_name"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketAcl",
                "s3:PutObject",
                "s3:GetObject",
                "s3:AbortMultipartUpload"
            ],
            "Resource": [
                "arn:aws:s3:::S3_Bucket_Created",
                "arn:aws:s3:::S3_Bucket_Created/*"
            ]
        }
    ]
}
```

------

Per ulteriori informazioni su queste autorizzazioni di scrittura S3, consulta la guida di [Amazon Simple Storage Service](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpuAndPermissions). Se utilizzi una chiave KMS per crittografare i dati esportati, consulta quanto segue per le politiche IAM aggiuntive richieste.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
            "kms:DescribeKey",
            "kms:Decrypt",
            "kms:GenerateDataKey*"
        ],
        "Resource": "arn:aws:kms:us-east-2:111122223333:key/*",
        "Condition": {
            "ForAnyValue:StringLike": {
                "kms:ResourceAliases": "alias/Alias_For_Generated_Key"
            }
        }
    }, {
        "Effect": "Allow",
        "Action": [
            "kms:CreateGrant"
        ],
        "Resource": "arn:aws:kms:us-east-2:111122223333:key/*",
        "Condition": {
            "ForAnyValue:StringEquals": {
                "kms:EncryptionContextKeys": "aws:timestream:database_name"
            },
            "Bool": {
                "kms:GrantIsForAWSResource": true
            },
            "StringLike": {
                "kms:ViaService": "timestream.us-east-2.amazonaws.com"
            },
            "ForAnyValue:StringLike": {
                "kms:ResourceAliases": "alias/Alias_For_Generated_Key"
            }
        }
    }
]
}
```

------

# Le migliori pratiche per UNLOAD from Timestream per LiveAnalytics
<a name="export-unload-best-practices"></a>

Di seguito sono riportate le procedure consigliate relative al comando UNLOAD.
+ La quantità di dati che può essere esportata nel bucket S3 utilizzando il `UNLOAD` comando non è limitata. Tuttavia, la query scade dopo 60 minuti e consigliamo di esportare non più di 60 GB di dati in una singola query. Se devi esportare più di 60 GB di dati, suddividi il lavoro su più query.
+ Sebbene sia possibile inviare migliaia di richieste a S3 per caricare i dati, si consiglia di parallelizzare le operazioni di scrittura su più prefissi S3. [Fai](https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance.html) riferimento alla documentazione qui. La velocità di chiamata all'API S3 potrebbe essere limitata quando più readers/writers utenti accedono alla stessa cartella. 
+ Dato il limite alla lunghezza della chiave S3 per la definizione di un prefisso, consigliamo di avere nomi di bucket e cartelle entro 10-15 caratteri, specialmente quando si utilizza la clausola. `partitioned_by` 
+ Quando ricevi un 4XX o 5XX per le query contenenti l'`UNLOAD`istruzione, è possibile che i risultati parziali vengano scritti nel bucket S3. Timestream for LiveAnalytics non elimina alcun dato dal bucket. Prima di eseguire un'altra `UNLOAD` query con la stessa destinazione S3, consigliamo di eliminare manualmente i file creati dalla query fallita. È possibile identificare i file scritti da una query fallita con i file corrispondenti`QueryExecutionId`. Per le query non riuscite, Timestream for LiveAnalytics non esporta un file manifest nel bucket S3. 
+ Timestream for LiveAnalytics utilizza il caricamento in più parti per esportare i risultati delle query su S3. Quando ricevi un 4XX o 5XX da Timestream per le query contenenti un'istruzione UNLOAD, Timestream LiveAnalytics for evita al massimo il caricamento in più parti, LiveAnalytics ma è possibile che alcune parti incomplete rimangano incomplete. [Pertanto, ti consigliamo di impostare una pulizia automatica dei caricamenti incompleti in più parti nel tuo bucket S3 seguendo le linee guida riportate qui.](https://aws.amazon.com/blogs/aws-cloud-financial-management/discovering-and-deleting-incomplete-multipart-uploads-to-lower-amazon-s3-costs/)

## Consigli per accedere ai dati in formato CSV utilizzando il parser CSV
<a name="export-unload-common-questions-what-information-recommendations-csv"></a>
+ I parser CSV non consentono di avere lo stesso carattere nei caratteri delimiter, escape e quote.
+ Alcuni parser CSV non sono in grado di interpretare tipi di dati complessi come gli array, consigliamo di interpretarli tramite il deserializzatore JSON. 

## Raccomandazioni per l'accesso ai dati in formato Parquet
<a name="export-unload-common-questions-what-information-recommendations-parquet"></a>

1. Se il tuo caso d'uso richiede il supporto dei caratteri UTF-8 nello schema, noto anche come nome della colonna, ti consigliamo di utilizzare la libreria [Parquet-MR](https://github.com/apache/parquet-mr).

1. Il timestamp nei risultati è rappresentato da un numero intero a 12 byte () INT96

1. Le serie temporali verranno rappresentate come`array<row<time, value>>`, le altre strutture annidate utilizzeranno i tipi di dati corrispondenti supportati nel formato Parquet

## Utilizzo della clausola partition\$1by
<a name="export-unload-best-practices-partition-by"></a>
+ La colonna utilizzata nel `partitioned_by` campo deve essere l'ultima colonna nella query di selezione. Se nel `partitioned_by` campo viene utilizzata più di una colonna, le colonne devono essere le ultime colonne della query di selezione e nello stesso ordine in cui vengono utilizzate nel `partition_by` campo.
+ I valori delle colonne utilizzati per partizionare i dati (`partitioned_by`campo) possono contenere solo caratteri ASCII. Mentre Timestream for LiveAnalytics consente i caratteri UTF-8 nei valori, S3 supporta solo caratteri ASCII come chiavi oggetto.

# Esempio di utilizzo di UNLOAD from Timestream per LiveAnalytics
<a name="export-unload-example-use-case"></a>

Supponiamo che stiate monitorando le metriche della sessione utente, le sorgenti di traffico e gli acquisti di prodotti del vostro sito di e-commerce. Stai utilizzando Timestream per LiveAnalytics ottenere informazioni in tempo reale sul comportamento degli utenti, sulle vendite di prodotti ed eseguire analisi di marketing sui canali di traffico (ricerca organica, social media, traffico diretto, campagne a pagamento e altri) che indirizzano i clienti al sito web. 

**Topics**
+ [Esportazione dei dati senza partizioni](#export-unload-example-sample-1)
+ [Partizionamento dei dati per canale](#export-unload-example-sample-2)
+ [Partizionamento dei dati per evento](#export-unload-example-sample-3)
+ [Partizionamento dei dati sia per canale che per evento](#export-unload-example-sample-4)
+ [File di manifesto e di metadati](#export-unload-example-manifest-metadata)
+ [Utilizzo dei crawler Glue per creare Glue Data Catalog](#export-unload-example-using-glue-crawlers)

## Esportazione dei dati senza partizioni
<a name="export-unload-example-sample-1"></a>

Vuoi esportare gli ultimi due giorni dei tuoi dati in formato CSV.

```
UNLOAD(SELECT user_id, ip_address, event, session_id, measure_name, time, 
query, quantity, product_id, channel 
FROM sample_clickstream.sample_shopping 
WHERE time BETWEEN ago(2d) AND now())  
TO 's3://<bucket_name>/withoutpartition' 
WITH (  format='CSV',   
compression='GZIP')
```

## Partizionamento dei dati per canale
<a name="export-unload-example-sample-2"></a>

Desideri esportare i dati degli ultimi due giorni in formato CSV ma desideri avere i dati di ciascun canale di traffico in una cartella separata. A tale scopo, è necessario partizionare i dati utilizzando la `channel` colonna, come illustrato di seguito.

```
UNLOAD(SELECT user_id, ip_address, event, session_id, measure_name, time, 
query, quantity, product_id, channel 
FROM sample_clickstream.sample_shopping 
WHERE time BETWEEN ago(2d) AND now())  
TO 's3://<bucket_name>/partitionbychannel/' 
WITH (  
partitioned_by = ARRAY ['channel'], 
format='CSV',   
compression='GZIP')
```

## Partizionamento dei dati per evento
<a name="export-unload-example-sample-3"></a>

Desideri esportare i dati degli ultimi due giorni in formato CSV ma desideri avere i dati per ogni evento in una cartella separata. A tale scopo, è necessario partizionare i dati utilizzando la `event` colonna, come illustrato di seguito.

```
UNLOAD(SELECT user_id, ip_address, channel, session_id, measure_name, time, 
query, quantity, product_id, event 
FROM sample_clickstream.sample_shopping 
WHERE time BETWEEN ago(2d) AND now())  
TO 's3://<bucket_name>/partitionbyevent/' 
WITH (  
partitioned_by = ARRAY ['event'], 
format='CSV',   
compression='GZIP')
```

## Partizionamento dei dati sia per canale che per evento
<a name="export-unload-example-sample-4"></a>

Desiderate esportare i dati degli ultimi due giorni in formato CSV, ma desiderate che i dati per ogni canale e all'interno del canale memorizzino ogni evento in una cartella separata. A tale scopo, è necessario partizionare i dati utilizzando entrambe `channel` le `event` colonne, come illustrato di seguito.

```
UNLOAD(SELECT user_id, ip_address, session_id, measure_name, time, 
query, quantity, product_id, channel,event 
FROM sample_clickstream.sample_shopping 
WHERE time BETWEEN ago(2d) AND now())  
TO 's3://<bucket_name>/partitionbychannelevent/' 
WITH (  
partitioned_by = ARRAY ['channel','event'], 
format='CSV',   
compression='GZIP')
```

## File di manifesto e di metadati
<a name="export-unload-example-manifest-metadata"></a>

### File manifest
<a name="export-unload-common-questions-what-information-manifest"></a>

Il file manifest fornisce informazioni sull'elenco dei file che vengono esportati con l'esecuzione UNLOAD. Il file manifest è disponibile nel bucket S3 fornito con un nome di file:. `S3://bucket_name/<queryid>_<UUID>_manifest.json` Il file manifest conterrà l'URL dei file nella cartella dei risultati, il numero di record e le dimensioni dei rispettivi file, e i metadati della query (ovvero i byte totali e le righe totali esportati in S3 per la query). 

```
{
  "result_files": [
    {
        "url":"s3://my_timestream_unloads/ec2_metrics/AEDAGANLHLBH4OLISD3CVOZZRWPX5GV2XCXRBKCVD554N6GWPWWXBP7LSG74V2Q_1448466917_szCL4YgVYzGXj2lS.gz", 
        "file_metadata": 
            { 
                "content_length_in_bytes": 32295, 
                "row_count": 10 
            }
    },
    {
        "url":"s3://my_timestream_unloads/ec2_metrics/AEDAGANLHLBH4OLISD3CVOZZRWPX5GV2XCXRBKCVD554N6GWPWWXBP7LSG74V2Q_1448466917_szCL4YgVYzGXj2lS.gz", 
        "file_metadata": 
            { 
                "content_length_in_bytes": 62295, 
                "row_count": 20 
            }
    },
  ],
  "query_metadata": 
    {
      "content_length_in_bytes": 94590, 
      "total_row_count": 30,
      "result_format": "CSV",
      "result_version": "Amazon Timestream version 1.0.0"  
    },
  "author": {
        "name": "Amazon Timestream", 
        "manifest_file_version": "1.0" 
  }
}
```

### Metadati
<a name="export-unload-common-questions-what-information-metadata"></a>

Il file di metadati fornisce informazioni aggiuntive sul set di dati come il nome della colonna, il tipo di colonna e lo schema. <queryid><UUID>Il file di metadati è disponibile nel bucket S3 fornito con un nome di file: S3: //bucket\$1name/ \$1 \$1metadata.json 

Di seguito è riportato un esempio di file di metadati.

```
{
    "ColumnInfo": [
        {
            "Name": "hostname",
            "Type": {
                "ScalarType": "VARCHAR"
            }
        },
        {
            "Name": "region",
            "Type": {
                "ScalarType": "VARCHAR"
            }
        },
        {
            "Name": "measure_name",
            "Type": {
                "ScalarType": "VARCHAR"
            }
        },
        {
            "Name": "cpu_utilization",
            "Type": {
                "TimeSeriesMeasureValueColumnInfo": {
                    "Type": {
                        "ScalarType": "DOUBLE"
                    }
                }
            }
        }
  ],
  "Author": {
        "Name": "Amazon Timestream", 
        "MetadataFileVersion": "1.0" 
  }
}
```

Le informazioni sulle colonne condivise nel file di metadati hanno la stessa struttura di quelle `ColumnInfo` inviate nella risposta dell'API Query per le `SELECT` query. 

## Utilizzo dei crawler Glue per creare Glue Data Catalog
<a name="export-unload-example-using-glue-crawlers"></a>

1. Accedi al tuo account con le credenziali di amministratore per la seguente convalida.

1. [Crea un database Crawler for Glue utilizzando le linee guida fornite qui.](https://docs.aws.amazon.com/glue/latest/ug/tutorial-add-crawler.html) Tieni presente che la cartella S3 da fornire nell'origine dati dovrebbe essere la cartella dei risultati, ad esempio. `UNLOAD` `s3://my_timestream_unloads/results`

1. [Esegui il crawler seguendo le linee guida riportate qui.](https://docs.aws.amazon.com/glue/latest/ug/tutorial-add-crawler.html#tutorial-add-crawler-step2)

1. Visualizza la tabella Glue.
   + Vai a **AWS Glue** → **Tabelle**.
   + Vedrai una nuova tabella creata con il prefisso della tabella fornito durante la creazione del crawler.
   + È possibile visualizzare lo schema e le informazioni sulla partizione facendo clic sulla visualizzazione dei dettagli della tabella.

Di seguito sono riportati altri AWS servizi e progetti open source che utilizzano il AWS Glue Data Catalog.
+ **Amazon Athena**: per ulteriori informazioni, consulta [Comprendere tabelle, database e cataloghi di dati](https://docs.aws.amazon.com/athena/latest/ug/understanding-tables-databases-and-the-data-catalog.html) nella Guida per l'utente di Amazon Athena.
+ **Amazon Redshift** Spectrum — Per ulteriori informazioni, [consulta la sezione Interrogazione di dati esterni utilizzando Amazon Redshift Spectrum nella Amazon](https://docs.aws.amazon.com/redshift/latest/dg/c-using-spectrum.html) Redshift Database Developer Guide.
+ **Amazon EMR**: per ulteriori informazioni, consulta [Utilizzare politiche basate sulle risorse per l'accesso di Amazon EMR AWS a Glue Data Catalog nella Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles-glue.html) Management Guide.
+ **AWS Client Glue Data Catalog per Apache Hive metastore** — Per ulteriori informazioni su questo progetto GitHub, consulta [AWS Glue Data Catalog Client for](https://github.com/awslabs/aws-glue-data-catalog-client-for-apache-hive-metastore) Apache Hive Metastore.

# Limiti per UNLOAD from Timestream per LiveAnalytics
<a name="export-unload-limits"></a>

Di seguito sono riportati i limiti relativi al comando. `UNLOAD`
+ La concorrenza per le query che utilizzano l'`UNLOAD`istruzione è pari a 1 query al secondo (QPS). Il superamento della frequenza di query potrebbe comportare una limitazione.
+ Le query contenenti `UNLOAD` istruzioni possono esportare al massimo 100 partizioni per query. Si consiglia di controllare il numero distinto della colonna selezionata prima di utilizzarla per partizionare i dati esportati.
+ Le interrogazioni contenenti `UNLOAD` dichiarazioni scadono dopo 60 minuti.
+ La dimensione massima dei file creati dall'`UNLOAD`istruzione in Amazon S3 è di 78 GB.

Per altri limiti per Timestream per, vedi LiveAnalytics [QuoteQuote di default](ts-limits.md)

# Utilizzo di informazioni dettagliate sulle query per ottimizzare le query in Amazon Timestream
<a name="using-query-insights"></a>

Query Insights è una funzionalità di ottimizzazione delle prestazioni che consente di ottimizzare le query, migliorarne le prestazioni e ridurre i costi. Con Query Insights, puoi valutare l'efficienza di eliminazione delle tue query basata su chiavi di partizione temporali, temporali e spaziali. Utilizzando le informazioni sulle query, è inoltre possibile identificare le aree di miglioramento per migliorare le prestazioni delle query. Inoltre, con Query Insights, è possibile valutare l'efficacia con cui le query utilizzano l'indicizzazione basata sul tempo e sulla chiave di partizione per ottimizzare il recupero dei dati. Per ottimizzare le prestazioni delle query, è essenziale ottimizzare i parametri temporali e spaziali che regolano l'esecuzione delle query.

**Topics**
+ [Vantaggi degli approfondimenti sulle query](#query-insights-benefits)
+ [Ottimizzazione dell'accesso ai dati in Amazon Timestream](query-insights-optimize-data-access-pattern.md)
+ [Attivazione di informazioni dettagliate sulle query in Amazon Timestream](enable-query-insights.md)
+ [Ottimizzazione delle query utilizzando la risposta a Query Insights](optimize-query-using-query-insights.md)

## Vantaggi degli approfondimenti sulle query
<a name="query-insights-benefits"></a>

Di seguito sono riportati i principali vantaggi dell'utilizzo di Query Insights: 
+ **Identificazione delle query inefficienti: Query** Insights fornisce informazioni sull'eliminazione, basata sul tempo e sugli attributi, delle tabelle a cui accede la query. Queste informazioni consentono di identificare le tabelle a cui si accede in modo non ottimale.
+ **Ottimizzazione del modello di dati e del partizionamento**: è possibile utilizzare le informazioni di Query Insights per accedere e perfezionare il modello di dati e la strategia di partizionamento.
+ **Ottimizzazione delle query: Query** Insights evidenzia le opportunità di utilizzare gli indici in modo più efficace.

# Ottimizzazione dell'accesso ai dati in Amazon Timestream
<a name="query-insights-optimize-data-access-pattern"></a>

Puoi ottimizzare i modelli di accesso ai dati in Amazon Timestream utilizzando lo schema di partizionamento Timestream o le tecniche di organizzazione dei dati.

**Topics**
+ [Schema di partizionamento Timestream](#query-insights-optimize-data-access-partitioning-scheme)
+ [Organizzazione dei dati](#query-insights-optimize-data-access-data-org)

## Schema di partizionamento Timestream
<a name="query-insights-optimize-data-access-partitioning-scheme"></a>

Amazon Timestream utilizza uno schema di partizionamento altamente scalabile in cui ogni tabella Timestream può avere centinaia, migliaia o persino milioni di partizioni indipendenti. Un servizio di tracciamento e indicizzazione delle partizioni ad alta disponibilità gestisce il partizionamento, minimizzando l'impatto degli errori e rendendo il sistema più resiliente.

![\[Schema di partizionamento Timestream\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/QueryInsights/ts-partitioning-scheme.png)


## Organizzazione dei dati
<a name="query-insights-optimize-data-access-data-org"></a>

Timestream memorizza ogni punto dati che acquisisce in una singola partizione. Quando si inseriscono i dati in una tabella Timestream, Timestream crea automaticamente partizioni in base ai timestamp, alla chiave di partizione e ad altri attributi di contesto presenti nei dati. Oltre a partizionare i dati nel tempo (partizionamento temporale), Timestream partiziona anche i dati in base alla chiave di partizionamento selezionata e ad altre dimensioni (partizionamento spaziale). Questo approccio è progettato per distribuire il traffico di scrittura e consentire un'efficace eliminazione dei dati per le query.

La funzionalità di analisi delle query fornisce informazioni preziose sull'efficienza di eliminazione delle query, che include la copertura spaziale delle query e la copertura temporale delle query.

**Topics**
+ [QuerySpatialCoverage](#query-insights-data-org-query-spatial-cvg)
+ [QueryTemporalCoverage](#query-insights-data-org-query-temporal-cvg)

### QuerySpatialCoverage
<a name="query-insights-data-org-query-spatial-cvg"></a>

La [QuerySpatialCoverage](https://docs.aws.amazon.com/timestream/latest/developerguide/API_query_QuerySpatialCoverage.html)metrica fornisce informazioni sulla copertura spaziale della query eseguita e sulla tabella con la riduzione spaziale più inefficiente. Queste informazioni possono aiutarti a identificare le aree di miglioramento nella strategia di partizionamento per migliorare la potatura spaziale. Il valore della `QuerySpatialCoverage` metrica è compreso tra 0 e 1. Più basso è il valore della metrica, più ottimale è l'eliminazione delle query sull'asse spaziale. Ad esempio, un valore di 0,1 indica che la query analizza il 10% dell'asse spaziale. Il valore 1 indica che l'interrogazione analizza il 100% dell'asse spaziale.

**Example Utilizzo di Query Insights per analizzare la copertura spaziale di un'interrogazione**  
Supponiamo che tu abbia un database Timestream che memorizza i dati meteorologici. Supponiamo che la temperatura venga registrata ogni ora dalle stazioni meteorologiche situate in diversi stati degli Stati Uniti d'America. Immagina di scegliere `State` come [chiave di partizionamento definita dal cliente (CDPK) per partizionare](customer-defined-partition-keys.md) i dati per stato.  
Supponiamo di eseguire un'interrogazione per recuperare la temperatura media di tutte le stazioni meteorologiche della California tra le 14:00 e le 16:00 di un giorno specifico. L'esempio seguente mostra la query per questo scenario.  

```
SELECT AVG(temperature) 
FROM "weather_data"."hourly_weather"
WHERE time >= '2024-10-01 14:00:00' AND time < '2024-10-01 16:00:00' 
  AND state = 'CA';
```
Utilizzando la funzionalità Query Insights, è possibile analizzare la copertura spaziale dell'interrogazione. Immagina che la `QuerySpatialCoverage` metrica restituisca un valore di 0,02. Ciò significa che la query ha scansionato solo il 2% dell'asse spaziale, il che è efficiente. In questo caso, l'interrogazione è stata in grado di ridurre efficacemente l'intervallo spaziale, recuperando solo i dati dalla California e ignorando i dati provenienti da altri stati.  
Al contrario, se la `QuerySpatialCoverage` metrica restituisse un valore di 0,8, indicherebbe che la query ha scansionato l'80% dell'asse spaziale, il che è meno efficiente. Ciò potrebbe suggerire che la strategia di partizionamento debba essere perfezionata per migliorare la potatura spaziale. Ad esempio, è possibile selezionare la chiave di partizione come città o regione anziché come stato. Analizzando la `QuerySpatialCoverage` metrica, è possibile identificare le opportunità per ottimizzare la strategia di partizionamento e migliorare le prestazioni delle query.

L'immagine seguente mostra una potatura spaziale scadente.

![\[Risultato fornito dalla QuerySpatialCoverage metrica che mostra una potatura spaziale scadente.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/QueryInsights/QuerySpatialCoverageMetricResult.png)


Per migliorare l'efficienza della potatura spaziale, puoi eseguire una o entrambe le seguenti operazioni:
+ Aggiungi `measure_name` la chiave di partizionamento predefinita o utilizza i predicati CDPK nella tua query.
+ Se hai già aggiunto gli attributi menzionati nel punto precedente, rimuovi le funzioni relative a questi attributi o clausole, ad esempio. `LIKE`

### QueryTemporalCoverage
<a name="query-insights-data-org-query-temporal-cvg"></a>

La `QueryTemporalCoverage` metrica fornisce informazioni sull'intervallo temporale analizzato dalla query eseguita, inclusa la tabella con l'intervallo di tempo più ampio scansionato. Il valore della `QueryTemporalCoverage` metrica è l'intervallo di tempo rappresentato in nanosecondi. Più basso è il valore di questa metrica, più ottimale è l'eliminazione delle query sull'intervallo temporale. Ad esempio, una query che analizza i dati degli ultimi minuti è più efficiente di una query che analizza l'intero intervallo di tempo della tabella.

**Example**  
Supponiamo di avere un database Timestream che memorizza i dati dei sensori IoT, con misurazioni effettuate ogni minuto dai dispositivi situati in uno stabilimento di produzione. Supponiamo di aver partizionato i dati per. `device_ID`  
Supponiamo di eseguire una query per recuperare la lettura media del sensore per un dispositivo specifico negli ultimi 30 minuti. L'esempio seguente mostra l'interrogazione per questo scenario.  

```
SELECT AVG(sensor_reading) 
FROM "sensor_data"."factory_1"
WHERE device_id = 'DEV_123' 
  AND time >= NOW() - INTERVAL 30 MINUTE and time < NOW();
```
Utilizzando la funzionalità Query Insights, è possibile analizzare l'intervallo temporale analizzato dalla query. Immagina che la `QueryTemporalCoverage` metrica restituisca un valore di 1800000000000 nanosecondi (30 minuti). Ciò significa che la query ha analizzato solo i dati degli ultimi 30 minuti, ovvero un intervallo temporale relativamente ristretto. Questo è un buon segno perché indica che la query è stata in grado di ridurre efficacemente il partizionamento temporale e ha recuperato solo i dati richiesti.  
Al contrario, se la `QueryTemporalCoverage` metrica ha restituito un valore di 1 anno in nanosecondi, indica che la query ha analizzato un intervallo di tempo di un anno nella tabella, il che è meno efficiente. Ciò potrebbe suggerire che la query non è ottimizzata per l'eliminazione temporale e che è possibile migliorarla aggiungendo filtri temporali.

L'immagine seguente mostra una scarsa potatura temporale.

![\[Risultato fornito dalla QueryTemporalCoverage metrica che mostra una potatura temporale scadente.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/QueryInsights/QueryTemporalCoverageMetricResult.png)


Per migliorare la potatura temporale, ti consigliamo di eseguire una o tutte le seguenti operazioni:
+ Aggiungi i predicati temporali mancanti nella query e assicurati che i predicati temporali riducano la finestra temporale desiderata.
+ Rimuovete le funzioni, ad esempio`MAX()`, i predicati temporali.
+ Aggiungi predicati temporali a tutte le sottointerrogazioni. Questo è importante se le tue sottoquery uniscono tabelle di grandi dimensioni o eseguono operazioni complesse.

# Attivazione di informazioni dettagliate sulle query in Amazon Timestream
<a name="enable-query-insights"></a>

Puoi abilitare gli approfondimenti sulle query per le tue query con approfondimenti forniti direttamente tramite la risposta alla query. L'attivazione di Query Insights non richiede un'infrastruttura aggiuntiva né comporta costi aggiuntivi. Quando si abilita Query Insights, vengono restituiti i campi di metadati relativi alle prestazioni delle query oltre ai risultati delle query come parte della risposta alla query. È possibile utilizzare queste informazioni per ottimizzare le query per migliorare le prestazioni delle query e ridurre i costi delle query.

Per informazioni sull'attivazione di Query Insights, consulta[Esecuzione di una query](console_timestream.md#console_timestream.queries.using-console).

Per visualizzare esempi delle risposte restituite abilitando Query Insights, consulta [Esempi di query pianificate](https://docs.aws.amazon.com/timestream/latest/developerguide/API_query_ExecuteScheduledQuery.html#API_query_ExecuteScheduledQuery_Examples).

**Nota**  
Quando abiliti Query Insights, it rate limita la query a 1 query al secondo (QPS). Per evitare impatti sulle prestazioni, ti consigliamo vivamente di abilitare Query Insights solo durante la fase di valutazione delle query, prima di distribuirle in produzione.
Le informazioni fornite in Query Insights alla fine sono coerenti, il che significa che potrebbero cambiare man mano che nuovi dati vengono continuamente inseriti nelle tabelle.

# Ottimizzazione delle query utilizzando la risposta a Query Insights
<a name="optimize-query-using-query-insights"></a>

Supponiamo che tu stia utilizzando Amazon Timestream LiveAnalytics per monitorare il consumo di energia in varie località. Immagina di avere due tabelle nel tuo database denominate `raw-metrics` e. `aggregate-metrics`

La `raw-metrics` tabella memorizza dati energetici dettagliati a livello di dispositivo e contiene le seguenti colonne:
+ Time stamp
+ Stato, ad esempio, Washington
+ ID dispositivo
+ Consumo energetico

I dati di questa tabella vengono raccolti e archiviati in modo minute-by-minute granulare. La tabella viene utilizzata `State` come CDPK.

La `aggregate-metrics` tabella memorizza il risultato di una query pianificata per aggregare i dati sul consumo energetico di tutti i dispositivi su base oraria. Questa tabella contiene le seguenti colonne:
+ Time stamp
+ Stato, ad esempio, Washington
+ Consumo energetico totale

La `aggregate-metrics` tabella memorizza questi dati con una granularità oraria. La tabella utilizza `State` come CDPK.

**Topics**
+ [Interrogazione del consumo energetico delle ultime 24 ore](#query-energy-consumption-data)
+ [Ottimizzazione della query per l'intervallo temporale](#optimize-query-temporal-range)
+ [Ottimizzazione dell'interrogazione per la copertura spaziale](#optimize-query-spatial-coverage)
+ [Prestazioni di interrogazione migliorate](#improved-query-performance)

## Interrogazione del consumo energetico delle ultime 24 ore
<a name="query-energy-consumption-data"></a>

Supponiamo di voler estrarre l'energia totale consumata a Washington nelle ultime 24 ore. Per trovare questi dati, puoi sfruttare i punti di forza di entrambe le tabelle: `raw-metrics` e. `aggregate-metrics` La `aggregate-metrics` tabella fornisce dati orari sul consumo energetico nelle ultime 23 ore, mentre la `raw-metrics` tabella offre dati granulari al minuto per l'ultima ora. Interrogando entrambe le tabelle, è possibile ottenere un quadro completo e preciso del consumo di energia a Washington nelle ultime 24 ore.

```
SELECT am.time, am.state, am.total_energy_consumption, 
rm.time, rm.state, rm.device_id, rm.energy_consumption
FROM 
 "metrics"."aggregate-metrics" am
 LEFT JOIN "metrics"."raw-metrics" rm ON am.state = rm.state
WHERE rm.time >= ago(1h) and rm.time < now()
```

Questa query di esempio viene fornita solo a scopo illustrativo e potrebbe non funzionare così com'è. Ha lo scopo di dimostrare il concetto, ma potrebbe essere necessario modificarlo per adattarlo al caso d'uso o all'ambiente specifico.

Dopo aver eseguito questa query, potresti notare che il tempo di risposta alla query è più lento del previsto. Per identificare la causa principale di questo problema di prestazioni, è possibile utilizzare la funzionalità Query Insights per analizzare le prestazioni della query e ottimizzarne l'esecuzione.

L'esempio seguente mostra la risposta a Query Insights.

```
queryInsightsResponse={
                QuerySpatialCoverage: {
                    Max: {
                        Value: 1.0,
                        TableArn: arn:aws:timestream:us-east-1:123456789012:database/metrics/table/raw-metrics,
                        PartitionKey: [State]
                    }
                },
                QueryTemporalRange: {
                    Max: {
                        Value:31540000000000000 //365 days,
                        TableArn: arn:aws:timestream:us-east-1:123456789012:database/metrics/table/aggregate-metrics
                    }
                },
                QueryTableCount: 2,
                OutputRows: 83,
                OutputBytes: 590
```

La risposta a Query Insights fornisce le seguenti informazioni:
+ Intervallo **temporale: la query ha analizzato un intervallo** temporale eccessivo di 365 giorni per la tabella. `aggregate-metrics` Ciò indica un uso inefficiente del filtro temporale.
+ **Copertura spaziale**: l'interrogazione ha analizzato l'intero intervallo spaziale (100%) della tabella. `raw-metrics` Ciò suggerisce che il filtro spaziale non viene utilizzato in modo efficace.

Se la query accede a più di una tabella, Query Insights fornisce le metriche per la tabella con il modello di accesso meno ottimale.

## Ottimizzazione della query per l'intervallo temporale
<a name="optimize-query-temporal-range"></a>

In base alla risposta a Query Insights, è possibile ottimizzare la query per l'intervallo temporale, come illustrato nell'esempio seguente.

```
SELECT am.time, am.state, am.total_energy_consumption, 
rm.time, rm.state, rm.device_id, rm.energy_consumption
FROM 
  "metrics"."aggregate-metrics" am
  LEFT JOIN "metrics"."raw-metrics" rm ON am.state = rm.state
WHERE 
  am.time >=  ago(23h) and am.time < now()
  AND rm.time >=  ago(1h) and rm.time < now()
  AND rm.state = 'Washington'
```

Se si esegue nuovamente il `QueryInsights` comando, viene restituita la seguente risposta.

```
queryInsightsResponse={
                QuerySpatialCoverage: {
                    Max: {
                        Value: 1.0,
                        TableArn: arn:aws:timestream:us-east-1:123456789012:database/metrics/table/aggregate-metrics,
                        PartitionKey: [State]
                    }
                },
                QueryTemporalRange: {
                    Max: {
                        Value: 82800000000000 //23 hours,
                        TableArn: arn:aws:timestream:us-east-1:123456789012:database/metrics/table/aggregate-metrics
                    }
                },
                QueryTableCount: 2,
                OutputRows: 83,
                OutputBytes: 590
```

Questa risposta mostra che la copertura spaziale della `aggregate-metrics` tabella è ancora del 100%, il che è inefficiente. La sezione seguente mostra come ottimizzare l'interrogazione per la copertura spaziale.

## Ottimizzazione dell'interrogazione per la copertura spaziale
<a name="optimize-query-spatial-coverage"></a>

In base alla risposta a Query Insights, è possibile ottimizzare la query per la copertura spaziale, come illustrato nell'esempio seguente.

```
SELECT am.time, am.state, am.total_energy_consumption, 
rm.time, rm.state, rm.device_id, rm.energy_consumption
FROM 
  "metrics"."aggregate-metrics" am
  LEFT JOIN "metrics"."raw-metrics" rm ON am.state = rm.state
WHERE 
  am.time >=  ago(23h) and am.time < now()
  AND am.state ='Washington'
  AND rm.time >=  ago(1h) and rm.time < now()
  AND rm.state = 'Washington'
```

Se si esegue nuovamente il `QueryInsights` comando, viene restituita la seguente risposta.

```
queryInsightsResponse={
                QuerySpatialCoverage: {
                    Max: {
                        Value: 0.02,
                        TableArn: arn:aws:timestream:us-east-1:123456789012:database/metrics/table/aggregate-metrics,
                        PartitionKey: [State]
                    }
                },
                QueryTemporalRange: {
                    Max: {
                        Value: 82800000000000 //23 hours,
                        TableArn: arn:aws:timestream:us-east-1:123456789012:database/metrics/table/aggregate-metrics
                    }
                },
                QueryTableCount: 2,
                OutputRows: 83,
                OutputBytes: 590
```

## Prestazioni di interrogazione migliorate
<a name="improved-query-performance"></a>

Dopo aver ottimizzato la query, Query Insights fornisce le seguenti informazioni:
+ La potatura temporale della `aggregate-metrics` tavola è di 23 ore. Ciò indica che vengono scansionate solo 23 ore dell'intervallo temporale.
+ La potatura spaziale per `aggregate-metrics` la tavola è 0,02. Ciò indica che viene scansionato solo il 2% dei dati relativi all'intervallo spaziale della tabella. La query analizza una parte molto piccola delle tabelle, con conseguente aumento delle prestazioni e riduzione dell'utilizzo delle risorse. La migliore efficienza di potatura indica che la query è ora ottimizzata per le prestazioni.

# Lavorare con AWS Backup
<a name="backups"></a>

La funzionalità di protezione dei dati di Amazon Timestream LiveAnalytics for è una soluzione completamente gestita per aiutarti a soddisfare i requisiti di conformità normativa e continuità aziendale. La funzionalità è abilitata attraverso l'integrazione nativa con AWS Backup, un servizio di backup unificato progettato per semplificare la creazione, la migrazione, il ripristino e l'eliminazione dei backup, fornendo al contempo report e audit migliorati. Attraverso l'integrazione con AWS Backup, è possibile utilizzare una soluzione di protezione dei dati centralizzata completamente gestita e basata su policy per creare backup immutabili e gestire centralmente la protezione dei dati delle applicazioni, compresi Timestream e altri servizi supportati da. AWS AWS Backup

[Per utilizzare la funzionalità, devi dare il consenso alla protezione delle tue risorse Timestream.](https://docs.aws.amazon.com/aws-backup/latest/devguide/service-opt-in.html) AWS Backup Le opzioni di attivazione si applicano all'account e alla AWS regione specifici, quindi potresti dover attivare più regioni utilizzando lo stesso account. Per ulteriori informazioni sul AWS Backup, consulta la [Guida per AWS Backup gli sviluppatori](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html).

La funzionalità di protezione dei dati disponibile AWS Backup include quanto segue.

**Backup pianificati**: puoi impostare backup pianificati regolarmente del tuo Timestream per LiveAnalytics le tabelle utilizzando piani di backup.

**Copia tra account e più regioni**: è possibile copiare automaticamente i backup in un altro archivio di backup in una AWS regione o account diverso, in modo da soddisfare i requisiti di protezione dei dati.

**Archiviazione a freddo su più livelli**: è possibile configurare i backup per implementare le regole del ciclo di vita per eliminare o trasferire i backup a sistemi di archiviazione più freddi. Questo può aiutarti a ottimizzare i costi di backup.

**Tag**: è possibile etichettare automaticamente i backup per scopi di fatturazione e allocazione dei costi.

**Crittografia**: i dati di backup vengono archiviati nel vault. AWS Backup Ciò consente di crittografare e proteggere i backup utilizzando una chiave AWS KMS indipendente dalla chiave di crittografia Timestream for Table. LiveAnalytics 

**Backup sicuri utilizzando il modello WORM**: è possibile utilizzare AWS Backup Vault Lock per abilitare un'impostazione (WORM) per i backup. write-once-read-many Con AWS Backup Vault Lock, è possibile aggiungere un ulteriore livello di difesa che protegge i backup da operazioni di eliminazione involontarie o dolose, modifiche ai periodi di conservazione dei backup e aggiornamenti delle impostazioni del ciclo di vita. Per ulteriori informazioni, consulta [AWS Backup Vault Lock](https://docs.aws.amazon.com/aws-backup/latest/devguide/vault-lock.html).

[La funzionalità di protezione dei dati è disponibile in tutte le regioni. Per ulteriori informazioni sulla funzionalità, consulta la Guida per gli sviluppatori.AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html)

# Backup e ripristino delle tabelle Timestream: come funziona
<a name="backups-how-it-works"></a>

Puoi creare backup delle tue tabelle Amazon Timestream. In questa sezione viene fornita una panoramica di ciò che accade durante il processo di backup e ripristino.

**Topics**
+ [Backup](#backups-backups)
+ [Ripristini](#backups-restores)

## Backup
<a name="backups-backups"></a>

Puoi utilizzare la funzionalità di backup su richiesta per creare backup completi del tuo Amazon Timestream per tabelle. LiveAnalytics In questa sezione viene fornita una panoramica di ciò che accade durante il processo di backup e ripristino.

Puoi creare un backup dei tuoi dati Timestream con una tabella di granularità. Puoi avviare un backup della tabella selezionata utilizzando la console Timestream o la console, l'SDK o AWS Backup la CLI. Il backup viene creato in modo asincrono e nel backup vengono inclusi tutti i dati della tabella fino all'ora di avvio del backup. Tuttavia, esiste la possibilità che alcuni dei dati inseriti nella tabella mentre il backup è in corso possano essere inclusi nel backup. Per proteggere i dati, è possibile creare un backup su richiesta una tantum o pianificare un backup ricorrente della tabella.

Mentre è in corso un backup, non è possibile effettuare le seguenti operazioni.
+ Sospendere o annullare l'operazione di backup;
+ Eliminare la tabella di origine del backup;
+ Disabilitare i backup su una tabella se uno di questi è in corso.

Una volta configurato, AWS Backup fornisce pianificazioni di backup automatizzate, gestione della conservazione e gestione del ciclo di vita, eliminando la necessità di script personalizzati e processi manuali. [Per ulteriori informazioni, consulta la Guida per gli sviluppatori AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html)

Tutti i timestream per i LiveAnalytics backup sono di natura incrementale, il che implica che il primo backup di una tabella è un backup completo e ogni backup successivo della stessa tabella è un backup incrementale, in cui vengono copiate solo le modifiche ai dati dall'ultimo backup. Poiché i dati in Timestream for LiveAnalytics sono archiviati in una raccolta di partizioni, tutte le partizioni modificate a causa dell'acquisizione di nuovi dati o degli aggiornamenti dei dati esistenti dall'ultimo backup vengono copiate durante i backup successivi. 

**Se utilizzi Timestream per LiveAnalytics console, i backup creati per tutte le risorse dell'account sono elencati nella scheda Backup.** **Inoltre, i backup sono elencati anche nei dettagli della Tabella.**

## Ripristini
<a name="backups-restores"></a>

Puoi ripristinare una tabella dal Timestream per LiveAnalytics console o AWS Backup console, SDK o CLI. AWS Puoi ripristinare tutti i dati dal backup o configurare le impostazioni di conservazione della tabella per ripristinare determinati dati. Quando si avvia un ripristino, è possibile configurare le seguenti impostazioni della tabella.
+ Database Name (Nome database)
+ Nome tabella
+ Conservazione dell'archivio di memoria
+ Conservazione magnetica dell'archivio
+ Abilita le scritture con archiviazione magnetica
+ Posizione dei log di errore S3 (opzionale)
+ Ruolo IAM che AWS Backup assumerà durante il ripristino del backup

Le configurazioni precedenti sono indipendenti dalla tabella di origine. Per ripristinare tutti i dati del backup, si consiglia di configurare le nuove impostazioni della tabella in modo che la somma del periodo di conservazione dell'archivio di memoria e del periodo di conservazione dell'archivio magnetico sia maggiore della differenza tra il timestamp più vecchio e quello attuale. Quando si seleziona un backup incrementale da ripristinare, vengono ripristinati tutti i dati (incrementali \$1 dati completi sottostanti). Una volta completato il ripristino, la tabella è in stato attivo ed è possibile eseguire operazioni di and/or interrogazione di inserimento sulla tabella ripristinata. Tuttavia, non è possibile eseguire queste operazioni mentre il ripristino è in corso. Una volta ripristinata, la tabella è simile a qualsiasi altra tabella del tuo account.

**Example Ripristina tutti i dati da un backup**  
In questo esempio si basano i seguenti presupposti.  

*Timestamp più vecchio:* `August 1, 2021 0:00:00`
+ *Adesso —* `November 9, 2022 0:00:00`
Per ripristinare tutti i dati da un backup, inserisci e confronta i valori come segue.  

1. Inserisci **Memory store retention** e **Magnetic store retention**. Ad esempio, assumete questi valori.
   + Conservazione dell'*archivio di memoria*: -12 ore
   + *Conservazione dell'archivio magnetico*: -500 giorni

1. Calcola la somma della conservazione dell'**archivio di memoria e della conservazione** dell'**archivio magnetico**.

   ```
   12 hours + (500 * 24 hours) =
   12 hours + 12,000 hours =
   12,012 hours
   ```

1. Trova la differenza tra il **timestamp più vecchio** e quello attuale.

   ```
   November 9, 2022 0:00:00 - August 1, 2021 0:00:00 =
   465 days =
   465 * 24 hours =
   11,160 hours
   ```

1. Assicurati che la somma dei valori di conservazione nel secondo passaggio sia maggiore della differenza di tempo nel terzo passaggio. Se necessario, regolate i tempi di conservazione.

   ```
   12,012 > 11,160
   true
   ```

**Example Ripristina i dati selezionati da un backup**  
Questo esempio si basa sul seguente presupposto.  
+ *Ora* — `November 9, 2022 0:00:00`
Per ripristinare solo alcuni dati da un backup, inserisci e confronta i valori come segue.  

1. Determina il primo timestamp richiesto. Ad esempio, supponiamo. `December 4, 2021 0:00:00`

1. Trova la differenza tra il primo timestamp richiesto e quello attuale.

   ```
   November 9, 2022 0:00:00 - December 4, 2021 0:00:00 =
   340 days =
   340 * 24 hours =
   8,160 hours
   ```

1. Inserisci il valore desiderato per la conservazione dell'**archivio di memoria**. Ad esempio, immettere 12 ore.

1. Sottrai il valore dalla differenza nel secondo passaggio.

   ```
   8,160 hours - 12 hours =
   8148 hours
   ```

1. Inserisci quel valore per **Magnetic store retention**.

Puoi copiare un backup del tuo Timestream per i dati della LiveAnalytics tabella in un'altra AWS regione e quindi ripristinarlo in quella nuova regione. Puoi copiare e quindi ripristinare i backup tra regioni AWS commerciali e regioni AWS GovCloud (Stati Uniti). I prezzi sono calcolati solo in base ai dati che copi dalla regione di origine e dai dati che ripristini in una nuova tabella nella regione di destinazione.

Una volta ripristinata la tabella, è necessario impostare manualmente quanto segue sulla tabella ripristinata.
+ AWS Politiche di Identity and Access Management (IAM)
+ Tag
+ Interrogazioni pianificate

I tempi di ripristino sono direttamente correlati alla configurazione delle tabelle. Questi includono la dimensione delle tabelle, il numero di partizioni sottostanti, la quantità di dati ripristinati nell'archivio di memoria e altre variabili. Una buona pratica nella pianificazione del disaster recovery consiste nel documentare regolarmente i tempi medi di completamento del ripristino e stabilire in che modo tali tempi influiscono sul Recovery Time Objective (RTO) complessivo.

Tutte le console di backup e ripristino e le operazioni API vengono acquisite e registrate in AWS CloudTrail per la registrazione, il monitoraggio e l'audit.

# Creazione di backup delle tabelle Amazon Timestream
<a name="backups-creating"></a>

Questa sezione descrive come abilitare AWS Backup e creare backup su richiesta e pianificati per Amazon Timestream.

**Topics**
+ [Attivazione della protezione di Timestream AWS Backup per i dati LiveAnalytics](#backups-enabling)
+ [Creazione di backup on demand](#backups-on-demand)
+ [Backup pianificati](#backups-scheduled)

## Attivazione della protezione di Timestream AWS Backup per i dati LiveAnalytics
<a name="backups-enabling"></a>

È necessario abilitarlo AWS Backup per utilizzarlo con Timestream for. LiveAnalytics

Per abilitarlo AWS Backup in Timestream per LiveAnalytics console, procedi nel seguente modo.

1.  Accedere alla[ Console di gestione AWS](https://console.aws.amazon.com/timestream). 

1. Nella parte superiore della pagina Timestream for LiveAnalytics dashboard viene visualizzato un banner pop-up per consentire AWS Backup il supporto di Timestream per i dati. LiveAnalytics **Altrimenti, dal pannello di navigazione, scegli Backup.**

1. Nella finestra **Backup**, vedrai il banner da abilitare AWS Backup. Scegli **Abilita **.

   La protezione dei dati tramite data AWS Backup è ora disponibile per il tuo Timestream for LiveAnalytics tables.

Per attivarla AWS Backup, consulta la AWS Backup documentazione relativa all'attivazione tramite console e a livello di codice.

Se scegli di disabilitare la protezione AWS Backup del tuo Timestream per LiveAnalytics i dati dopo averli abilitati, accedi tramite la AWS Backup console e sposta l'interruttore verso sinistra.

 Se non riesci ad abilitare o disabilitare le AWS Backup funzionalità, potrebbe essere necessario che l' AWS amministratore esegua tali azioni.

## Creazione di backup on demand
<a name="backups-on-demand"></a>

Per creare un backup su richiesta di un Timestream for LiveAnalytics table, segui questi passaggi.

1. Accedere alla[ Console di gestione AWS](https://console.aws.amazon.com/timestream).

1. Nel riquadro di navigazione sul lato sinistro della console scegliere **Backups (Backup)**.

1. Seleziona **Crea backup on demand**.

1. Continua a selezionare le impostazioni nella finestra di backup.

1. È possibile creare subito un backup, avviarlo immediatamente o selezionare una finestra di backup per avviare il backup.

1. Seleziona la politica di gestione del ciclo di vita del tuo backup. È possibile trasferire i dati di backup in celle frigorifere, dove è necessario conservare il backup per un minimo di 90 giorni. È possibile impostare il periodo di conservazione richiesto per il backup. È possibile selezionare un archivio esistente oppure selezionare **crea un nuovo archivio di backup** per accedere alla AWS Backup console e creare un nuovo archivio di backup <documentation link on creating a new backup vault here>

1. Seleziona il ruolo IAM appropriato.

1. Se si desidera assegnare uno o più tag al proprio backup on demand, immettere una **chiave** e, facoltativamente, un **valore**, quindi scegliere **Aggiungi tag**.

1. Scegli di creare un backup su richiesta. Verrai indirizzato alla pagina **Backup**, dove vedrai un elenco di lavori.

1. Scegliere **ID del lavoro di Backup** per la risorsa scelta per il backup per visualizzare i dettagli del lavoro.

## Backup pianificati
<a name="backups-scheduled"></a>

Per pianificare un backup, consulta [Creare un backup pianificato](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-a-scheduled-backup.html).

# Ripristino di un backup di una tabella Amazon Timestream
<a name="backups-restoring"></a>

Questa sezione descrive come ripristinare un backup di una tabella Amazon Timestream.

**Topics**
+ [Ripristino di un Timestream per una tabella da LiveAnalytics AWS Backup](#backups-restoring-from)
+ [Ripristino di un Timestream per la LiveAnalytics tabella in un'altra regione o account](#backups-restoring-to)

## Ripristino di un Timestream per una tabella da LiveAnalytics AWS Backup
<a name="backups-restoring-from"></a>

Per ripristinare Timestream for LiveAnalytics table dall' AWS Backup utilizzo di Timestream per console, segui questi passaggi. LiveAnalytics 

1. Accedere alla[ Console di gestione AWS](https://console.aws.amazon.com/timestream).

1. Nel riquadro di navigazione sul lato sinistro della console scegliere **Backups (Backup)**.

1. Per ripristinare una risorsa, scegli il pulsante di opzione accanto all'ID del punto di ripristino della risorsa. Nell'angolo superiore destro del riquadro, scegliere **Ripristina**.

1. Immettete le impostazioni di configurazione della tabella, vale a dire **il nome del database** e **il nome della tabella**. Si noti che il nome della tabella ripristinata deve essere diverso dal nome della tabella di origine originale.

1. Configura le impostazioni di conservazione della memoria e dell'archivio magnetico.

1. Per il **ruolo Restore**, scegli il ruolo IAM che AWS Backup assumerai per questo ripristino.

1. Scegli **Restore backup (Ripristina backup)**. Un messaggio nella parte superiore della pagina fornisce informazioni sul lavoro di ripristino.

**Nota**  
Ti verrà addebitato il costo del ripristino dell'intero backup indipendentemente dai periodi di conservazione della memoria configurata e dell'archivio magnetico. Tuttavia, una volta completato il ripristino, la tabella ripristinata conterrà solo i dati entro i periodi di conservazione configurati.

## Ripristino di un Timestream per la LiveAnalytics tabella in un'altra regione o account
<a name="backups-restoring-to"></a>

Per ripristinare un Timestream per la LiveAnalytics tabella in un'altra regione o account, dovrai prima copiare il backup in quella nuova regione o account. Per copiare in un altro account, tale account deve prima concederti l'autorizzazione. Dopo aver copiato il Timestream per il LiveAnalytics backup nella nuova regione o account, è possibile ripristinarlo con la procedura descritta nella sezione precedente.

# Copiare un backup di una tabella Amazon Timestream
<a name="backups-copying"></a>

Puoi creare una copia di un backup corrente. Puoi copiare i backup su più AWS account o AWS regioni su richiesta o automaticamente come parte di un piano di backup pianificato. La replica tra regioni è particolarmente utile se hai requisiti di continuità aziendale o di conformità per archiviare i backup a una distanza minima dai dati di produzione.

I backup tra account sono utili per copiare in modo sicuro i backup su uno o più account AWS della tua organizzazione per motivi operativi o di sicurezza. Se il backup originale viene eliminato inavvertitamente, puoi copiare il backup dall'account di destinazione all'account di origine e quindi avviare il ripristino. Prima di eseguire questa operazione, è necessario disporre di due account che appartengono alla stessa organizzazione nel servizio Organizations e le autorizzazioni necessarie per gli account. Quando si copia un backup incrementale in un altro account o regione, viene copiato anche il backup completo associato.

Le copie ereditano la configurazione del backup di origine, a meno che non venga specificato diversamente. Esiste tuttavia un'eccezione. Se si specifica che la nuova copia è impostata su «Mai», scadono. Con questa impostazione, la nuova copia eredita ancora la data di scadenza dell'origine. Se vuoi che la nuova copia di backup sia permanente, imposta i backup di origine in modo che non scadano mai o specifica che la nuova copia scadrà 100 anni dopo la sua creazione.

Per copiare un backup dalla console Timestream, segui questi passaggi.

1. Accedere alla[ Console di gestione AWS](https://console.aws.amazon.com/timestream).

1. Nel riquadro di navigazione sul lato sinistro della console scegliere **Backups (Backup)**.

1. Scegli il pulsante di opzione accanto all'ID del punto di ripristino della risorsa. **Nell'angolo in alto a destra del riquadro, seleziona **Azioni** e scegli Copia.**

1. Seleziona **Continua con il AWS backup** e segui i passaggi per il [backup su più account](https://docs.aws.amazon.com/aws-backup/latest/devguide/cross-region-backup.html).

La copia dei backup su richiesta e pianificati tra account e regioni non è attualmente supportata a livello nativo in Timestream per LiveAnalytics console e devi accedere per eseguire l'operazione. AWS Backup 

# Eliminazione di backup
<a name="backups-deleting"></a>

Questa sezione descrive come eliminare un backup di un Timestream for table. LiveAnalytics 

Per eliminare un backup dalla console Timestream, segui questi passaggi.

1. Accedere alla[ Console di gestione AWS](https://console.aws.amazon.com/timestream).

1. Nel riquadro di navigazione sul lato sinistro della console scegliere **Backups (Backup)**.

1. Scegli il pulsante di opzione accanto all'ID del punto di ripristino della risorsa. **Nell'angolo in alto a destra del riquadro, seleziona **Azioni** e scegli Elimina.**

1. Seleziona **Continua con il AWS backup** e segui i passaggi per l'eliminazione dei backup in [Eliminazione](https://docs.aws.amazon.com/aws-backup/latest/devguide/deleting-backups.html) dei backup.

**Nota**  
Quando elimini un backup incrementale, viene eliminato solo il backup incrementale e il backup completo sottostante non viene eliminato.

# Quote e limiti
<a name="backups-limits"></a>

AWS Backup limita i backup a un backup simultaneo per risorsa. Pertanto, le richieste di backup aggiuntive pianificate o su richiesta per la risorsa vengono messe in coda e verranno avviate solo dopo il completamento del processo di backup esistente. Se il processo di backup non viene avviato o completato all'interno della finestra di backup, la richiesta ha esito negativo. Per ulteriori informazioni sui AWS Backup limiti, consulta [AWS Backup Limits](https://docs.aws.amazon.com/aws-backup/latest/devguide/aws-backup-limits.html) nella AWS Backup Developer Guide.

Quando si crea un backup, è possibile eseguire fino a quattro backup simultanei per account. Allo stesso modo, puoi eseguire un ripristino simultaneo per account. Quando si avviano più di quattro processi di backup contemporaneamente, vengono avviati solo quattro processi di backup e i processi rimanenti verranno ripetuti periodicamente. Una volta avviato, se il processo di backup non viene completato entro la durata della finestra di backup configurata, il processo di backup ha esito negativo. Se il processo di backup non riuscito è un backup su richiesta, è possibile riprovare il backup e, per i backup pianificati, il processo viene tentato secondo la pianificazione seguente.

# Chiavi di partizione definite dal cliente
<a name="customer-defined-partition-keys"></a>

Amazon Timestream LiveAnalytics per chiavi di partizione definite dal cliente è una funzionalità di Timestream che consente ai clienti di definire le proprie chiavi di partizione LiveAnalytics per le proprie tabelle. Il partizionamento è una tecnica utilizzata per distribuire i dati su più unità di archiviazione fisiche, che consente un recupero dei dati più rapido ed efficiente. Con le chiavi di partizione definite dal cliente, i clienti possono creare uno schema di partizionamento che si allinea meglio ai modelli di query e ai casi d'uso.

Con Timestream per le chiavi di partizione LiveAnalytics definite dal cliente, i clienti possono scegliere un nome di dimensione come chiave di partizione per le proprie tabelle. Ciò consente una maggiore flessibilità nella definizione dello schema di partizionamento per i dati. Selezionando la chiave di partizione corretta, i clienti possono ottimizzare il modello di dati, migliorare le prestazioni delle query e ridurre la latenza delle query.

**Topics**
+ [Utilizzo di chiavi di partizione definite dal cliente](customer-defined-partition-keys-using.md)
+ [Guida introduttiva alle chiavi di partizione definite dal cliente](customer-defined-partition-keys-getting-started.md)
+ [Verifica della configurazione dello schema di partizionamento](customer-defined-partition-keys-checking-configuration.md)
+ [Aggiornamento della configurazione dello schema di partizionamento](customer-defined-partition-keys-updating-configuration.md)
+ [Vantaggi delle chiavi di partizione definite dal cliente](customer-defined-partition-keys-advantages.md)
+ [Limitazioni delle chiavi di partizione definite dal cliente](customer-defined-partition-keys-limitations.md)
+ [Chiavi di partizione definite dal cliente e dimensioni a bassa cardinalità](customer-defined-partition-keys-low-cardinality-dimensions.md)
+ [Creazione di chiavi di partizione per tabelle esistenti](customer-defined-partition-keys-creating.md)
+ [Timestream per la convalida LiveAnalytics dello schema con chiavi di partizione composite personalizzate](customer-defined-partition-keys-schema-validation.md)

# Utilizzo di chiavi di partizione definite dal cliente
<a name="customer-defined-partition-keys-using"></a>

Se disponi di uno schema di query ben definito con dimensioni di cardinalità elevate e richiedi una bassa latenza di query, un Timestream per la chiave di partizione LiveAnalytics definita dal cliente può essere uno strumento utile per migliorare il modello di dati. Ad esempio, se sei un'azienda di vendita al dettaglio che monitora le interazioni con i clienti sul tuo sito web, i modelli di accesso principali sarebbero probabilmente l'ID del cliente e il timestamp. Definendo l'ID cliente come chiave di partizione, i dati possono essere distribuiti in modo uniforme, riducendo la latenza e, in ultima analisi, migliorando l'esperienza utente.

Un altro esempio è il settore sanitario, dove i dispositivi indossabili raccolgono i dati dei sensori per tracciare i segni vitali dei pazienti. Il modello di accesso principale sarebbe l'ID del dispositivo e il timestamp, con una cardinalità elevata su entrambe le dimensioni. Definendo Device ID come chiave di partizione, è possibile ottimizzare l'esecuzione delle query e garantire prestazioni di query sostenute a lungo termine.

In sintesi, Timestream per le chiavi di partizione LiveAnalytics definite dal cliente è particolarmente utile quando si dispone di uno schema di query chiaro, dimensioni di cardinalità elevate e si richiede una bassa latenza per le query. Definendo una chiave di partizione in linea con il modello di query, è possibile ottimizzare l'esecuzione delle query e garantire prestazioni sostenute a lungo termine.



# Guida introduttiva alle chiavi di partizione definite dal cliente
<a name="customer-defined-partition-keys-getting-started"></a>

Dalla console, scegli **Tabelle** e crea una nuova tabella. Puoi anche utilizzare un SDK per accedere all'`CreateTable`azione di creazione di nuove tabelle che possono includere una chiave di partizione definita dal cliente.

## Crea una tabella con una chiave di partizione di tipo di dimensione
<a name="code-samples.create-table-with-dimension-type-partition-key"></a>

È possibile utilizzare i seguenti frammenti di codice per creare una tabella con una chiave di partizione di tipo dimensione.

------
#### [  Java  ]

```
public void createTableWithDimensionTypePartitionKeyExample() {
        System.out.println("Creating table");
        CreateTableRequest createTableRequest = new CreateTableRequest();
        createTableRequest.setDatabaseName(DATABASE_NAME);
        createTableRequest.setTableName(TABLE_NAME);
        final RetentionProperties retentionProperties = new RetentionProperties()
                .withMemoryStoreRetentionPeriodInHours(HT_TTL_HOURS)
                .withMagneticStoreRetentionPeriodInDays(CT_TTL_DAYS);
        createTableRequest.setRetentionProperties(retentionProperties);

        // Can specify enforcement level with OPTIONAL or REQUIRED
        final List<PartitionKey> partitionKeyWithDimensionAndOptionalEnforcement = Collections.singletonList(new PartitionKey()
            .withName(COMPOSITE_PARTITION_KEY_DIM_NAME)
            .withType(PartitionKeyType.DIMENSION)
            .withEnforcementInRecord(PartitionKeyEnforcementLevel.OPTIONAL));
        Schema schema = new Schema();
        schema.setCompositePartitionKey(partitionKeyWithDimensionAndOptionalEnforcement);
        createTableRequest.setSchema(schema);
        
        try {
            writeClient.createTable(createTableRequest);
            System.out.println("Table [" + TABLE_NAME + "] successfully created.");
        } catch (ConflictException e) {
            System.out.println("Table [" + TABLE_NAME + "] exists on database [" + DATABASE_NAME + "] . Skipping database creation");
        }
    }
```

------
#### [  Java v2  ]

```
public void createTableWithDimensionTypePartitionKeyExample() {
        System.out.println("Creating table"); 
        final RetentionProperties retentionProperties = RetentionProperties.builder()
                .memoryStoreRetentionPeriodInHours(HT_TTL_HOURS)
                .magneticStoreRetentionPeriodInDays(CT_TTL_DAYS)
                .build();
        // Can specify enforcement level with OPTIONAL or REQUIRED
        final List<PartitionKey> partitionKeyWithDimensionAndOptionalEnforcement = Collections.singletonList(PartitionKey
                .builder()
                .name(COMPOSITE_PARTITION_KEY_DIM_NAME)
                .type(PartitionKeyType.DIMENSION)
                .enforcementInRecord(PartitionKeyEnforcementLevel.OPTIONAL)
                .build());
        final Schema schema = Schema.builder()
                .compositePartitionKey(partitionKeyWithDimensionAndOptionalEnforcement).build();
        final CreateTableRequest createTableRequest = CreateTableRequest.builder()
                .databaseName(DATABASE_NAME)
                .tableName(TABLE_NAME)
                .retentionProperties(retentionProperties)
                .schema(schema)
                .build();

        try {
            writeClient.createTable(createTableRequest);
            System.out.println("Table [" + TABLE_NAME + "] successfully created.");
        } catch (ConflictException e) {
            System.out.println("Table [" + TABLE_NAME + "] exists on database [" + DATABASE_NAME + "] . Skipping database creation");
        }
    }
```

------
#### [  Go v1 ]

```
func createTableWithDimensionTypePartitionKeyExample(){ 
        // Can specify enforcement level with OPTIONAL or REQUIRED
        partitionKeyWithDimensionAndOptionalEnforcement := []*timestreamwrite.PartitionKey{
                {
                    Name:                aws.String(CompositePartitionKeyDimName),
                    EnforcementInRecord: aws.String("OPTIONAL"),
                    Type:                aws.String("DIMENSION"),
                },
        }     
        createTableInput := &timestreamwrite.CreateTableInput{
             DatabaseName: aws.String(*databaseName),
             TableName:    aws.String(*tableName),
             // Enable MagneticStoreWrite for Table
             MagneticStoreWriteProperties: &timestreamwrite.MagneticStoreWriteProperties{
                 EnableMagneticStoreWrites: aws.Bool(true),
                 // Persist MagneticStoreWrite rejected records in S3
                 MagneticStoreRejectedDataLocation: &timestreamwrite.MagneticStoreRejectedDataLocation{
                     S3Configuration: &timestreamwrite.S3Configuration{
                         BucketName:       aws.String("timestream-sample-bucket"),
                         ObjectKeyPrefix:  aws.String("TimeStreamCustomerSampleGo"),
                         EncryptionOption: aws.String("SSE_S3"),
                     },
                 },
             },   
             Schema: &timestreamwrite.Schema{
                 CompositePartitionKey: partitionKeyWithDimensionAndOptionalEnforcement,
             }
         }
         _, err := writeSvc.CreateTable(createTableInput)
    }
```

------
#### [  Go v2 ]

```
  func (timestreamBuilder TimestreamBuilder) CreateTableWithDimensionTypePartitionKeyExample() error {
         partitionKeyWithDimensionAndOptionalEnforcement := []types.PartitionKey{
             {
                 Name:                aws.String(CompositePartitionKeyDimName),
                 EnforcementInRecord: types.PartitionKeyEnforcementLevelOptional,
                 Type:                types.PartitionKeyTypeDimension,
             },
         }
         _, err := timestreamBuilder.WriteSvc.CreateTable(context.TODO(), &timestreamwrite.CreateTableInput{
             DatabaseName: aws.String(databaseName),
             TableName:    aws.String(tableName),
             MagneticStoreWriteProperties: &types.MagneticStoreWriteProperties{
                 EnableMagneticStoreWrites: aws.Bool(true),
                 // Persist MagneticStoreWrite rejected records in S3
                 MagneticStoreRejectedDataLocation: &types.MagneticStoreRejectedDataLocation{
                     S3Configuration: &types.S3Configuration{
                         BucketName:       aws.String(s3BucketName),
                         EncryptionOption: "SSE_S3",
                     },
                 },
             },
             Schema: &types.Schema{
                 CompositePartitionKey: partitionKeyWithDimensionAndOptionalEnforcement,
             },
         })
      
         if err != nil {
             fmt.Println("Error:")
             fmt.Println(err)
         } else {
             fmt.Println("Create table is successful")
         }
         return err
     }
```

------
#### [  Python  ]

```
def create_table_with_measure_name_type_partition_key(self):
        print("Creating table")
        retention_properties = {
            'MemoryStoreRetentionPeriodInHours': HT_TTL_HOURS,
            'MagneticStoreRetentionPeriodInDays': CT_TTL_DAYS
        }
        partitionKey_with_measure_name = [
            {'Type': 'MEASURE'}
        ]
        schema = {
            'CompositePartitionKey': partitionKey_with_measure_name
        }
        try:
            self.client.create_table(DatabaseName=DATABASE_NAME, TableName=TABLE_NAME,
                                     RetentionProperties=retention_properties, Schema=schema)
            print("Table [%s] successfully created." % TABLE_NAME)
        except self.client.exceptions.ConflictException:
            print("Table [%s] exists on database [%s]. Skipping table creation" % (
                TABLE_NAME, DATABASE_NAME))
        except Exception as err:
            print("Create table failed:", err)
```

------

# Verifica della configurazione dello schema di partizionamento
<a name="customer-defined-partition-keys-checking-configuration"></a>

È possibile verificare la configurazione di una tabella per lo schema di partizionamento in un paio di modi. Dalla console, scegli **Database** e scegli la tabella da controllare. Puoi anche utilizzare un SDK per accedere all'`DescribeTable`azione.

## Descrivi una tabella con una chiave di partizione
<a name="code-samples.describe-table-checking-partition-key"></a>

È possibile utilizzare i seguenti frammenti di codice per descrivere una tabella con una chiave di partizione.

------
#### [  Java  ]

```
    public void describeTable() {
        System.out.println("Describing table");
        final DescribeTableRequest describeTableRequest = new DescribeTableRequest();
        describeTableRequest.setDatabaseName(DATABASE_NAME);
        describeTableRequest.setTableName(TABLE_NAME);
        try {
            DescribeTableResult result = amazonTimestreamWrite.describeTable(describeTableRequest);
            String tableId = result.getTable().getArn();
            System.out.println("Table " + TABLE_NAME + " has id " + tableId);
            // If table is created with composite partition key, it can be described with
            // System.out.println(result.getTable().getSchema().getCompositePartitionKey());
        } catch (final Exception e) {
            System.out.println("Table " + TABLE_NAME + " doesn't exist = " + e);
            throw e;
        }
    }
```

Di seguito è riportato un esempio di output.

1. La tabella ha una chiave di partizione del tipo di dimensione

   ```
   [{Type: DIMENSION,Name: hostId,EnforcementInRecord: OPTIONAL}]
   ```

1. La tabella ha il nome della misura, il tipo di chiave di partizione

   ```
   [{Type: MEASURE,}]
   ```

1. Ottenere la chiave di partizione composita da una tabella creata senza specificare la chiave di partizione composita

   ```
   [{Type: MEASURE,}]
   ```

------
#### [  Java v2  ]

```
  public void describeTable() {
        System.out.println("Describing table");
        final DescribeTableRequest describeTableRequest = DescribeTableRequest.builder()
                .databaseName(DATABASE_NAME).tableName(TABLE_NAME).build();
        try {
            DescribeTableResponse response = writeClient.describeTable(describeTableRequest);
            String tableId = response.table().arn();
            System.out.println("Table " + TABLE_NAME + " has id " + tableId);
            // If table is created with composite partition key, it can be described with
            // System.out.println(response.table().schema().compositePartitionKey());
        } catch (final Exception e) {
            System.out.println("Table " + TABLE_NAME + " doesn't exist = " + e);
            throw e;
        }
    }
```

Di seguito è riportato un esempio di output.

1. La tabella ha una chiave di partizione del tipo di dimensione

   ```
   [PartitionKey(Type=DIMENSION, Name=hostId, EnforcementInRecord=OPTIONAL)]
   ```

1. La tabella ha il nome della misura, il tipo di chiave di partizione

   ```
   [PartitionKey(Type=MEASURE)]
   ```

1. Verrà restituita la chiave di partizione composita da una tabella creata senza specificare la chiave di partizione composita

   ```
   [PartitionKey(Type=MEASURE)]
   ```

------
#### [  Go v1 ]

```
    <tablistentry>
     <tabname> Go </tabname>
     <tabcontent>
      <programlisting language="go"></programlisting>
     </tabcontent>
    </tablistentry>
```

Di seguito è riportato un esempio di output.

```
{
  Table: {
    Arn: "arn:aws:timestream:us-west-2:533139590831:database/devops/table/host_metrics_dim_pk_1",
    CreationTime: 2023-05-31 01:52:00.511 +0000 UTC,
    DatabaseName: "devops",
    LastUpdatedTime: 2023-05-31 01:52:00.511 +0000 UTC,
    MagneticStoreWriteProperties: {
      EnableMagneticStoreWrites: true,
      MagneticStoreRejectedDataLocation: {
        S3Configuration: {
          BucketName: "timestream-sample-bucket-west",
          EncryptionOption: "SSE_S3",
          ObjectKeyPrefix: "TimeStreamCustomerSampleGo"
        }
      }
    },
    RetentionProperties: {
      MagneticStoreRetentionPeriodInDays: 73000,
      MemoryStoreRetentionPeriodInHours: 6
    },
    Schema: {
      CompositePartitionKey: [{
          EnforcementInRecord: "OPTIONAL",
          Name: "hostId",
          Type: "DIMENSION"
        }]
    },
    TableName: "host_metrics_dim_pk_1",
    TableStatus: "ACTIVE"
  }
}
```

------
#### [  Go v2 ]

```
 func (timestreamBuilder TimestreamBuilder) DescribeTable() (*timestreamwrite.DescribeTableOutput, error) {
         describeTableInput := &timestreamwrite.DescribeTableInput{
             DatabaseName: aws.String(databaseName),
             TableName:    aws.String(tableName),
         }
        describeTableOutput, err := timestreamBuilder.WriteSvc.DescribeTable(context.TODO(), describeTableInput)
    
        if err != nil {
            fmt.Printf("Failed to describe table with Error: %s", err.Error())
        } else {
            fmt.Printf("Describe table is successful : %s\n", JsonMarshalIgnoreError(*describeTableOutput))
            // If table is created with composite partition key, it will be included in the output
        }
    
        return describeTableOutput, err
    }
```

Di seguito è riportato un esempio di output.

```
{
  "Table": {
    "Arn":"arn:aws:timestream:us-east-1:351861611069:database/cdpk-wr-db/table/host_metrics_dim_pk",
    "CreationTime":"2023-05-31T22:36:10.66Z",
    "DatabaseName":"cdpk-wr-db",
    "LastUpdatedTime":"2023-05-31T22:36:10.66Z",
    "MagneticStoreWriteProperties":{
      "EnableMagneticStoreWrites":true,
      "MagneticStoreRejectedDataLocation":{
        "S3Configuration":{
          "BucketName":"error-configuration-sample-s3-bucket-cq8my",
          "EncryptionOption":"SSE_S3",
          "KmsKeyId":null,"ObjectKeyPrefix":null
        }
      }
    },
    "RetentionProperties":{
      "MagneticStoreRetentionPeriodInDays":73000,
      "MemoryStoreRetentionPeriodInHours":6
    },
    "Schema":{
      "CompositePartitionKey":[{
        "Type":"DIMENSION",
        "EnforcementInRecord":"OPTIONAL",
        "Name":"hostId"
      }]
    },
    "TableName":"host_metrics_dim_pk",
    "TableStatus":"ACTIVE"
  },
  "ResultMetadata":{}
}
```

------
#### [  Python  ]

```
  def describe_table(self):
        print('Describing table')
        try:
            result = self.client.describe_table(DatabaseName=DATABASE_NAME, TableName=TABLE_NAME)
            print("Table [%s] has id [%s]" % (TABLE_NAME, result['Table']['Arn']))
            # If table is created with composite partition key, it can be described with
            # print(result['Table']['Schema'])
        except self.client.exceptions.ResourceNotFoundException:
            print("Table doesn't exist")
        except Exception as err:
            print("Describe table failed:", err)
```

Di seguito è riportato un esempio di output.

1. La tabella ha una chiave di partizione del tipo di dimensione

   ```
   [{'CompositePartitionKey': [{'Type': 'DIMENSION', 'Name': 'hostId', 'EnforcementInRecord': 'OPTIONAL'}]}]
   ```

1. La tabella ha il nome della misura, il tipo di chiave di partizione

   ```
   [{'CompositePartitionKey': [{'Type': 'MEASURE'}]}]
   ```

1. Ottenere la chiave di partizione composita da una tabella creata senza specificare la chiave di partizione composita 

   ```
   [{'CompositePartitionKey': [{'Type': 'MEASURE'}]}]
   ```

------

# Aggiornamento della configurazione dello schema di partizionamento
<a name="customer-defined-partition-keys-updating-configuration"></a>

È possibile aggiornare la configurazione della tabella per lo schema di partizionamento con un SDK con accesso all'azione. `UpdateTable`

## Aggiorna una tabella con una chiave di partizione
<a name="code-samples.update-table-updating-partition-key"></a>

È possibile utilizzare i seguenti frammenti di codice per aggiornare una tabella con una chiave di partizione.

------
#### [  Java  ]

```
    public void updateTableCompositePartitionKeyEnforcement() {
        System.out.println("Updating table");

        UpdateTableRequest updateTableRequest = new UpdateTableRequest();
        updateTableRequest.setDatabaseName(DATABASE_NAME);
        updateTableRequest.setTableName(TABLE_NAME);

        // Can update enforcement level for dimension type partition key with OPTIONAL or REQUIRED enforcement
        final List<PartitionKey> partitionKeyWithDimensionAndRequiredEnforcement = Collections.singletonList(new PartitionKey()
            .withName(COMPOSITE_PARTITION_KEY_DIM_NAME)
            .withType(PartitionKeyType.DIMENSION)
            .withEnforcementInRecord(PartitionKeyEnforcementLevel.REQUIRED));
        Schema schema = new Schema();
        schema.setCompositePartitionKey(partitionKeyWithDimensionAndRequiredEnforcement);
        updateTableRequest.withSchema(schema);

        writeClient.updateTable(updateTableRequest);
        System.out.println("Table updated");
```

------
#### [  Java v2  ]

```
    public void updateTableCompositePartitionKeyEnforcement() {
        System.out.println("Updating table");
        // Can update enforcement level for dimension type partition key with OPTIONAL or REQUIRED enforcement
        final List<PartitionKey> partitionKeyWithDimensionAndRequiredEnforcement = Collections.singletonList(PartitionKey
            .builder()
            .name(COMPOSITE_PARTITION_KEY_DIM_NAME)
            .type(PartitionKeyType.DIMENSION)
            .enforcementInRecord(PartitionKeyEnforcementLevel.REQUIRED)
            .build());
        final Schema schema = Schema.builder()
                .compositePartitionKey(partitionKeyWithDimensionAndRequiredEnforcement).build();
        final UpdateTableRequest updateTableRequest = UpdateTableRequest.builder()
                .databaseName(DATABASE_NAME).tableName(TABLE_NAME).schema(schema).build();

        writeClient.updateTable(updateTableRequest);
        System.out.println("Table updated");
```

------
#### [  Go v1 ]

```
 // Update table partition key enforcement attribute
    updateTableInput := &timestreamwrite.UpdateTableInput{
         DatabaseName: aws.String(*databaseName),
         TableName:    aws.String(*tableName),
         // Can update enforcement level for dimension type partition key with OPTIONAL or REQUIRED enforcement
         Schema: &timestreamwrite.Schema{
             CompositePartitionKey: []*timestreamwrite.PartitionKey{
                 {
                         Name:                aws.String(CompositePartitionKeyDimName),
                         EnforcementInRecord: aws.String("REQUIRED"),
                         Type:                aws.String("DIMENSION"),
                 },
             }},
     }
     updateTableOutput, err := writeSvc.UpdateTable(updateTableInput)
         if err != nil {
             fmt.Println("Error:")
             fmt.Println(err)
         } else {
             fmt.Println("Update table is successful, below is the output:")
             fmt.Println(updateTableOutput)
         }
```

------
#### [  Go v2 ]

```
 // Update table partition key enforcement attribute
         updateTableInput := &timestreamwrite.UpdateTableInput{
             DatabaseName: aws.String(*databaseName),
             TableName:    aws.String(*tableName),
             // Can update enforcement level for dimension type partition key with OPTIONAL or REQUIRED enforcement
             Schema: &types.Schema{
                 CompositePartitionKey: []types.PartitionKey{
                     {
                         Name:                aws.String(CompositePartitionKeyDimName),
                         EnforcementInRecord: types.PartitionKeyEnforcementLevelRequired,
                         Type:                types.PartitionKeyTypeDimension,
                     },
                 }},
         }
         updateTableOutput, err := timestreamBuilder.WriteSvc.UpdateTable(context.TODO(), updateTableInput)
         if err != nil {
             fmt.Println("Error:")
             fmt.Println(err)
         } else {
             fmt.Println("Update table is successful, below is the output:")
             fmt.Println(updateTableOutput)
         }
```

------
#### [  Python  ]

```
    def update_table(self):
        print('Updating table')
        try:
            # Can update enforcement level for dimension type partition key with OPTIONAL or REQUIRED enforcement
            partition_key_with_dimension_and_required_enforcement = [
                {
                    'Type': 'DIMENSION', 
                    'Name': COMPOSITE_PARTITION_KEY_DIM_NAME, 
                    'EnforcementInRecord': 'REQUIRED'
                }
            ]
            schema = {
                'CompositePartitionKey': partition_key_with_dimension_and_required_enforcement
            }
            self.client.update_table(DatabaseName=DATABASE_NAME, TableName=TABLE_NAME,
                                     Schema=schema)
            print('Table updated.')
        except Exception as err:
            print('Update table failed:', err)
```

------

# Vantaggi delle chiavi di partizione definite dal cliente
<a name="customer-defined-partition-keys-advantages"></a>

**Prestazioni di query migliorate: le** chiavi di partizione definite dal cliente consentono di ottimizzare l'esecuzione delle query e migliorare le prestazioni complessive delle query. Definendo chiavi di partizione in linea con i modelli di query, è possibile ridurre al minimo la scansione dei dati e ottimizzare l'eliminazione dei dati, con conseguente riduzione della latenza delle query.

**Migliore prevedibilità delle prestazioni a lungo termine:** le chiavi di partizione definite dal cliente consentono ai clienti di distribuire i dati in modo uniforme tra le partizioni, migliorando l'efficienza della gestione dei dati. Ciò garantirà che le prestazioni delle query rimangano stabili man mano che i dati archiviati aumenteranno nel tempo.

# Limitazioni delle chiavi di partizione definite dal cliente
<a name="customer-defined-partition-keys-limitations"></a>

Come Timestream per LiveAnalytics l'utente, è importante tenere a mente le limitazioni relative alla chiave di partizione del cliente. Innanzitutto, richiede una buona comprensione del carico di lavoro e dei modelli di query. Ciò significa che è necessario avere un'idea chiara di quali dimensioni vengono utilizzate più frequentemente come condizioni di filtro principali nelle query e disporre di un'elevata cardinalità per utilizzare al meglio le chiavi di partizione.

In secondo luogo, le chiavi di partizione devono essere definite al momento della creazione della tabella e non possono essere aggiunte alle tabelle esistenti. Ciò significa che è necessario considerare attentamente la strategia di partizionamento prima di creare una tabella per assicurarsi che sia in linea con le esigenze aziendali.

Infine, è importante notare che una volta creata la tabella, non è possibile modificare la chiave di partizione in seguito. Ciò significa che è necessario testare e valutare a fondo la strategia di partizionamento prima di impegnarsi. Tenendo presenti queste limitazioni, la chiave di partizione definita dal cliente di Timestream può migliorare notevolmente le prestazioni delle query e la soddisfazione a lungo termine.

# Chiavi di partizione definite dal cliente e dimensioni a bassa cardinalità
<a name="customer-defined-partition-keys-low-cardinality-dimensions"></a>

Se si decide di utilizzare una chiave di partizione con una cardinalità molto bassa, ad esempio una regione o uno stato specifici, è importante notare che i dati di altre entità come`customerID`, e altre`ProductCategory`, potrebbero finire per essere distribuiti su troppe partizioni a volte con pochi o nessun dato presente. Ciò può comportare un'esecuzione inefficiente delle query e una riduzione delle prestazioni.

Per evitare ciò, ti consigliamo di scegliere dimensioni che non solo rientrino nella tua condizione di filtro chiave, ma abbiano una cardinalità più elevata. Ciò contribuirà a garantire che i dati siano distribuiti uniformemente tra le partizioni e a migliorare le prestazioni delle query.

# Creazione di chiavi di partizione per tabelle esistenti
<a name="customer-defined-partition-keys-creating"></a>

Se disponi già di tabelle in Timestream LiveAnalytics e desideri utilizzare chiavi di partizione definite dal cliente, dovrai migrare i dati in una nuova tabella con la definizione dello schema di partizionamento desiderata. Ciò può essere fatto utilizzando contemporaneamente l'esportazione in S3 e il caricamento in batch, il che comporta l'esportazione dei dati dalla tabella esistente in S3, la modifica dei dati per includere la chiave di partizione (se necessario) e l'aggiunta di intestazioni ai file CSV, quindi l'importazione dei dati in una nuova tabella con lo schema di partizionamento desiderato definito. Tieni presente che questo metodo può richiedere molto tempo e denaro, soprattutto per tabelle di grandi dimensioni.

In alternativa, è possibile utilizzare le query pianificate per migrare i dati in una nuova tabella con lo schema di partizionamento desiderato. Questo metodo prevede la creazione di una query pianificata che legge dalla tabella esistente e scrive nella nuova tabella. L'interrogazione pianificata può essere impostata per essere eseguita regolarmente fino alla migrazione di tutti i dati. Tieni presente che ti verranno addebitati i costi per la lettura e la scrittura dei dati durante il processo di migrazione.

# Timestream per la convalida LiveAnalytics dello schema con chiavi di partizione composite personalizzate
<a name="customer-defined-partition-keys-schema-validation"></a>

La convalida dello schema in Timestream LiveAnalytics aiuta a garantire che i dati inseriti nel database siano conformi allo schema specificato, riducendo al minimo gli errori di inserimento e migliorando la qualità dei dati. In particolare, la convalida dello schema è particolarmente utile quando si adotta una chiave di partizione definita dal cliente con l'obiettivo di ottimizzare le prestazioni delle query.

## Cos'è Timestream per la convalida dello schema con chiavi di partizione definite dal cliente? LiveAnalytics
<a name="customer-defined-partition-keys-schema-validation-what-is"></a>

Timestream per la convalida LiveAnalytics dello schema è una funzionalità che convalida i dati inseriti in un Timestream for table in base a uno schema predefinito. LiveAnalytics Questo schema definisce il modello di dati, inclusa la chiave di partizione, i tipi di dati e i vincoli per i record da inserire.

Quando si utilizza una chiave di partizione definita dal cliente, la convalida dello schema diventa ancora più cruciale. Le chiavi di partizione consentono di specificare una chiave di partizione, che determina il modo in cui i dati vengono archiviati in Timestream for. LiveAnalytics Convalidando i dati in entrata rispetto allo schema con una chiave di partizione personalizzata, è possibile imporre la coerenza dei dati, rilevare tempestivamente gli errori e migliorare la qualità complessiva dei dati archiviati in Timestream for. LiveAnalytics

## Come utilizzare Timestream per la convalida dello schema con chiavi di partizione composite personalizzate LiveAnalytics
<a name="customer-defined-partition-keys-schema-validation-using"></a>

Per utilizzare Timestream per la convalida LiveAnalytics dello schema con chiavi di partizione composite personalizzate, procedi nel seguente modo:

**Pensate a come saranno i vostri modelli di query:** per scegliere e definire correttamente lo schema per la LiveAnalytics tabella Timestream for, dovreste iniziare con i requisiti di query.

**Specificare chiavi di partizione composite personalizzate:** quando si crea la tabella, specificare una chiave di partizione personalizzata. Questa chiave determina l'attributo che verrà utilizzato per partizionare i dati della tabella. È possibile scegliere tra chiavi di dimensione e chiavi di misura per il partizionamento. Una chiave di dimensione partiziona i dati in base al nome di una dimensione, mentre una chiave di misura partiziona i dati in base al nome della misura.

**Imposta i livelli di applicazione:** per garantire il corretto partizionamento dei dati e i vantaggi che ne derivano, Amazon Timestream LiveAnalytics for ti consente di impostare i livelli di applicazione per ogni chiave di partizione del tuo schema. Il livello di applicazione determina se la dimensione della chiave di partizione è obbligatoria o facoltativa durante l'importazione dei record. È possibile scegliere tra due opzioni:`REQUIRED`, il che significa che la chiave di partizione deve essere presente nel record importato e`OPTIONAL`, il che significa che la chiave di partizione non deve essere presente. Si consiglia di utilizzare il livello di `REQUIRED` applicazione quando si utilizza una partizione definita dal cliente per garantire che i dati siano partizionati correttamente e ottenere tutti i vantaggi di questa funzionalità. Inoltre, è possibile modificare la configurazione del livello di applicazione in qualsiasi momento dopo la creazione dello schema per adattarla ai requisiti di inserimento dei dati.

**Inserisci dati:** quando si inseriscono dati nella LiveAnalytics tabella Timestream for, il processo di convalida dello schema verificherà i record rispetto allo schema definito con chiavi di partizione composite personalizzate. Se i record non aderiscono allo schema, Timestream for restituirà un errore di convalida. LiveAnalytics 

**Gestisci gli errori di convalida:** in caso di errori di convalida, Timestream for LiveAnalytics restituirà un `ValidationException` o un`RejectedRecordsException`, a seconda del tipo di errore. Assicurati di gestire queste eccezioni nell'applicazione e di adottare le misure appropriate, ad esempio correggere i record errati e riprovare l'inserimento.

**Aggiorna i livelli di applicazione:** se necessario, puoi aggiornare il livello di applicazione delle chiavi di partizione dopo la creazione della tabella utilizzando l'azione. `UpdateTable` Tuttavia, è importante notare che alcuni aspetti della configurazione delle chiavi di partizione, come il nome e il tipo, non possono essere modificati dopo la creazione della tabella. Se si modifica il livello di applicazione da `REQUIRED` a`OPTIONAL`, tutti i record verranno accettati indipendentemente dalla presenza dell'attributo selezionato come chiave di partizione definita dal cliente. Al contrario, se si modifica il livello di applicazione da `OPTIONAL` a`REQUIRED`, è possibile che si verifichino errori di scrittura 4xx per i record che non soddisfano questa condizione. Pertanto, è essenziale scegliere il livello di applicazione appropriato per il caso d'uso al momento della creazione della tabella, in base ai requisiti di partizionamento dei dati.

## Quando utilizzare Timestream per la convalida LiveAnalytics dello schema con chiavi di partizione composite personalizzate
<a name="customer-defined-partition-keys-schema-validation-when-to-use"></a>

Il timestream per la convalida LiveAnalytics dello schema con chiavi di partizione composite personalizzate deve essere utilizzato in scenari in cui la coerenza dei dati, la qualità e il partizionamento ottimizzato sono fondamentali. Applicando uno schema durante l'inserimento dei dati, è possibile prevenire errori e incongruenze che potrebbero portare a analisi errate o alla perdita di informazioni preziose.

## Interazione con i processi di caricamento in batch
<a name="customer-defined-partition-keys-schema-validation-when-to-use-batch-load"></a>

Quando si configura un processo di caricamento in batch per importare dati in una tabella con una chiave di partizione definita dal cliente, esistono alcuni scenari che potrebbero influire sul processo:

1. Se il livello di applicazione è impostato su`OPTIONAL`, verrà visualizzato un avviso sulla console durante il flusso di creazione se la chiave di partizione non viene mappata durante la configurazione del processo. Questo avviso non verrà visualizzato quando si utilizza l'API o la CLI.

1. Se il livello di applicazione è impostato su`REQUIRED`, la creazione del lavoro verrà rifiutata a meno che la chiave di partizione non sia mappata su una colonna di dati di origine.

1. Se il livello di applicazione viene impostato su `REQUIRED` dopo la creazione del processo, il processo continuerà a essere eseguito, ma tutti i record che non dispongono della mappatura corretta per la chiave di partizione verranno rifiutati con un errore 4xx.

## Interazione con una query pianificata
<a name="customer-defined-partition-keys-schema-validation-when-to-use-scheduled-query"></a>

Quando si configura un processo di interrogazione pianificato per il calcolo e l'archiviazione di aggregati, rollup e altre forme di dati preelaborati in una tabella con una chiave di partizione definita dal cliente, esistono alcuni scenari che potrebbero influire sul processo:

1. Se il livello di applicazione è impostato su`OPTIONAL`, verrà visualizzato un avviso se la chiave di partizione non viene mappata durante la configurazione del processo. Questo avviso non verrà visualizzato quando si utilizza l'API o la CLI.

1. Se il livello di applicazione è impostato su`REQUIRED`, la creazione del lavoro verrà rifiutata a meno che la chiave di partizione non sia mappata su una colonna di dati di origine.

1. Se il livello di applicazione viene impostato su `REQUIRED` dopo la creazione del lavoro e i risultati della query pianificata non contengono la dimensione della chiave di partizione, tutte le iterazioni successive del lavoro avranno esito negativo.

# Aggiunta di tag ed etichette alle risorse
<a name="tagging-keyspaces"></a>

 *Puoi etichettare Amazon Timestream LiveAnalytics per le risorse utilizzando i tag.* I tag consentono di classificare le risorse in diversi modi, ad esempio per scopo, proprietario, ambiente o altri criteri. I tag consentono di eseguire le seguenti operazioni: 
+  identificare rapidamente una risorsa in base ai tag a questa assegnati. 
+  Visualizza le AWS fatture suddivise per tag. 

 Il tagging è supportato da AWS servizi come Amazon Elastic Compute Cloud (Amazon EC2), Amazon Simple Storage Service (Amazon S3), Timestream for e molti altri. LiveAnalytics Un tagging efficiente può fornire informazioni dettagliate sui costi abilitando la creazione di report su servizi che recano tag specifici. 

 Per iniziare a utilizzare il tagging, procedi come segue: 

1.  [Comprendi](https://docs.aws.amazon.com/timestream/latest/developerguide/TaggingRestrictions.html) le restrizioni relative ai tag. 

1.  Crea tag utilizzando le operazioni di [tagging](https://docs.aws.amazon.com/timestream/latest/developerguide/Tagging.Operations.html). 

 Infine, è buona norma seguire strategie di tagging ottimali. Per informazioni, consulta [Strategie di tagging di AWS](https://d0.awsstatic.com/aws-answers/AWS_Tagging_Strategies.pdf). 

# Restrizioni di tagging
<a name="TaggingRestrictions"></a>

 Ogni tag consiste di una chiave e di un valore, entrambi personalizzabili. Le restrizioni si applicano come segue: 
+  Ogni Timestream per LiveAnalytics tabella può avere solo un tag con la stessa chiave. Se provi ad aggiungere un tag esistente, il valore del tag esistente viene aggiornato al nuovo valore. 
+ Un valore funge da descrittore all'interno di una categoria di tag. In Timestream LiveAnalytics il valore non può essere vuoto o nullo.
+  I valori e le chiavi dei tag rispettano la distinzione tra maiuscole e minuscole. 
+  La lunghezza massima della chiave è di 128 caratteri Unicode. 
+ La lunghezza massima del valore è di 256 caratteri Unicode. 
+  i caratteri consentiti sono lettere, spazi vuoti, numeri e i seguenti caratteri speciali: `+ - = . _ : /` 
+  Il numero massimo di tag per risorsa è 50.
+  I nomi e i valori dei tag assegnati da AWS vengono assegnati automaticamente al prefisso `aws:`, che tu non puoi assegnare. I nomi dei tag assegnati da AWS non vengono conteggiati per il limite dei 50 tag. I nomi dei tag assegnati dall'utente hanno il prefisso `user:` nel report di allocazione dei costi; 
+  Non puoi retrodatare l'applicazione di un tag. 

# Operazioni di etichettatura
<a name="Tagging.Operations"></a>

Puoi aggiungere, elencare, modificare o eliminare tag per database e tabelle utilizzando Amazon Timestream LiveAnalytics per console, linguaggio di interrogazione o AWS Command Line Interface ().AWS CLI

**Topics**
+ [Aggiungere tag a database e tabelle nuovi o esistenti utilizzando la console](#Tagging.Operations.using-console)

## Aggiungere tag a database e tabelle nuovi o esistenti utilizzando la console
<a name="Tagging.Operations.using-console"></a>

Puoi utilizzare Timestream per LiveAnalytics console per aggiungere tag a nuovi database, tabelle e query pianificate al momento della creazione. Puoi anche aggiungere, modificare o eliminare tag per tabelle esistenti.

**Per etichettare i database durante la loro creazione (console)**

1. [Apri la console Timestream in /timestream. https://console.aws.amazon.com](https://console.aws.amazon.com/timestream)

1. **Nel riquadro di navigazione, scegli **Database, quindi scegli Crea database**.**

1. Nella pagina **Crea database**, fornisci un nome per il database. Inserisci una chiave e un valore per il tag, quindi scegli **Aggiungi nuovo tag**.

1. Scegliere **Crea database**.

**Per etichettare le tabelle durante la creazione (console)**

1. [Apri la console Timestream in /timestream. https://console.aws.amazon.com](https://console.aws.amazon.com/timestream)

1. Nel pannello di navigazione, scegli **Tabelle**, quindi seleziona **Crea tabella**.

1. Nella pagina **Crea timestream per la tabella, fornisci un LiveAnalytics nome per la tabella**. Immettete una chiave e un valore per il tag e scegliete **Aggiungi nuovo** tag. 

1. Scegliere **Create table (Crea tabella)**.

**Per etichettare le query pianificate durante la creazione (console)**

1. [Apri la console Timestream in /timestream. https://console.aws.amazon.com](https://console.aws.amazon.com/timestream)

1. **Nel riquadro di navigazione, scegli Interrogazioni **pianificate, quindi scegli Crea interrogazione** pianificata.**

1. Nel **passaggio 3. Configura la pagina delle impostazioni della query**, scegli **Aggiungi nuovo tag**. Digitare una Key (Chiave) e un Value (Valore) per il tag. Scegli **Aggiungi nuovo tag** per aggiungere altri tag.

1. Scegli **Next (Successivo)**.

**Per assegnare tag alle risorse esistenti (console)**

1. [Apri la console Timestream in /timestream. https://console.aws.amazon.com](https://console.aws.amazon.com/timestream)

1. ****Nel riquadro di navigazione, scegli **Database**, Tabelle o Interrogazioni pianificate.****

1. Scegli un database o una tabella nell'elenco. Quindi scegli **Gestisci tag** per aggiungere, modificare o eliminare i tag.

Per informazioni sulla struttura dei tag, consulta [Restrizioni di tagging](TaggingRestrictions.md). 

# Sicurezza in Timestream per LiveAnalytics
<a name="security"></a>

La sicurezza del cloud AWS è la massima priorità. In qualità di AWS cliente, puoi beneficiare di un data center e di un'architettura di rete progettati per soddisfare i requisiti delle organizzazioni più sensibili alla sicurezza.

La sicurezza è una responsabilità condivisa tra AWS te e te. Il [modello di responsabilità condivisa](https://aws.amazon.com/compliance/shared-responsibility-model/) descrive questo come sicurezza *del* cloud e sicurezza *nel* cloud:
+ **Sicurezza del cloud**: AWS è responsabile della protezione dell'infrastruttura che gestisce AWS i servizi nel AWS cloud. AWS ti fornisce anche servizi che puoi utilizzare in modo sicuro. L'efficacia della nostra sicurezza è regolarmente testata e verificata da revisori di terze parti come parte dei [programmi di conformitàAWS](https://aws.amazon.com/compliance/programs/). Per ulteriori informazioni sui programmi di conformità applicabili a Timestream for LiveAnalytics, consulta [AWS Services in Scope by](https://aws.amazon.com/compliance/services-in-scope/) Compliance Program.
+ **Sicurezza nel cloud**: la tua responsabilità è determinata dal AWS servizio che utilizzi. L'utente è anche responsabile per altri fattori, tra cui la riservatezza dei dati, i requisiti dell'azienda, nonché le leggi e le normative applicabili. 

Questa documentazione ti aiuterà a capire come applicare il modello di responsabilità condivisa quando usi Timestream for. LiveAnalytics I seguenti argomenti mostrano come configurare Timestream per soddisfare gli obiettivi LiveAnalytics di sicurezza e conformità. Imparerai anche come utilizzare altri AWS servizi che possono aiutarti a monitorare e proteggere le risorse di Timestream. LiveAnalytics 

**Topics**
+ [Protezione dei dati in Timestream per LiveAnalytics](data-protection.md)
+ [Gestione delle identità e degli accessi per Amazon Timestream for LiveAnalytics](security-iam.md)
+ [Registrazione e monitoraggio in Timestream per LiveAnalytics](monitoring.md)
+ [Resilienza in Amazon Timestream Live Analytics](disaster-recovery-resiliency.md)
+ [Sicurezza dell'infrastruttura in Amazon Timestream Live Analytics](infrastructure-security.md)
+ [Analisi della configurazione e delle vulnerabilità in Timestream](ConfigAndVulnerability.md)
+ [Risposta agli incidenti in Timestream per LiveAnalytics](IncidentResponse.md)
+ [Endpoint VPC (AWS PrivateLink)](VPCEndpoints.md)
+ [Best practice di sicurezza per Amazon Timestream for LiveAnalytics](best-practices-security.md)

# Protezione dei dati in Timestream per LiveAnalytics
<a name="data-protection"></a>

Il modello di [responsabilità AWS condivisa modello](https://aws.amazon.com/compliance/shared-responsibility-model/) si applica alla protezione dei dati in Amazon Timestream Live Analytics. Come descritto in questo modello, AWS è responsabile della protezione dell'infrastruttura globale che gestisce tutti i. Cloud AWS L’utente è responsabile del controllo dei contenuti ospitati su questa infrastruttura. L’utente è inoltre responsabile della configurazione della protezione e delle attività di gestione per i Servizi AWS utilizzati. Per maggiori informazioni sulla privacy dei dati, consulta le [Domande frequenti sulla privacy dei dati](https://aws.amazon.com/compliance/data-privacy-faq/). Per informazioni sulla protezione dei dati in Europa, consulta il post del blog relativo al [AWS Modello di responsabilità condivisa e GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) nel *AWS Blog sulla sicurezza*.

Ai fini della protezione dei dati, consigliamo di proteggere Account AWS le credenziali e configurare i singoli utenti con AWS IAM Identity Center or AWS Identity and Access Management (IAM). In tal modo, a ogni utente verranno assegnate solo le autorizzazioni necessarie per svolgere i suoi compiti. Suggeriamo, inoltre, di proteggere i dati nei seguenti modi:
+ Utilizza l’autenticazione a più fattori (MFA) con ogni account.
+  SSL/TLS Da utilizzare per comunicare con AWS le risorse. È richiesto TLS 1.2 ed è consigliato TLS 1.3.
+ Configura l'API e la registrazione delle attività degli utenti con AWS CloudTrail. Per informazioni sull'utilizzo dei CloudTrail percorsi per acquisire AWS le attività, consulta [Lavorare con i CloudTrail percorsi](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html) nella *Guida per l'AWS CloudTrail utente*.
+ Utilizza soluzioni di AWS crittografia, insieme a tutti i controlli di sicurezza predefiniti all'interno Servizi AWS.
+ Utilizza i servizi di sicurezza gestiti avanzati, come Amazon Macie, che aiutano a individuare e proteggere i dati sensibili archiviati in Amazon S3.
+ Se hai bisogno di moduli crittografici convalidati FIPS 140-3 per accedere AWS tramite un'interfaccia a riga di comando o un'API, usa un endpoint FIPS. Per ulteriori informazioni sugli endpoint FIPS disponibili, consulta il [Federal Information Processing Standard (FIPS) 140-3](https://aws.amazon.com/compliance/fips/).

Ti consigliamo di non inserire mai informazioni riservate o sensibili, ad esempio gli indirizzi e-mail dei clienti, nei tag o nei campi di testo in formato libero, ad esempio nel campo **Nome**. Ciò include quando lavori con Timestream Live Analytics o altro Servizi AWS utilizzando la console, l'API o. AWS CLI AWS SDKs I dati inseriti nei tag o nei campi di testo in formato libero utilizzati per i nomi possono essere utilizzati per i la fatturazione o i log di diagnostica. Quando si fornisce un URL a un server esterno, suggeriamo vivamente di non includere informazioni sulle credenziali nell’URL per convalidare la richiesta al server.

Per informazioni più dettagliate su Timestream per argomenti di protezione LiveAnalytics dei dati come Encryption at Rest e Key Management, seleziona uno degli argomenti disponibili di seguito.

**Topics**
+ [Crittografia dei dati a riposo](EncryptionAtRest.md)
+ [Crittografia dei dati in transito](EncryptionInTransit.md)
+ [Gestione delle chiavi](KeyManagement.md)

# Crittografia dei dati a riposo
<a name="EncryptionAtRest"></a>

[Timestream for LiveAnalytics encryption at rest offre una maggiore sicurezza crittografando tutti i dati inattivi utilizzando le chiavi di crittografia archiviate in ().AWS Key Management ServiceAWS KMS](https://aws.amazon.com/kms/) Questa funzionalità consente di ridurre gli oneri operativi e la complessità associati alla protezione dei dati sensibili. La crittografia dei dati inattivi consente di creare applicazioni ad alto livello di sicurezza che rispettano rigorosi requisiti normativi e di conformità per la crittografia. 
+ La crittografia è attivata per impostazione predefinita su Timestream for LiveAnalytics database e non può essere disattivata. L'algoritmo di crittografia AES-256 standard del settore è l'algoritmo di crittografia predefinito utilizzato.
+ AWS KMS è necessario per la crittografia a riposo in Timestream per. LiveAnalytics
+ Non è possibile criptare solo un sottoinsieme di elementi in una tabella.
+  Non è quindi necessario modificare le applicazioni client di database per utilizzare la crittografia. 

 Se non fornisci una chiave, Timestream for LiveAnalytics crea e utilizza una AWS KMS chiave denominata `alias/aws/timestream` nel tuo account. 

Puoi utilizzare la tua chiave gestita dai clienti in KMS per crittografare il tuo Timestream per i dati. LiveAnalytics Per ulteriori informazioni sulle chiavi in Timestream per, consulta. LiveAnalytics [Gestione delle chiavi](KeyManagement.md) 

 Timestream for LiveAnalytics archivia i dati in due livelli di archiviazione, memory store e magnetic store. I dati dell'archivio di memoria vengono crittografati utilizzando una chiave di servizio Timestream. LiveAnalytics I dati dell'archivio magnetico vengono crittografati utilizzando la chiave AWS KMS. 

Il servizio Timestream Query richiede credenziali per accedere ai dati. Queste credenziali vengono crittografate utilizzando la chiave KMS.

**Nota**  
Timestream for LiveAnalytics non richiede AWS KMS ogni operazione di Decrypt. Invece, mantiene una cache locale di chiavi per 5 minuti con traffico attivo. Qualsiasi modifica delle autorizzazioni viene propagata tramite il Timestream per il LiveAnalytics sistema con un'eventuale coerenza entro un massimo di 5 minuti.

# Crittografia dei dati in transito
<a name="EncryptionInTransit"></a>

Tutti i dati di Timestream Live Analytics vengono crittografati in transito. Per impostazione predefinita, tutte le comunicazioni da e verso Timestream for LiveAnalytics sono protette utilizzando la crittografia Transport Layer Security (TLS). 

# Gestione delle chiavi
<a name="KeyManagement"></a>

 Puoi gestire le chiavi per Amazon Timestream Live Analytics utilizzando [AWS il Key Management Service AWS](https://docs.aws.amazon.com/kms/latest/developerguide/) (KMS). **Timestream Live Analytics richiede l'uso di KMS per crittografare i dati.** Sono disponibili le seguenti opzioni per la gestione delle chiavi, a seconda del livello di controllo richiesto sulle chiavi: 

**Risorse di database e tabelle**
+  *Chiave gestita da Timestream Live Analytics: se non fornisci una chiave, Timestream Live Analytics creerà una chiave utilizzando KMS*. `alias/aws/timestream` 
+  *Chiave gestita dal cliente: le chiavi gestite dai clienti* KMS sono supportate. Scegli questa opzione se hai bisogno di un maggiore controllo sulle autorizzazioni e sul ciclo di vita delle tue chiavi, inclusa la possibilità di farle ruotare automaticamente su base annuale.

**Risorsa di query pianificata**
+  *Chiave di proprietà di Timestream Live Analytics:* se non si fornisce una chiave, Timestream Live Analytics utilizzerà la propria chiave KMS per crittografare la risorsa Query, questa chiave è presente nell'account timestream. [Per maggiori dettagli, consulta le chiavi possedute AWS nella guida per sviluppatori KMS.](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)
+  *Chiave gestita dal cliente:* le chiavi gestite dal cliente KMS sono supportate. Scegli questa opzione se hai bisogno di un maggiore controllo sulle autorizzazioni e sul ciclo di vita delle tue chiavi, inclusa la possibilità di farle ruotare automaticamente su base annuale.

Le chiavi KMS in un archivio di chiavi esterno (XKS) non sono supportate.

# Gestione delle identità e degli accessi per Amazon Timestream for LiveAnalytics
<a name="security-iam"></a>

AWS Identity and Access Management (IAM) è un software Servizio AWS che aiuta un amministratore a controllare in modo sicuro l'accesso alle risorse. AWS Gli amministratori IAM controllano chi può essere *autenticato* (effettuato l'accesso) e *autorizzato (disporre delle autorizzazioni*) a utilizzare Timestream per le risorse. LiveAnalytics IAM è uno strumento Servizio AWS che puoi utilizzare senza costi aggiuntivi.

**Topics**
+ [Destinatari](#security_iam_audience)
+ [Autenticazione con identità](#security_iam_authentication)
+ [Gestione dell’accesso tramite policy](#security_iam_access-manage)
+ [Come funziona Amazon Timestream for con IAM LiveAnalytics](security_iam_service-with-iam.md)
+ [AWS politiche gestite per Amazon Timestream Live Analytics](security-iam-awsmanpol.md)
+ [Amazon Timestream LiveAnalytics per esempi di policy basate sull'identità](security_iam_id-based-policy-examples.md)
+ [Risoluzione dei problemi relativi all'identità e all'accesso di Amazon Timestream LiveAnalytics](security_iam_troubleshoot.md)

## Destinatari
<a name="security_iam_audience"></a>

Il modo in cui utilizzi AWS Identity and Access Management (IAM) varia in base al tuo ruolo:
+ **Utente del servizio**: richiedi le autorizzazioni all’amministratore se non riesci ad accedere alle funzionalità (consulta [Risoluzione dei problemi relativi all'identità e all'accesso di Amazon Timestream LiveAnalytics](security_iam_troubleshoot.md))
+ **Amministratore del servizio**: determina l’accesso degli utenti e invia le richieste di autorizzazione (consulta [Come funziona Amazon Timestream for con IAM LiveAnalytics](security_iam_service-with-iam.md))
+ **Amministratore IAM**: scrivi policy per gestire l’accesso (consulta [Amazon Timestream LiveAnalytics per esempi di policy basate sull'identità](security_iam_id-based-policy-examples.md))

## Autenticazione con identità
<a name="security_iam_authentication"></a>

L'autenticazione è il modo in cui accedi AWS utilizzando le tue credenziali di identità. Devi autenticarti come utente IAM o assumendo un ruolo IAM. Utente root dell'account AWS

Puoi accedere come identità federata utilizzando credenziali provenienti da una fonte di identità come AWS IAM Identity Center (IAM Identity Center), autenticazione Single Sign-On o credenziali. Google/Facebook Per ulteriori informazioni sull’accesso, consulta [Come accedere all’ Account AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html) nella *Guida per l’utente di Accedi ad AWS *.

Per l'accesso programmatico, AWS fornisce un SDK e una CLI per firmare crittograficamente le richieste. Per ulteriori informazioni, consulta [AWS Signature Version 4 per le richieste API](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) nella *Guida per l’utente di IAM*.

### Utenti e gruppi IAM
<a name="security_iam_authentication-iamuser"></a>

Un *[utente IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)* è una identità che dispone di autorizzazioni specifiche per una singola persona o applicazione. Ti consigliamo di utilizzare credenziali temporanee invece di utenti IAM con credenziali a lungo termine. *Per ulteriori informazioni, consulta [Richiedere agli utenti umani di utilizzare la federazione con un provider di identità per accedere AWS utilizzando credenziali temporanee nella Guida per l'](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)utente IAM.*

Un [https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) specifica una raccolta di utenti IAM e semplifica la gestione delle autorizzazioni per gestire gruppi di utenti di grandi dimensioni. Per ulteriori informazioni, consulta [Casi d’uso per utenti IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html) nella *Guida per l’utente di IAM*.

### Ruoli IAM
<a name="security_iam_authentication-iamrole"></a>

Un *[ruolo IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)* è un’identità con autorizzazioni specifiche che fornisce credenziali temporanee. Puoi assumere un ruolo [passando da un ruolo utente a un ruolo IAM (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html) o chiamando un'operazione AWS CLI o AWS API. Per ulteriori informazioni, consulta [Metodi per assumere un ruolo](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html) nella *Guida per l’utente di IAM*.

I ruoli IAM sono utili per l’accesso degli utenti federati, le autorizzazioni utente IAM temporanee, l’accesso multi-account, l’accesso multi-servizio e le applicazioni in esecuzione su Amazon EC2. Per maggiori informazioni, consultare [Accesso a risorse multi-account in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) nella *Guida per l’utente IAM*.

## Gestione dell’accesso tramite policy
<a name="security_iam_access-manage"></a>

Puoi controllare l'accesso AWS creando policy e associandole a AWS identità o risorse. Una policy definisce le autorizzazioni quando è associata a un'identità o a una risorsa. AWS valuta queste politiche quando un preside effettua una richiesta. La maggior parte delle politiche viene archiviata AWS come documenti JSON. Per maggiori informazioni sui documenti delle policy JSON, consulta [Panoramica delle policy JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json) nella *Guida per l’utente IAM*.

Utilizzando le policy, gli amministratori specificano chi ha accesso a cosa definendo quale **principale** può eseguire **azioni** su quali **risorse** e in quali **condizioni**.

Per impostazione predefinita, utenti e ruoli non dispongono di autorizzazioni. Un amministratore IAM crea le policy IAM e le aggiunge ai ruoli, che gli utenti possono quindi assumere. Le policy IAM definiscono le autorizzazioni indipendentemente dal metodo utilizzato per eseguirle.

### Policy basate sull’identità
<a name="security_iam_access-manage-id-based-policies"></a>

Le policy basate su identità sono documenti di policy di autorizzazione JSON che è possibile collegare a un’identità (utente, gruppo o ruolo). Tali policy controllano le operazioni autorizzate per l’identità, nonché le risorse e le condizioni in cui possono essere eseguite. Per informazioni su come creare una policy basata su identità, consultare [Definizione di autorizzazioni personalizzate IAM con policy gestite dal cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) nella *Guida per l’utente IAM*.

Le policy basate su identità possono essere *policy in linea* (con embedding direttamente in una singola identità) o *policy gestite* (policy autonome collegate a più identità). Per informazioni su come scegliere tra una policy gestita o una policy inline, consulta [Scegliere tra policy gestite e policy in linea](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html) nella *Guida per l’utente di IAM*.

### Policy basate sulle risorse
<a name="security_iam_access-manage-resource-based-policies"></a>

Le policy basate su risorse sono documenti di policy JSON che è possibile collegare a una risorsa. Gli esempi includono le *policy di trust dei ruoli* IAM e le *policy dei bucket* di Amazon S3. Nei servizi che supportano policy basate sulle risorse, gli amministratori dei servizi possono utilizzarli per controllare l’accesso a una risorsa specifica. In una policy basata sulle risorse è obbligatorio [specificare un’entità principale](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html).

Le policy basate sulle risorse sono policy inline che si trovano in tale servizio. Non è possibile utilizzare le policy AWS gestite di IAM in una policy basata sulle risorse.

### Elenchi di controllo degli accessi () ACLs
<a name="security_iam_access-manage-acl"></a>

Le liste di controllo degli accessi (ACLs) controllano quali principali (membri dell'account, utenti o ruoli) dispongono delle autorizzazioni per accedere a una risorsa. ACLs sono simili alle politiche basate sulle risorse, sebbene non utilizzino il formato del documento di policy JSON.

Amazon S3 e Amazon VPC sono esempi di servizi che supportano. AWS WAF ACLs Per ulteriori informazioni ACLs, consulta la [panoramica della lista di controllo degli accessi (ACL)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html) nella *Amazon Simple Storage Service Developer Guide*.

### Altri tipi di policy
<a name="security_iam_access-manage-other-policies"></a>

AWS supporta tipi di policy aggiuntivi che possono impostare le autorizzazioni massime concesse dai tipi di policy più comuni:
+ **Limiti delle autorizzazioni**: imposta il numero massimo di autorizzazioni che una policy basata su identità ha la possibilità di concedere a un’entità IAM. Per ulteriori informazioni, consulta [Limiti delle autorizzazioni per le entità IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) nella *Guida per l’utente di IAM*.
+ **Politiche di controllo del servizio (SCPs)**: specificano le autorizzazioni massime per un'organizzazione o un'unità organizzativa in. AWS Organizations Per ulteriori informazioni, consultare [Policy di controllo dei servizi](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) nella *Guida per l’utente di AWS Organizations *.
+ **Politiche di controllo delle risorse (RCPs)**: imposta le autorizzazioni massime disponibili per le risorse nei tuoi account. Per ulteriori informazioni, consulta [Politiche di controllo delle risorse (RCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) nella *Guida per l'AWS Organizations utente*.
+ **Policy di sessione**: policy avanzate passate come parametro quando si crea una sessione temporanea per un ruolo o un utente federato. Per maggiori informazioni, consultare [Policy di sessione](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) nella *Guida per l’utente IAM*.

### Più tipi di policy
<a name="security_iam_access-manage-multiple-policies"></a>

Quando a una richiesta si applicano più tipi di policy, le autorizzazioni risultanti sono più complicate da comprendere. Per scoprire come si AWS determina se consentire o meno una richiesta quando sono coinvolti più tipi di policy, consulta [Logica di valutazione delle policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html) nella *IAM User Guide*.

# Come funziona Amazon Timestream for con IAM LiveAnalytics
<a name="security_iam_service-with-iam"></a>

Prima di utilizzare IAM per gestire l'accesso a Timestream for LiveAnalytics, è necessario comprendere per quali funzionalità IAM sono disponibili per l'uso con Timestream. LiveAnalytics *Per avere una visione di alto livello di come Timestream for LiveAnalytics e altri AWS servizi funzionano con IAM, consulta [AWS Services That Work with IAM nella IAM User Guide](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html).*

**Topics**
+ [Timestream per politiche basate sull'identità LiveAnalytics](#security_iam_service-with-iam-id-based-policies)
+ [Timestream per politiche basate sulle risorse LiveAnalytics](#security_iam_service-with-iam-resource-based-policies)
+ [Autorizzazione basata su Timestream per i tag LiveAnalytics](#security_iam_service-with-iam-tags)
+ [Timestream per i ruoli IAM LiveAnalytics](#security_iam_service-with-iam-roles)

## Timestream per politiche basate sull'identità LiveAnalytics
<a name="security_iam_service-with-iam-id-based-policies"></a>

Con le policy basate sull’identità di IAM, è possibile specificare quali operazioni e risorse sono consentite o respinte, nonché le condizioni in base alle quali le operazioni sono consentite o respinte. Timestream for LiveAnalytics supporta azioni e risorse specifiche e chiavi di condizione. Per informazioni su tutti gli elementi utilizzati in una policy JSON, consulta [Documentazione di riferimento degli elementi delle policy JSON IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html) nella *Guida per l'utente IAM*.

### Azioni
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

Gli amministratori possono utilizzare le policy AWS JSON per specificare chi ha accesso a cosa. In altre parole, quale **entità principale** può eseguire **operazioni** su quali **risorse** e in quali **condizioni**.

L'elemento `Action` di una policy JSON descrive le operazioni che è possibile utilizzare per consentire o negare l'accesso in una policy. Includere le operazioni in una policy per concedere le autorizzazioni a eseguire l’operazione associata.

 È possibile specificare le seguenti azioni nell'elemento Action di una dichiarazione di policy IAM. Utilizza le policy per concedere le autorizzazioni per eseguire un'operazione in AWS. Quando si utilizza un'azione in una policy, in genere si consente o si nega l'accesso all'operazione API, al comando CLI o al comando SQL con lo stesso nome. 

 In alcuni casi, una singola azione controlla l'accesso a un'operazione API e al comando SQL. In alternativa, alcune operazioni richiedono operazioni differenti. 

Per un elenco dei Timestream supportati per LiveAnalytics `Action`'s, consulta la tabella seguente:

**Nota**  
Per tutti i database specifici`Actions`, è possibile specificare un ARN del database per limitare l'azione a un determinato database.


| Azioni | Descrizione | Livello di accesso | Tipi di risorsa (\$1obbligatorio) | 
| --- | --- | --- | --- | 
|  DescribeEndpoints  |  Restituisce l'endpoint Timestream a cui devono essere fatte le richieste successive.   |  Tutti  |  \$1  | 
|  Select  |  Esegui query su Timestream che selezionano i dati da una o più tabelle. [Consulta questa nota per una spiegazione dettagliata](#security_iam_service-with-iam-id-based-policies-actions.select-vs-selectvalues)  |  Lettura  |  tabella\$1  | 
|  CancelQuery  |  Annullare una richiesta.  |  Lettura  |  \$1  | 
|  ListTables  |  Ottieni l'elenco delle tabelle.  |  List  |  database\$1  | 
|  ListDatabases  |  Ottieni l'elenco dei database.  |  List  |  \$1  | 
|  ListMeasures  |  Ottieni l'elenco delle misure.  |  Lettura  |  tabella\$1  | 
|  DescribeTable  |  Ottieni la descrizione della tabella.  |  Lettura  |  tavolo\$1  | 
|  DescribeDatabase  |  Ottieni la descrizione del database.  |  Lettura  |  database\$1  | 
|  SelectValues  |  Esegui query che non richiedono la specificazione di una risorsa particolare. [Per una spiegazione dettagliata, consulta questa nota](#security_iam_service-with-iam-id-based-policies-actions.select-vs-selectvalues).  |  Lettura  |  \$1  | 
|  WriteRecords  |  Inserisci i dati in Timestream.  |  Scrittura  |  tabella\$1  | 
|  CreateTable  |  Creare una tabella.  |  Scrittura  |  database\$1  | 
|  CreateDatabase  |  Crea un database.  |  Scrittura  |  \$1  | 
|  DeleteDatabase  |  Eliminare un database.  |  Scrittura  |  \$1  | 
|  UpdateDatabase  |  Aggiornare un database.  |  Scrittura  |  \$1  | 
|  DeleteTable  |  Eliminare una tabella.  |  Scrittura  |  database\$1  | 
|  UpdateTable  |  Aggiorna una tabella.   |  Scrittura  |  database\$1  | 

#### SelectValues vs. seleziona:
<a name="security_iam_service-with-iam-id-based-policies-actions.select-vs-selectvalues"></a>

`SelectValues`è un file `Action` che viene utilizzato per le interrogazioni che *non* richiedono una risorsa. Un esempio di query che non richiede una risorsa è il seguente:

```
SELECT 1
```

Notate che questa query non si riferisce a un particolare flusso temporale per la LiveAnalytics risorsa. Consideriamo un altro esempio:

```
SELECT now()
```

Questa query restituisce il timestamp corrente utilizzando la `now()` funzione, ma non richiede la specificazione di una risorsa. `SelectValues`viene spesso utilizzato per i test, in modo che Timestream for LiveAnalytics possa eseguire query senza risorse. Ora, considera una domanda: `Select`

```
SELECT * FROM database.table
```

Questo tipo di query richiede una risorsa, in particolare un Timestream per LiveAnalytics `table`, in modo che i dati specificati possano essere recuperati dalla tabella.

### Resources
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

Gli amministratori possono utilizzare le policy AWS JSON per specificare chi ha accesso a cosa. In altre parole, quale **entità principale** può eseguire **operazioni** su quali **risorse** e in quali **condizioni**.

L’elemento JSON `Resource` della policy specifica l’oggetto o gli oggetti ai quali si applica l’operazione. Come best practice, specifica una risorsa utilizzando il suo [nome della risorsa Amazon (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html). Per le azioni che non supportano le autorizzazioni a livello di risorsa, si utilizza un carattere jolly (\$1) per indicare che l’istruzione si applica a tutte le risorse.

```
"Resource": "*"
```

In Timestream per LiveAnalytics database e tabelle può essere utilizzato nell'`Resource`elemento delle autorizzazioni IAM.

La risorsa Timestream for LiveAnalytics database ha il seguente ARN:

```
arn:${Partition}:timestream:${Region}:${Account}:database/${DatabaseName}
```

Il Timestream per la risorsa LiveAnalytics table ha il seguente ARN:

```
arn:${Partition}:timestream:${Region}:${Account}:database/${DatabaseName}/table/${TableName}
```

Per ulteriori informazioni sul formato di ARNs, consulta [Amazon Resource Names (ARNs) e AWS Service Namespaces](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).

Ad esempio, per specificare `database` lo spazio delle chiavi nella tua dichiarazione, usa il seguente ARN:

```
"Resource": "arn:aws:timestream:us-east-1:123456789012:database/mydatabase"
```

Per specificare tutti i database che appartengono a un account specifico, usa il carattere jolly (\$1):

```
"Resource": "arn:aws:timestream:us-east-1:123456789012:database/*"
```

Alcuni Timestream per LiveAnalytics le azioni, come quelle per la creazione di risorse, non possono essere eseguiti su una risorsa specifica. In questi casi, è necessario utilizzare il carattere jolly (\$1).

```
"Resource": "*"
```

### Chiavi di condizione
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

Timestream for LiveAnalytics non fornisce chiavi di condizione specifiche del servizio, ma supporta l'utilizzo di alcune chiavi di condizione globali. *Per visualizzare tutte le chiavi di condizione AWS globali, consulta [AWS Global Condition Context Keys](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) nella IAM User Guide.*

### Esempi
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>

Per visualizzare esempi di Timestream per le politiche LiveAnalytics basate sull'identità, consulta. [Amazon Timestream LiveAnalytics per esempi di policy basate sull'identità](security_iam_id-based-policy-examples.md)

## Timestream per politiche basate sulle risorse LiveAnalytics
<a name="security_iam_service-with-iam-resource-based-policies"></a>

Timestream for non supporta le politiche basate sulle risorse. LiveAnalytics Per visualizzare un esempio di una pagina di policy basata su risorse dettagliata, consulta [https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html).

## Autorizzazione basata su Timestream per i tag LiveAnalytics
<a name="security_iam_service-with-iam-tags"></a>

Puoi gestire l'accesso alle LiveAnalytics risorse del tuo Timestream utilizzando i tag. Per gestire l'accesso alle risorse in base ai tag, fornisci le informazioni sui tag nell'[elemento condition](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) di una policy utilizzando i `timestream:ResourceTag/key-name` tasti`aws:RequestTag/key-name`, o `aws:TagKeys` condition. Per ulteriori informazioni sull'assegnazione di tag a Timestream per LiveAnalytics le risorse, consulta. [Aggiunta di tag ed etichette alle risorse](tagging-keyspaces.md)

Per visualizzare policy basate sulle identità di esempio per limitare l'accesso a una risorsa basata su tag su tale risorsa, consulta [Timestream per l'accesso alle LiveAnalytics risorse in base ai tag](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-tags).

## Timestream per i ruoli IAM LiveAnalytics
<a name="security_iam_service-with-iam-roles"></a>

Un [ruolo IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) è un'entità all'interno del tuo AWS account che dispone di autorizzazioni specifiche.

### Utilizzo di credenziali temporanee con Timestream per LiveAnalytics
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

È possibile utilizzare credenziali temporanee per effettuare l'accesso con la federazione, assumere un ruolo IAM o un ruolo multi-account. È possibile ottenere credenziali di sicurezza temporanee chiamando operazioni AWS STS API come o. [AssumeRole[GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html)](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) 

### Ruoli collegati ai servizi
<a name="security_iam_service-with-iam-roles-service-linked"></a>

Timestream for LiveAnalytics non supporta i ruoli collegati ai servizi.

### Ruoli di servizio
<a name="security_iam_service-with-iam-roles-service"></a>

Timestream for LiveAnalytics non supporta i ruoli di servizio.

# AWS politiche gestite per Amazon Timestream Live Analytics
<a name="security-iam-awsmanpol"></a>







Una politica AWS gestita è una politica autonoma creata e amministrata da. AWS AWS le politiche gestite sono progettate per fornire autorizzazioni per molti casi d'uso comuni, in modo da poter iniziare ad assegnare autorizzazioni a utenti, gruppi e ruoli.

Tieni presente che le policy AWS gestite potrebbero non concedere le autorizzazioni con il privilegio minimo per i tuoi casi d'uso specifici, poiché sono disponibili per tutti i clienti. AWS Si consiglia pertanto di ridurre ulteriormente le autorizzazioni definendo [policy gestite dal cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies) specifiche per i propri casi d'uso.

Non è possibile modificare le autorizzazioni definite nelle politiche gestite. AWS Se AWS aggiorna le autorizzazioni definite in una politica AWS gestita, l'aggiornamento ha effetto su tutte le identità principali (utenti, gruppi e ruoli) a cui è associata la politica. AWS è più probabile che aggiorni una policy AWS gestita quando ne Servizio AWS viene lanciata una nuova o quando diventano disponibili nuove operazioni API per i servizi esistenti.

Per ulteriori informazioni, consultare [Policy gestite da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) nella *Guida per l'utente di IAM*.

**Topics**
+ [AmazonTimestreamInfluxDBFullAccesso](#security-iam-awsmanpol-AmazonTimestreamInfluxDBFullAccess)
+ [AmazonTimestreamReadOnlyAccess](#security-iam-awsmanpol-AmazonTimestreamReadOnlyAccess)
+ [AmazonTimestreamConsoleFullAccess](#security-iam-awsmanpol-AmazonTimestreamConsoleFullAccess)
+ [AmazonTimestreamFullAccess](#security-iam-awsmanpol-AmazonTimestreamFullAccess)
+ [Aggiornamenti delle policy](#security-iam-awsmanpol-updates)









## AWS politica gestita: AmazonTimestreamInflux DBFull accesso
<a name="security-iam-awsmanpol-AmazonTimestreamInfluxDBFullAccess"></a>

È possibile associare la policy `AmazonTimestreamInfluxDBFullAccess` a utenti, gruppi e ruoli. La policy di accesso per creare, aggiornare, eliminare ed elencare istanze Amazon Timestream InfluxDB.

**Dettagli dell’autorizzazione**  
Questa policy include la seguente autorizzazione:
+ `Amazon Timestream`— Fornisce l'accesso amministrativo completo per creare, aggiornare, eliminare ed elencare istanze Amazon Timestream InfluxDB e creare ed elencare gruppi di parametri. 

[Per rivedere questa politica in formato JSON, consulta Access. AmazonTimestreamInflux DBFull](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonTimestreamInfluxDBFullAccess.html)

## AWS politica gestita: AmazonTimestreamReadOnlyAccess
<a name="security-iam-awsmanpol-AmazonTimestreamReadOnlyAccess"></a>





È possibile associare la policy `AmazonTimestreamReadOnlyAccess` a utenti, gruppi e ruoli. La policy fornisce l'accesso in sola lettura ad Amazon Timestream.

**Dettagli dell’autorizzazione**  
Questa policy include la seguente autorizzazione:
+ `Amazon Timestream`— Fornisce accesso in sola lettura ad Amazon Timestream. Questa politica concede inoltre l'autorizzazione ad annullare qualsiasi query in esecuzione.

Per esaminare questa politica in formato JSON, consulta. [AmazonTimestreamReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonTimestreamReadOnlyAccess.html)

## AWS politica gestita: AmazonTimestreamConsoleFullAccess
<a name="security-iam-awsmanpol-AmazonTimestreamConsoleFullAccess"></a>





È possibile associare la policy `AmazonTimestreamConsoleFullAccess` a utenti, gruppi e ruoli.

La policy fornisce l'accesso completo alla gestione di Amazon Timestream utilizzando. Console di gestione AWS Questa politica concede anche le autorizzazioni per determinate AWS KMS operazioni e operazioni di gestione delle query salvate.

**Dettagli dell’autorizzazione**  
Questa policy include le seguenti autorizzazioni:
+ `Amazon Timestream`— Garantisce ai mandanti l'accesso completo ad Amazon Timestream.
+ `AWS KMS`— Consente ai mandanti di elencare gli alias e descrivere le chiavi.
+ `Amazon S3`— Consente ai responsabili di elencare tutti i bucket Amazon S3.
+ `Amazon SNS`— Consente ai responsabili di elencare gli argomenti di Amazon SNS.
+ `IAM`— Consente ai responsabili di elencare i ruoli IAM.
+ `DBQMS`: consente ai principali di accedere, creare, eliminare, descrivere e aggiornare le query. Il Database Query Metadata Service (dbqms) è un servizio solo interno. Fornisce le tue query recenti e salvate per l'editor di query su multipli Servizi AWS, incluso Amazon Timestream. Console di gestione AWS 
+ `Pricing`— Consente ai responsabili di accedere alla stima dei prezzi per la configurazione delle risorse InfluxDB durante la creazione.
+ `Marketplace`— Consente ai responsabili di accedere alle risorse del marketplace e di creare accordi per la creazione di InfluxDB Cluster with Read Replicas.

Per rivedere questa politica in formato JSON, vedere. [AmazonTimestreamConsoleFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonTimestreamConsoleFullAccess.html)

## AWS politica gestita: AmazonTimestreamFullAccess
<a name="security-iam-awsmanpol-AmazonTimestreamFullAccess"></a>





È possibile associare la policy `AmazonTimestreamFullAccess` a utenti, gruppi e ruoli.

La policy fornisce l'accesso completo ad Amazon Timestream. Questa politica concede anche le autorizzazioni per determinate operazioni. AWS KMS 

**Dettagli dell’autorizzazione**  
Questa policy include le seguenti autorizzazioni:
+ `Amazon Timestream`— Garantisce ai mandanti l'accesso completo ad Amazon Timestream.
+ `AWS KMS`— Consente ai mandanti di elencare gli alias e descrivere le chiavi.
+ `Amazon S3`— Consente ai responsabili di elencare tutti i bucket Amazon S3.

Per rivedere questa politica in formato JSON, consulta. [AmazonTimestreamFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonTimestreamFullAccess.html)

## Aggiornamenti di Timestream Live Analytics alle politiche gestite AWS
<a name="security-iam-awsmanpol-updates"></a>



Visualizza i dettagli sugli aggiornamenti alle politiche AWS gestite per Timestream Live Analytics da quando questo servizio ha iniziato a tenere traccia di queste modifiche. Per ricevere avvisi automatici sulle modifiche a questa pagina, iscriviti al feed RSS nella pagina della [cronologia dei documenti di Timestream Live Analytics](doc-history.md).




| Modifica | Descrizione | Data | 
| --- | --- | --- | 
|  [AmazonTimestreamConsoleFullAccess](#security-iam-awsmanpol-AmazonTimestreamConsoleFullAccess): aggiornamento a una policy esistente  |  Timestream for InfluxDB ha aggiunto l'ID del prodotto del marketplace Influx Enterprise alla politica `AmazonTimestreamInfluxDBFullAccess` gestita esistente per supportare l'abbonamento alle offerte del marketplace aziendale. Queste autorizzazioni sono limitate a prodotti AWS Marketplace specifici attraverso una condizione che limita l'accesso solo a determinati`ProductIds`. Vedi [AmazonTimestreamInfluxDBFullAccesso](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol-influxdb.html#iam.identitybasedpolicies.predefinedpolicies).  | 17 ottobre 2025 | 
|  [AmazonTimestreamConsoleFullAccess](#security-iam-awsmanpol-AmazonTimestreamConsoleFullAccess): aggiornamento di una policy esistente  |  Sono state aggiunte le autorizzazioni AWS Marketplace alla politica `AmazonTimestreamConsoleFullAccess` gestita esistente per accedere alle risorse del marketplace e creare accordi per la creazione di InfluxDB Cluster con Read Repliche. Timestream Live Analytics ha inoltre aggiornato questa politica gestita aggiungendo un campo. `Sid` L'aggiornamento della politica non influisce sull'utilizzo della politica `AmazonTimestreamConsoleFullAccess` gestita.  | 20 agosto 2025 | 
|  [AmazonTimestreamConsoleFullAccess](#security-iam-awsmanpol-AmazonTimestreamConsoleFullAccess): aggiornamento di una policy esistente  |  È stata aggiunta l'`pricing:GetProducts`azione alla politica `AmazonTimestreamConsoleFullAccess` gestita esistente per fornire stime dei prezzi per le configurazioni delle risorse InfluxDB durante la creazione. L'aggiornamento della politica non influisce sull'utilizzo della politica gestita. `AmazonTimestreamConsoleFullAccess`  | 10 giugno 2025 | 
|  [AmazonTimestreamReadOnlyAccess](#security-iam-awsmanpol-AmazonTimestreamReadOnlyAccess): aggiornamento di una policy esistente  |  L'`timestream:DescribeAccountSettings`azione è stata aggiunta alla politica `AmazonTimestreamReadOnlyAccess` gestita esistente. Questa azione viene utilizzata per descrivere Account AWS le impostazioni. Timestream Live Analytics ha inoltre aggiornato questa politica gestita aggiungendo un campo. `Sid` L'aggiornamento della politica non influisce sull'utilizzo della politica `AmazonTimestreamReadOnlyAccess` gestita.  | 03 giugno 2024 | 
|  [AmazonTimestreamReadOnlyAccess](#security-iam-awsmanpol-AmazonTimestreamReadOnlyAccess): aggiornamento di una policy esistente  |  Sono state aggiunte le `timestream:ListBatchLoadTasks` azioni `timestream:DescribeBatchLoadTask` e alla politica `AmazonTimestreamReadOnlyAccess` gestita esistente. Queste azioni vengono utilizzate per elencare e descrivere le attività di caricamento in batch. L'aggiornamento della politica non influisce sull'utilizzo della politica `AmazonTimestreamReadOnlyAccess` gestita.  | 24 febbraio 2023 | 
|  [AmazonTimestreamReadOnlyAccess](#security-iam-awsmanpol-AmazonTimestreamReadOnlyAccess): aggiornamento di una policy esistente  |  Sono state aggiunte le `timestream:ListScheduledQueries` azioni `timestream:DescribeScheduledQuery` e alla politica `AmazonTimestreamReadOnlyAccess` gestita esistente. Queste azioni vengono utilizzate per elencare e descrivere le interrogazioni pianificate esistenti. L'aggiornamento della politica non influisce sull'utilizzo della politica `AmazonTimestreamReadOnlyAccess` gestita.  | 29 novembre 2021 | 
|  [AmazonTimestreamConsoleFullAccess](#security-iam-awsmanpol-AmazonTimestreamConsoleFullAccess): aggiornamento di una policy esistente  |  L'`s3:ListAllMyBuckets`azione è stata aggiunta alla politica `AmazonTimestreamConsoleFullAccess` gestita esistente. Questa azione viene utilizzata quando si specifica un bucket Amazon S3 per Timestream per registrare gli errori di scrittura nell'archivio magnetico. L'aggiornamento della policy non influisce sull'utilizzo della policy gestita. `AmazonTimestreamConsoleFullAccess`  | 29 novembre 2021 | 
|  [AmazonTimestreamFullAccess](#security-iam-awsmanpol-AmazonTimestreamFullAccess): aggiornamento di una policy esistente  |  L'`s3:ListAllMyBuckets`azione è stata aggiunta alla politica `AmazonTimestreamFullAccess` gestita esistente. Questa azione viene utilizzata quando si specifica un bucket Amazon S3 per Timestream per registrare gli errori di scrittura nell'archivio magnetico. L'aggiornamento della policy non influisce sull'utilizzo della policy gestita. `AmazonTimestreamFullAccess`  | 29 novembre 2021 | 
|  [AmazonTimestreamConsoleFullAccess](#security-iam-awsmanpol-AmazonTimestreamConsoleFullAccess): aggiornamento di una policy esistente  |  Azioni ridondanti rimosse dalla politica `AmazonTimestreamConsoleFullAccess` gestita esistente. In precedenza, questa politica includeva un'azione ridondante. `dbqms:DescribeQueryHistory` La politica aggiornata rimuove l'azione ridondante. L'aggiornamento della politica non influisce sull'utilizzo della politica `AmazonTimestreamConsoleFullAccess` gestita.  | 23 Aprile 2021 | 
|  Timestream Live Analytics ha iniziato a tracciare le modifiche  |  Timestream Live Analytics ha iniziato a tenere traccia delle modifiche alle sue politiche gestite. AWS   | 21 aprile 2021 | 

# Amazon Timestream LiveAnalytics per esempi di policy basate sull'identità
<a name="security_iam_id-based-policy-examples"></a>

Per impostazione predefinita, gli utenti e i ruoli IAM non sono autorizzati a creare o modificare Timestream per le risorse. LiveAnalytics Inoltre, non possono eseguire attività utilizzando CQLSH o API. Console di gestione AWS AWS CLI AWS Un amministratore IAM deve creare policy IAM che concedono a utenti e ruoli l'autorizzazione per eseguire operazioni API specifiche sulle risorse specificate di cui hanno bisogno. L'amministratore deve quindi allegare queste policy a utenti o IAM che richiedono tali autorizzazioni.

Per informazioni su come creare una policy basata su identità IAM utilizzando questi documenti di policy JSON di esempio, consulta [Creazione di policy nella scheda JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor) nella *Guida per l'utente IAM*.

**Topics**
+ [Best practice delle policy](#security_iam_service-with-iam-policy-best-practices)
+ [Utilizzo del Timestream per console LiveAnalytics](#security_iam_id-based-policy-examples-console)
+ [Consentire agli utenti di visualizzare le loro autorizzazioni](#security_iam_id-based-policy-examples-view-own-permissions)
+ [Operazioni comuni in Timestream per LiveAnalytics](#security_iam_id-based-policy-examples-common-operations)
+ [Timestream per l'accesso alle LiveAnalytics risorse in base ai tag](#security_iam_id-based-policy-examples-tags)
+ [Query pianificate](#security_iam_id-based-policy-examples-sheduledqueries)

## Best practice delle policy
<a name="security_iam_service-with-iam-policy-best-practices"></a>

Le politiche basate sull'identità determinano se qualcuno può creare, accedere o eliminare Timestream per le risorse del tuo account. LiveAnalytics Queste azioni possono comportare costi aggiuntivi per l’ Account AWS. Quando si creano o modificano policy basate sull’identità, seguire queste linee guida e raccomandazioni:
+ **Inizia con le policy AWS gestite e passa alle autorizzazioni con privilegi minimi: per iniziare a concedere autorizzazioni** *a utenti e carichi di lavoro, utilizza le politiche gestite che concedono le autorizzazioni per molti casi d'uso comuni.AWS * Sono disponibili nel tuo. Account AWS Ti consigliamo di ridurre ulteriormente le autorizzazioni definendo politiche gestite dai AWS clienti specifiche per i tuoi casi d'uso. Per maggiori informazioni, consulta [Policy gestite da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) o [Policy gestite da AWS per le funzioni dei processi](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html) nella *Guida per l’utente di IAM*.
+ **Applicazione delle autorizzazioni con privilegio minimo** - Quando si impostano le autorizzazioni con le policy IAM, concedere solo le autorizzazioni richieste per eseguire un’attività. È possibile farlo definendo le azioni che possono essere intraprese su risorse specifiche in condizioni specifiche, note anche come *autorizzazioni con privilegio minimo*. Per maggiori informazioni sull’utilizzo di IAM per applicare le autorizzazioni, consulta [Policy e autorizzazioni in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) nella *Guida per l’utente di IAM*.
+ **Condizioni d’uso nelle policy IAM per limitare ulteriormente l’accesso** - Per limitare l’accesso ad azioni e risorse è possibile aggiungere una condizione alle policy. Ad esempio, è possibile scrivere una condizione di policy per specificare che tutte le richieste devono essere inviate utilizzando SSL. Puoi anche utilizzare le condizioni per concedere l'accesso alle azioni del servizio se vengono utilizzate tramite uno specifico Servizio AWS, ad esempio CloudFormation. Per maggiori informazioni, consultare la sezione [Elementi delle policy JSON di IAM: condizione](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) nella *Guida per l’utente di IAM*.
+ **Utilizzo dello strumento di analisi degli accessi IAM per convalidare le policy IAM e garantire autorizzazioni sicure e funzionali** - Lo strumento di analisi degli accessi IAM convalida le policy nuove ed esistenti in modo che aderiscano al linguaggio (JSON) della policy IAM e alle best practice di IAM. Lo strumento di analisi degli accessi IAM offre oltre 100 controlli delle policy e consigli utili per creare policy sicure e funzionali. Per maggiori informazioni, consultare [Convalida delle policy per il Sistema di analisi degli accessi IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html) nella *Guida per l’utente di IAM*.
+ **Richiedi l'autenticazione a più fattori (MFA**): se hai uno scenario che richiede utenti IAM o un utente root nel Account AWS tuo, attiva l'MFA per una maggiore sicurezza. Per richiedere la MFA quando vengono chiamate le operazioni API, aggiungere le condizioni MFA alle policy. Per maggiori informazioni, consultare [Protezione dell’accesso API con MFA](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html) nella *Guida per l’utente di IAM*.

Per maggiori informazioni sulle best practice in IAM, consulta [Best practice di sicurezza in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) nella *Guida per l’utente di IAM*.

## Utilizzo del Timestream per console LiveAnalytics
<a name="security_iam_id-based-policy-examples-console"></a>

Timestream for non LiveAnalytics richiede autorizzazioni specifiche per accedere ad Amazon Timestream per console. LiveAnalytics Hai bisogno almeno delle autorizzazioni di sola lettura per elencare e visualizzare i dettagli sul Timestream per le risorse del tuo account. LiveAnalytics AWS Se crei una policy basata su identità più restrittiva rispetto alle autorizzazioni minime richieste, la console non funzionerà nel modo previsto per le entità (utenti e ruoli IAM) associate a tale policy.

## Consentire agli utenti di visualizzare le loro autorizzazioni
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

Questo esempio mostra in che modo è possibile creare una policy che consente agli utenti IAM di visualizzare le policy inline e gestite che sono collegate alla relativa identità utente. Questa politica include le autorizzazioni per completare questa azione sulla console o utilizzando l'API o a livello di codice. AWS CLI AWS 

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

## Operazioni comuni in Timestream per LiveAnalytics
<a name="security_iam_id-based-policy-examples-common-operations"></a>

Di seguito sono riportati alcuni esempi di policy IAM che consentono operazioni comuni in Timestream for service. LiveAnalytics

**Topics**
+ [Consentire tutte le operazioni](#security_iam_id-based-policy-examples-common-operations.all)
+ [Consentire le operazioni SELECT](#security_iam_id-based-policy-examples-common-operations.select)
+ [Consentire le operazioni SELECT su più risorse](#security_iam_id-based-policy-examples-common-operations.select-multiple-resources)
+ [Consentire le operazioni sui metadati](#security_iam_id-based-policy-examples-common-operations.metadata)
+ [Consentire le operazioni INSERT](#security_iam_id-based-policy-examples-common-operations.insert)
+ [Consentire le operazioni CRUD](#security_iam_id-based-policy-examples-common-operations.crud)
+ [Annulla le interrogazioni e seleziona i dati senza specificare le risorse](#security_iam_id-based-policy-examples-common-operations.cancel-selectvalues)
+ [Creare, descrivere, eliminare e descrivere un database](#security_iam_id-based-policy-examples-common-operations.cddd)
+ [Limita i database elencati per tag `{"Owner": "${username}"}`](#security_iam_id-based-policy-examples-common-operations.list-by-tag)
+ [Elenca tutte le tabelle in un database](#security_iam_id-based-policy-examples-common-operations.list-all-tables)
+ [Crea, descrivi, elimina, aggiorna e seleziona in una tabella](#security_iam_id-based-policy-examples-common-operations.cddus-table)
+ [Limita una query per tabella](#security_iam_id-based-policy-examples-common-operations.limit-query-table)

### Consentire tutte le operazioni
<a name="security_iam_id-based-policy-examples-common-operations.all"></a>

Di seguito è riportato un esempio di politica che consente tutte le operazioni in Timestream per. LiveAnalytics

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "timestream:*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

### Consentire le operazioni SELECT
<a name="security_iam_id-based-policy-examples-common-operations.select"></a>

La seguente politica di esempio consente interrogazioni `SELECT` in stile -style su una risorsa specifica.

**Nota**  
`<account_ID>`Sostituiscilo con l'ID del tuo account Amazon.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "timestream:Select",
                "timestream:DescribeTable",
                "timestream:ListMeasures"
            ],
            "Resource": "arn:aws:timestream:us-east-1:111122223333:database/sampleDB/table/DevOps"
        },
        {
            "Effect": "Allow",
            "Action": [
                "timestream:DescribeEndpoints",
                "timestream:SelectValues",
                "timestream:CancelQuery"
            ],
            "Resource": "*"
        }
    ]
}
```

------

### Consentire le operazioni SELECT su più risorse
<a name="security_iam_id-based-policy-examples-common-operations.select-multiple-resources"></a>

La seguente politica di esempio consente interrogazioni `SELECT` in stile C su più risorse. 

**Nota**  
`<account_ID>`Sostituiscilo con l'ID del tuo account Amazon.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "timestream:Select",
                "timestream:DescribeTable",
                "timestream:ListMeasures"
            ],
            "Resource": [
                "arn:aws:timestream:us-east-1:111122223333:database/sampleDB/table/DevOps",
                "arn:aws:timestream:us-east-1:111122223333:database/sampleDB/table/DevOps1",
                "arn:aws:timestream:us-east-1:111122223333:database/sampleDB/table/DevOps2"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "timestream:DescribeEndpoints",
                "timestream:SelectValues",
                "timestream:CancelQuery"
            ],
            "Resource": "*"
        }
    ]
}
```

------

### Consentire le operazioni sui metadati
<a name="security_iam_id-based-policy-examples-common-operations.metadata"></a>

La seguente politica di esempio consente all'utente di eseguire query sui metadati, ma non consente all'utente di eseguire operazioni di lettura o scrittura di dati effettivi in Timestream for. LiveAnalytics

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "timestream:DescribeEndpoints",
                "timestream:DescribeTable",
                "timestream:ListMeasures",
                "timestream:SelectValues",
                "timestream:ListTables",
                "timestream:ListDatabases",
                "timestream:CancelQuery"
            ],
            "Resource": "*"
        }
    ]
}
```

------

### Consentire le operazioni INSERT
<a name="security_iam_id-based-policy-examples-common-operations.insert"></a>

La seguente politica di esempio consente a un utente di eseguire un'`INSERT`operazione sull'account `database/sampleDB/table/DevOps` in`<account_id>`.

**Nota**  
`<account_ID>`Sostituiscilo con l'ID del tuo account Amazon.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "timestream:WriteRecords"
            ],
            "Resource": [
                "arn:aws:timestream:us-east-1:111122223333:database/sampleDB/table/DevOps"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "timestream:DescribeEndpoints"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

------

### Consentire le operazioni CRUD
<a name="security_iam_id-based-policy-examples-common-operations.crud"></a>

La seguente politica di esempio consente a un utente di eseguire operazioni CRUD in Timestream for. LiveAnalytics

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "timestream:DescribeEndpoints",
                "timestream:CreateTable",
                "timestream:DescribeTable",
                "timestream:CreateDatabase",
                "timestream:DescribeDatabase",
                "timestream:ListTables",
                "timestream:ListDatabases",
                "timestream:DeleteTable",
                "timestream:DeleteDatabase",
                "timestream:UpdateTable",
                "timestream:UpdateDatabase"
            ],
            "Resource": "*"
        }
    ]
}
```

------

### Annulla le interrogazioni e seleziona i dati senza specificare le risorse
<a name="security_iam_id-based-policy-examples-common-operations.cancel-selectvalues"></a>

La seguente politica di esempio consente a un utente di annullare le query ed eseguire `Select` query sui dati che non richiedono la specificazione delle risorse:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "timestream:SelectValues",
                "timestream:CancelQuery"
            ],
            "Resource": "*"
        }
    ]
}
```

------

### Creare, descrivere, eliminare e descrivere un database
<a name="security_iam_id-based-policy-examples-common-operations.cddd"></a>

La seguente politica di esempio consente a un utente di creare, descrivere, eliminare e descrivere un database`sampleDB`:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "timestream:CreateDatabase",
                "timestream:DescribeDatabase",
                "timestream:DeleteDatabase",
                "timestream:UpdateDatabase"
            ],
            "Resource": "arn:aws:timestream:us-east-1:111122223333:database/sampleDB"
        }
    ]
}
```

------

### Limita i database elencati per tag `{"Owner": "${username}"}`
<a name="security_iam_id-based-policy-examples-common-operations.list-by-tag"></a>

La seguente politica di esempio consente a un utente di elencare tutti i database etichettati con una coppia chiave-valore`{"Owner": "${username}"}`:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "timestream:ListDatabases"
            ],
            "Resource": "arn:aws:timestream:us-east-1:111122223333:database/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/Owner": "${aws:username}"
                }
            }
        }
    ]
}
```

------

### Elenca tutte le tabelle in un database
<a name="security_iam_id-based-policy-examples-common-operations.list-all-tables"></a>

La seguente politica di esempio per elencare tutte le tabelle nel database`sampleDB`:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "timestream:ListTables"
            ],
            "Resource": "arn:aws:timestream:us-east-1:111122223333:database/sampleDB/"
        }
    ]
}
```

------

### Crea, descrivi, elimina, aggiorna e seleziona in una tabella
<a name="security_iam_id-based-policy-examples-common-operations.cddus-table"></a>

La seguente politica di esempio consente a un utente di creare tabelle, descrivere tabelle, eliminare tabelle, aggiornare tabelle ed eseguire `Select` query sulla tabella `DevOps` nel database`sampleDB`:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "timestream:CreateTable",
                "timestream:DescribeTable",
                "timestream:DeleteTable",
                "timestream:UpdateTable",
                "timestream:Select"
            ],
            "Resource": "arn:aws:timestream:us-east-1:111122223333:database/sampleDB/table/DevOps"
        }
    ]
}
```

------

### Limita una query per tabella
<a name="security_iam_id-based-policy-examples-common-operations.limit-query-table"></a>

La seguente politica di esempio consente a un utente di interrogare tutte le tabelle tranne quelle `DevOps` del database`sampleDB`:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "timestream:Select"
            ],
            "Resource": "arn:aws:timestream:us-east-1:111122223333:database/sampleDB/table/*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "timestream:Select"
            ],
            "Resource": "arn:aws:timestream:us-east-1:111122223333:database/sampleDB/table/DevOps"
        }
    ]
}
```

------

## Timestream per l'accesso alle LiveAnalytics risorse in base ai tag
<a name="security_iam_id-based-policy-examples-tags"></a>

Puoi utilizzare le condizioni della tua politica basata sull'identità per controllare l'accesso a Timestream per le risorse basate sui tag. LiveAnalytics Questa sezione fornisce alcuni esempi. 

L'esempio seguente mostra come è possibile creare una politica che conceda a un utente le autorizzazioni per visualizzare una tabella se la tabella `Owner` contiene il valore del nome utente di quell'utente.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ReadOnlyAccessTaggedTables",
            "Effect": "Allow",
            "Action": "timestream:Select",
            "Resource": "arn:aws:timestream:us-east-2:111122223333:database/mydatabase/table/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/Owner": "${aws:username}"
                }
            }
        }
    ]
}
```

------

Puoi allegare questa policy agli utenti IAM nel tuo account. Se un utente denominato `richard-roe` tenta di visualizzare un Timestream per la LiveAnalytics tabella, la tabella deve essere contrassegnata con o. `Owner=richard-roe` `owner=richard-roe` In caso contrario, gli viene negato l'accesso. La chiave di tag di condizione `Owner` corrisponde a `Owner` e `owner` perché i nomi delle chiavi di condizione non effettuano la distinzione tra maiuscole e minuscole. Per ulteriori informazioni, consulta la sezione [Elementi delle policy JSON di IAM: condizione](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) nella *Guida per l'utente di IAM*.

La seguente politica concede a un utente le autorizzazioni per creare tabelle con tag se il tag passato nella richiesta ha una chiave `Owner` e un valore: `username`

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CreateTagTableUser",
            "Effect": "Allow",
            "Action": [
                "timestream:CreateTable",
                "timestream:TagResource"
            ],
            "Resource": "arn:aws:timestream:us-east-2:111122223333:database/mydatabase/table/*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:RequestTag/Owner": "${aws:username}"
                }
            }
        }
    ]
}
```

------

La politica seguente consente l'uso dell'`DescribeDatabase`API su qualsiasi database con il `env` tag impostato su uno dei seguenti o`dev`: `test`

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowDescribe",
            "Effect": "Allow",
            "Action": [
                "timestream:DescribeEndpoints",
                "timestream:DescribeDatabase"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowTagAccessForDevResources",
            "Effect": "Allow",
            "Action": [
                "timestream:TagResource"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/env": [
                        "test",
                        "dev"
                    ]
                }
            }
        }
    ]
}
```

------

Questa politica utilizza una `Condition` chiave per consentire l'aggiunta o l'aggiunta di un tag con la chiave `env` e il valore di `test` o `dev` a una risorsa. `qa`

## Query pianificate
<a name="security_iam_id-based-policy-examples-sheduledqueries"></a>

### Elenca, elimina, aggiorna, esegui ScheduledQuery
<a name="security_iam_id-based-policy-examples-sheduledqueries-alloperations"></a>

La seguente politica di esempio consente a un utente di elencare, eliminare, aggiornare ed eseguire query pianificate.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "timestream:DeleteScheduledQuery",
                "timestream:ExecuteScheduledQuery",
                "timestream:UpdateScheduledQuery",
                "timestream:ListScheduledQueries",
                "timestream:DescribeEndpoints"
            ],
            "Resource": "*"
        }
    ]
}
```

------

### CreateScheduledQuery utilizzando una chiave KMS gestita dal cliente
<a name="security_iam_id-based-policy-examples-sheduledqueries-create"></a>

La seguente politica di esempio consente a un utente di creare una query pianificata crittografata utilizzando una chiave KMS gestita dal cliente;. *<keyid for ScheduledQuery>*

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/ScheduledQueryExecutionRole"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "timestream:CreateScheduledQuery",
                "timestream:DescribeEndpoints"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "kms:DescribeKey",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-west-2:123456789012:key/<keyid for ScheduledQuery>",
            "Effect": "Allow"
        }
    ]
}
```

------

### DescribeScheduledQuery utilizzando una chiave KMS gestita dal cliente
<a name="security_iam_id-based-policy-examples-sheduledqueries-describe"></a>

La seguente politica di esempio consente a un utente di descrivere una query pianificata creata utilizzando una chiave KMS gestita dal cliente;. *<keyid for ScheduledQuery>*

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "timestream:DescribeScheduledQuery",
                "timestream:DescribeEndpoints"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-west-2:123456789012:key/<keyid for ScheduledQuery>",
            "Effect": "Allow"
        }
    ]
}
```

------

### Autorizzazioni per i ruoli di esecuzione (utilizzo di una chiave KMS gestita dal cliente per le query pianificate e SSE-KMS per le segnalazioni di errori)
<a name="security_iam_id-based-policy-examples-sheduledqueries-execrole"></a>

Allega la seguente policy di esempio al ruolo IAM specificato nel `ScheduledQueryExecutionRoleArn` parametro, dell'`CreateScheduledQuery`API che utilizza la chiave KMS gestita dal cliente per la crittografia delle query pianificate e la crittografia delle segnalazioni di errori. `SSE-KMS` 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-west-2:123456789012:key/<keyid for ScheduledQuery>",
            "Effect": "Allow"
        },
        {
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-west-2:123456789012:key/<keyid for database-1>",
                "arn:aws:kms:us-west-2:123456789012:key/<keyid for database-n>",
                "arn:aws:kms:us-west-2:123456789012:key/<keyid for ScheduledQuery>"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "sns:Publish"
            ],
            "Resource": [
                "arn:aws:sns:us-west-2:123456789012:scheduled-query-notification-topic-*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "timestream:Select",
                "timestream:SelectValues",
                "timestream:WriteRecords"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:PutObject",
                "s3:GetBucketAcl"
            ],
            "Resource": [
                "arn:aws:s3:::scheduled-query-error-bucket",
                "arn:aws:s3:::scheduled-query-error-bucket/*"
            ],
            "Effect": "Allow"
        }
    ]
}
```

------

### Ruolo di esecuzione, relazione di fiducia
<a name="security_iam_id-based-policy-examples-sheduledqueries-exectrust"></a>

Di seguito è riportata la relazione di fiducia per il ruolo IAM specificato nel `ScheduledQueryExecutionRoleArn` parametro dell'`CreateScheduledQuery`API.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "timestream.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

### Consenti l'accesso a tutte le query pianificate create all'interno di un account
<a name="security_iam_id-based-policy-examples-sheduledqueries-accountid"></a>

Allega la seguente policy di esempio al ruolo IAM specificato nel `ScheduledQueryExecutionRoleArn` parametro dell'`CreateScheduledQuery`API per consentire l'accesso a tutte le query pianificate create all'interno di un account. *Account\$1ID*

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "timestream.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "Account_ID"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:timestream:us-west-2:111122223333:scheduled-query/*"
                }
            }
        }
    ]
}
```

------

### Consenti l'accesso a tutte le query pianificate con un nome specifico
<a name="security_iam_id-based-policy-examples-sheduledqueries-queryname"></a>

Allega la seguente policy di esempio al ruolo IAM specificato nel `ScheduledQueryExecutionRoleArn` parametro dell'`CreateScheduledQuery`API per consentire l'accesso a tutte le query pianificate con un nome che inizia con*Scheduled\$1Query\$1Name*, all'interno dell'account. *Account\$1ID*

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "timestream.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "Account_ID"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:timestream:us-west-2:111122223333:scheduled-query/Scheduled_Query_Name*"
                }
            }
        }
    ]
}
```

------

# Risoluzione dei problemi relativi all'identità e all'accesso di Amazon Timestream LiveAnalytics
<a name="security_iam_troubleshoot"></a>

Utilizza le seguenti informazioni per aiutarti a diagnosticare e risolvere i problemi più comuni che potresti riscontrare quando lavori con Timestream for e IAM. LiveAnalytics 

**Topics**
+ [Non sono autorizzato a eseguire un'azione in Timestream per LiveAnalytics](#security_iam_troubleshoot-no-permissions)
+ [Non sono autorizzato a eseguire iam: PassRole](#security_iam_troubleshoot-passrole)
+ [Desidero consentire a persone esterne al mio AWS account di accedere al mio Timestream per ottenere risorse LiveAnalytics](#security_iam_troubleshoot-cross-account-access)

## Non sono autorizzato a eseguire un'azione in Timestream per LiveAnalytics
<a name="security_iam_troubleshoot-no-permissions"></a>

Se ti Console di gestione AWS dice che non sei autorizzato a eseguire un'azione, devi contattare l'amministratore per ricevere assistenza. L’amministratore è colui che ti ha fornito le credenziali di accesso.

Il seguente errore di esempio si verifica quando l'utente `mateojackson` IAM tenta di utilizzare la console per visualizzare i dettagli su a *table* ma non dispone `timestream:Select` delle autorizzazioni per la tabella.

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: timestream:Select on resource: mytable
```

In questo caso, Mateo chiede al suo amministratore di aggiornare le policy per poter accedere alla risorsa `mytable` mediante l'operazione `timestream:Select`.

## Non sono autorizzato a eseguire iam: PassRole
<a name="security_iam_troubleshoot-passrole"></a>

Se ricevi un messaggio di errore indicante che non sei autorizzato a eseguire l'`iam:PassRole`azione, le tue politiche devono essere aggiornate per consentirti di assegnare un ruolo a Timestream for. LiveAnalytics

Alcuni Servizi AWS consentono di trasferire un ruolo esistente a quel servizio invece di creare un nuovo ruolo di servizio o un ruolo collegato al servizio. Per eseguire questa operazione, è necessario disporre delle autorizzazioni per trasmettere il ruolo al servizio.

Il seguente errore di esempio si verifica quando un utente IAM denominato `marymajor` tenta di utilizzare la console per eseguire un'azione in Timestream for. LiveAnalytics Tuttavia, l’azione richiede che il servizio disponga delle autorizzazioni concesse da un ruolo di servizio. Mary non dispone delle autorizzazioni per trasmettere il ruolo al servizio.

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

In questo caso, le policy di Mary devono essere aggiornate per poter eseguire l’operazione `iam:PassRole`.

Se hai bisogno di aiuto, contatta il tuo AWS amministratore. L’amministratore è la persona che ti ha fornito le credenziali di accesso.

## Desidero consentire a persone esterne al mio AWS account di accedere al mio Timestream per ottenere risorse LiveAnalytics
<a name="security_iam_troubleshoot-cross-account-access"></a>

È possibile creare un ruolo con il quale utenti in altri account o persone esterne all’organizzazione possono accedere alle tue risorse. È possibile specificare chi è attendibile per l’assunzione del ruolo. Per i servizi che supportano politiche basate sulle risorse o liste di controllo degli accessi (ACLs), puoi utilizzare tali politiche per consentire alle persone di accedere alle tue risorse.

Per maggiori informazioni, consulta gli argomenti seguenti:
+ Per sapere se Timestream for LiveAnalytics supporta queste funzionalità, consulta. [Come funziona Amazon Timestream for con IAM LiveAnalytics](security_iam_service-with-iam.md)
+ Per scoprire come fornire l'accesso alle risorse di tua proprietà, consulta [Fornire l'accesso a un utente IAM di un altro Account AWS utente di tua proprietà nella](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html) *IAM User* Guide. Account AWS 
+ Per scoprire come fornire l'accesso alle tue risorse a terze parti Account AWS, consulta [Fornire l'accesso a soggetti Account AWS di proprietà di terze parti](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html) nella *Guida per l'utente IAM*.
+ Per informazioni su come fornire l'accesso tramite la federazione delle identità, consulta [Fornire l'accesso a utenti autenticati esternamente (federazione delle identità)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html) nella *Guida per l'utente IAM*.
+ Per informazioni sulle differenze di utilizzo tra ruoli e policy basate su risorse per l’accesso multi-account, consulta [Accesso a risorse multi-account in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) nella *Guida per l’utente di IAM*.

# Registrazione e monitoraggio in Timestream per LiveAnalytics
<a name="monitoring"></a>

Il monitoraggio è una parte importante del mantenimento dell'affidabilità, della disponibilità e delle prestazioni di Timestream for LiveAnalytics e delle vostre soluzioni. AWS È necessario raccogliere i dati di monitoraggio da tutte le parti della AWS soluzione in modo da poter eseguire più facilmente il debug di un errore multipunto, se si verifica. Tuttavia, prima di iniziare a monitorare Timestream for LiveAnalytics, è necessario creare un piano di monitoraggio che includa le risposte alle seguenti domande:
+ Quali sono gli obiettivi del monitoraggio?
+ Di quali risorse si intende eseguire il monitoraggio?
+ Con quale frequenza sarà eseguito il monitoraggio di queste risorse?
+ Quali strumenti di monitoraggio verranno utilizzati?
+ Chi eseguirà i processi di monitoraggio?
+ Chi deve ricevere una notifica quando si verifica un problema?

Il passaggio successivo consiste nello stabilire una linea di base per il normale Timestream per LiveAnalytics le prestazioni nell'ambiente in uso, misurando le prestazioni in diversi momenti e in diverse condizioni di carico. Durante il monitoraggio di Timestream LiveAnalytics, memorizzate i dati di monitoraggio storici in modo da poterli confrontare con i dati sulle prestazioni correnti, identificare i modelli di prestazioni normali e le anomalie delle prestazioni e ideare metodi per risolvere i problemi.

Per stabilire una baseline, devi monitorare almeno gli elementi seguenti:
+ Errori di sistema, in modo da poter determinare se le richieste hanno generato un errore.

**Topics**
+ [Strumenti di monitoraggio](monitoring-automated-manual.md)
+ [Registrazione del timestream per le chiamate API con LiveAnalytics AWS CloudTrail](logging-using-cloudtrail.md)

# Strumenti di monitoraggio
<a name="monitoring-automated-manual"></a>

AWS fornisce vari strumenti che è possibile utilizzare per monitorare Timestream per. LiveAnalytics Alcuni di questi strumenti possono essere configurati in modo che eseguano automaticamente il monitoraggio, mentre altri richiedono l'intervento manuale. Si consiglia di automatizzare il più possibile i processi di monitoraggio.

**Topics**
+ [Strumenti di monitoraggio automatici](#monitoring-automated_tools)
+ [Strumenti di monitoraggio manuali](#monitoring-manual-tools)

## Strumenti di monitoraggio automatici
<a name="monitoring-automated_tools"></a>

Puoi utilizzare i seguenti strumenti di monitoraggio automatizzato per guardare Timestream LiveAnalytics e segnalare quando qualcosa non va:
+ **Amazon CloudWatch Alarms**: monitora una singola metrica in un periodo di tempo specificato ed esegui una o più azioni in base al valore della metrica rispetto a una determinata soglia in diversi periodi di tempo. L'azione è una notifica inviata a un argomento di Amazon Simple Notification Service (Amazon SNS) o a una policy di Amazon EC2 Auto Scaling. CloudWatch gli allarmi non richiamano azioni semplicemente perché si trovano in uno stato particolare; lo stato deve essere cambiato e mantenuto per un determinato numero di periodi. Per ulteriori informazioni, consulta [Monitoraggio con Amazon CloudWatch](monitoring-cloudwatch.md).

## Strumenti di monitoraggio manuali
<a name="monitoring-manual-tools"></a>

Un'altra parte importante del monitoraggio di Timestream for LiveAnalytics riguarda il monitoraggio manuale degli elementi che gli CloudWatch allarmi non coprono. Il Timestream for LiveAnalytics, CloudWatch Trusted Advisor, e altri Console di gestione AWS dashboard forniscono una at-a-glance visione dello stato dell'ambiente. AWS 
+ La CloudWatch home page mostra quanto segue:
  + Stato e allarmi attuali
  + Grafici degli allarmi e delle risorse
  + Stato di integrità dei servizi

  Inoltre, è possibile utilizzare CloudWatch per effettuare le seguenti operazioni: 
  + Crea [pannelli di controllo personalizzati](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/CloudWatch_Dashboards.html) per monitorare i servizi di interesse.
  + Crea grafici dei dati dei parametri per la risoluzione di problemi e il rilevamento di tendenze.
  + Cerca e sfoglia tutte le metriche AWS delle tue risorse
  + Crea e modifica gli allarmi per ricevere le notifiche dei problemi.

# Registrazione del timestream per le chiamate API con LiveAnalytics AWS CloudTrail
<a name="logging-using-cloudtrail"></a>



Timestream for LiveAnalytics è integrato con AWS CloudTrail, un servizio che fornisce una registrazione delle azioni intraprese da un utente, ruolo o un AWS servizio in Timestream for. LiveAnalytics CloudTrail acquisisce le chiamate API Data Definition Language (DDL) per Timestream for as events. LiveAnalytics Le chiamate acquisite includono chiamate da Timestream per LiveAnalytics console e chiamate di codice a Timestream per le operazioni API. LiveAnalytics Se crei un trail, puoi abilitare la distribuzione continua di CloudTrail eventi a un bucket Amazon Simple Storage Service (Amazon S3), inclusi gli eventi per Timestream for. LiveAnalytics **Se non configuri un percorso, puoi comunque visualizzare gli eventi più recenti sulla CloudTrail console nella cronologia degli eventi.** Utilizzando le informazioni raccolte da CloudTrail, puoi determinare per quale richiesta è stata effettuata a Timestream LiveAnalytics, l'indirizzo IP da cui è stata effettuata la richiesta, chi ha effettuato la richiesta, quando è stata effettuata e altri dettagli. 

Per ulteriori informazioni CloudTrail, consulta la Guida per l'[AWS CloudTrail utente](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/).

## Timestream per informazioni in LiveAnalytics CloudTrail
<a name="service-name-info-in-cloudtrail"></a>

CloudTrail è abilitato sul tuo AWS account al momento della creazione dell'account. **Quando si verifica un'attività in Timestream for LiveAnalytics, tale attività viene registrata in un CloudTrail evento insieme ad altri eventi di AWS servizio nella cronologia degli eventi.** È possibile visualizzare, cercare e scaricare gli eventi recenti nell'account AWS . Per ulteriori informazioni, consulta [Visualizzazione degli eventi con CloudTrail la cronologia degli eventi](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html). 

**avvertimento**  
Attualmente, Timestream for LiveAnalytics genera CloudTrail eventi per tutte le operazioni di gestione e `Query` API, ma non genera eventi per `WriteRecords` e. `DescribeEndpoints` APIs 

Per una registrazione continua degli eventi nel tuo AWS account, inclusi gli eventi per Timestream for LiveAnalytics, crea un percorso. Un *trail* consente di CloudTrail inviare file di log a un bucket Amazon S3. Per impostazione predefinita, quando crei un percorso nella console, il percorso si applica a tutte le AWS regioni. Il trail registra gli eventi di tutte le regioni della AWS partizione e consegna i file di log al bucket Amazon S3 specificato. Inoltre, puoi configurare altri AWS servizi per analizzare ulteriormente e agire in base ai dati sugli eventi raccolti nei log. CloudTrail 

Per ulteriori informazioni, consulta gli argomenti seguenti nella *Guida per l'utente di AWS CloudTrail *: 
+ [Panoramica della creazione di un trail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [CloudTrail Servizi e integrazioni supportati](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-aws-service-specific-topics.html#cloudtrail-aws-service-specific-topics-integrations)
+ [Configurazione delle notifiche Amazon SNS per CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/getting_notifications_top_level.html)
+ [Ricezione di file di CloudTrail registro da più regioni](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html)
+ [Ricezione di file di CloudTrail registro da più account](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-receive-logs-from-multiple-accounts.html)
+ [Registrazione degli eventi relativi ai dati](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html)

Ogni evento o voce di log contiene informazioni sull’utente che ha generato la richiesta. Le informazioni di identità consentono di determinare quanto segue: 
+ Se la richiesta è stata effettuata con credenziali utente root o AWS Identity and Access Management (IAM)
+ Se la richiesta è stata effettuata con le credenziali di sicurezza temporanee per un ruolo o un utente federato.
+ Se la richiesta è stata effettuata da un altro AWS servizio

Per ulteriori informazioni, consulta [Elemento CloudTrail userIdentity](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html).

Per gli eventi `Query` API:
+ Crea un percorso che riceva tutti gli eventi o seleziona gli eventi con Timestream per il tipo di LiveAnalytics `AWS::Timestream::Database` risorsa o. `AWS::Timestream::Table`
+ `Query`Le richieste API che non accedono a nessun database o tabella o che generano un'eccezione di convalida dovuta a una stringa di query non valida vengono registrate CloudTrail con un tipo di risorsa `AWS::Timestream::Database` e un valore ARN di:

  ```
  arn:aws:timestream:(region):(accountId):database/NO_RESOURCE_ACCESSED
  ```

  Questi eventi vengono consegnati solo ai trail che ricevono eventi con tipo di risorsa. `AWS::Timestream::Database`

# Resilienza in Amazon Timestream Live Analytics
<a name="disaster-recovery-resiliency"></a>

L'infrastruttura AWS globale è costruita attorno AWS a regioni e zone di disponibilità. AWS Le regioni forniscono più zone di disponibilità fisicamente separate e isolate, collegate con reti a bassa latenza, ad alto throughput e altamente ridondanti. Con le zone di disponibilità è possibile progettare e gestire applicazioni e database che eseguono automaticamente il failover tra zone di disponibilità senza interruzioni. Le zone di disponibilità sono più disponibili, tolleranti ai guasti e scalabili rispetto alle infrastrutture a data center singolo o multiplo tradizionali. 

[Per ulteriori informazioni su AWS regioni e zone di disponibilità, consulta Global Infrastructure.AWS](https://aws.amazon.com/about-aws/global-infrastructure/)

Per informazioni sulla funzionalità di protezione dei dati per Timestream disponibile tramite AWS Backup, vedere. [Lavorare con AWS Backup](backups.md)

# Sicurezza dell'infrastruttura in Amazon Timestream Live Analytics
<a name="infrastructure-security"></a>

In quanto servizio gestito, Amazon Timestream Live Analytics è protetto dalle AWS procedure di sicurezza di rete globali descritte nel white paper [Amazon Web Services: Overview of](https://d0.awsstatic.com/whitepapers/Security/AWS_Security_Whitepaper.pdf) Security Processes.

Utilizzi chiamate API AWS pubblicate per accedere a Timestream Live Analytics attraverso la rete. I client devono supportare Transport Layer Security (TLS) 1.0 o versioni successive. È consigliabile TLS 1.2 o versioni successive. I client devono, inoltre, supportare le suite di cifratura con PFS (Perfect Forward Secrecy), ad esempio Ephemeral Diffie-Hellman (DHE) o Elliptic Curve Ephemeral Diffie-Hellman (ECDHE). La maggior parte dei sistemi moderni, come Java 7 e versioni successive, supporta tali modalità.

Inoltre, le richieste devono essere firmate utilizzando un ID chiave di accesso e una chiave di accesso segreta associata a un principale IAM. In alternativa è possibile utilizzare [AWS Security Token Service](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html) (AWS STS) per generare credenziali di sicurezza temporanee per sottoscrivere le richieste.

Timestream Live Analytics è progettato in modo tale che il traffico sia isolato AWS nella regione specifica in cui risiede l'istanza Timestream Live Analytics.

# Analisi della configurazione e delle vulnerabilità in Timestream
<a name="ConfigAndVulnerability"></a>

 La configurazione e i controlli IT sono una responsabilità condivisa tra voi AWS e voi, i nostri clienti. Per ulteriori informazioni, consulta il [modello di responsabilità AWS condivisa](https://aws.amazon.com/compliance/shared-responsibility-model/). Oltre al modello di responsabilità condivisa, Timestream for LiveAnalytics user deve tenere conto di quanto segue: 
+ È responsabilità del cliente applicare patch alle applicazioni client con le relative dipendenze lato client.
+ [I clienti dovrebbero prendere in considerazione i test di penetrazione, se appropriato (vedere https://aws.amazon.com/security/ penetration-testing/.)](https://aws.amazon.com/security/penetration-testing/)

# Risposta agli incidenti in Timestream per LiveAnalytics
<a name="IncidentResponse"></a>

[Gli incidenti di servizio di Amazon Timestream LiveAnalytics for Service sono segnalati nella Personal Health Dashboard.](https://phd.aws.amazon.com/phd/home#/) [Puoi saperne di più sulla dashboard e qui. AWS Health](https://docs.aws.amazon.com//health/latest/ug/what-is-aws-health.html)

Timestream for LiveAnalytics supporta la reportistica utilizzando. AWS CloudTrail Per ulteriori informazioni, consulta [Registrazione del timestream per le chiamate API con LiveAnalytics AWS CloudTrail](logging-using-cloudtrail.md). 

# Endpoint VPC (AWS PrivateLink)
<a name="VPCEndpoints"></a>

*Puoi stabilire una connessione privata tra il tuo VPC e Amazon Timestream creando un endpoint VPC LiveAnalytics di interfaccia.* Gli endpoint di interfaccia sono alimentati da [AWS PrivateLink](https://aws.amazon.com/privatelink), una tecnologia che consente di accedere privatamente a Timestream LiveAnalytics APIs senza un gateway Internet, un dispositivo NAT, una connessione VPN o una connessione Direct Connect. AWS Le istanze nel tuo VPC non necessitano di indirizzi IP pubblici per comunicare con Timestream. LiveAnalytics APIs Il traffico tra il tuo VPC e Timestream for LiveAnalytics non esce dalla rete Amazon. 

Ogni endpoint dell'interfaccia è rappresentato da una o più [interfacce di rete elastiche](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html) nelle sottoreti. *Per ulteriori informazioni sugli endpoint VPC di interfaccia, consulta Interface [VPC endpoints () nella Amazon VPC User AWS PrivateLink Guide](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html).*

Per iniziare con Timestream for e gli endpoint LiveAnalytics VPC, abbiamo fornito informazioni su considerazioni specifiche per Timestream per gli endpoint VPC, sulla creazione di un endpoint LiveAnalytics VPC di interfaccia per Timestream, sulla creazione di una policy di endpoint VPC per Timestream e sull'utilizzo del client Timestream (per LiveAnalytics l'SDK Write o Query) con gli endpoint VPC. LiveAnalytics

**Topics**
+ [Come funzionano gli endpoint VPC con Timestream](VPCEndpoints.vpc-endpoint-considerations.md)
+ [Creazione di un endpoint VPC di interfaccia per Timestream per LiveAnalytics](VPCEndpoints.vpc-endpoint-create.md)
+ [Creazione di una policy per gli endpoint VPC per Timestream per LiveAnalytics](VPCEndpoints.vpc-endpoint-policy.md)

# Come funzionano gli endpoint VPC con Timestream
<a name="VPCEndpoints.vpc-endpoint-considerations"></a>

 Quando crei un endpoint VPC per accedere a Timestream Write o Timestream Query SDK, tutte le richieste vengono indirizzate agli endpoint all'interno della rete Amazon e non accedono alla rete Internet pubblica. Più specificamente, le tue richieste vengono indirizzate agli endpoint di scrittura e interrogazione della cella su cui è stato mappato il tuo account per una determinata regione. Per saperne di più sull'architettura cellulare di Timestream e sugli endpoint specifici delle celle, puoi fare riferimento a. [Architettura cellulare](architecture.md#cells) Ad esempio, supponiamo che il tuo account sia stato mappato su `cell1` in `us-west-2` e che tu abbia configurato gli endpoint dell'interfaccia VPC per write (`ingest-cell1.timestream.us-west-2.amazonaws.com`) e queries (). `query-cell1.timestream.us-west-2.amazonaws.com` In questo caso, tutte le richieste di scrittura inviate utilizzando questi endpoint rimarranno interamente all'interno della rete Amazon e non accederanno alla rete Internet pubblica. 

## Considerazioni sugli endpoint VPC Timestream
<a name="VPCEndpoints.vpc-endpoint-considerations.how-it-works"></a>

Considera quanto segue quando crei un endpoint VPC per Timestream:
+ *Prima di configurare un endpoint VPC di interfaccia per Timestream LiveAnalytics, assicurati di esaminare le proprietà [e le limitazioni degli endpoint dell'interfaccia nella Amazon VPC User Guide](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#vpce-interface-limitations).* 
+ Timestream for LiveAnalytics supporta l'esecuzione [di chiamate a tutte le sue azioni API dal tuo](https://docs.aws.amazon.com/timestream/latest/developerguide/API_Reference.html) VPC. 
+ Le policy degli endpoint VPC sono supportate per Timestream for. LiveAnalytics Per impostazione predefinita, l'accesso completo a Timestream for LiveAnalytics è consentito tramite l'endpoint. Per ulteriori informazioni, consulta [Controllo degli accessi ai servizi con endpoint VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html) nella *Guida per l’utente di Amazon VPC.*
+ A causa dell'architettura di Timestream, l'accesso alle azioni Write e Query richiede la creazione di due endpoint di interfaccia VPC, uno per ogni SDK. Inoltre, devi specificare un endpoint di cella (potrai creare un endpoint solo per la cella Timestream a cui sei mappato). Informazioni dettagliate sono disponibili nella sezione [Crea un endpoint VPC di interfaccia per Timestream](VPCEndpoints.vpc-endpoint-create.md) di questa guida. LiveAnalytics 

Ora che hai capito come LiveAnalytics funziona Timestream for con gli endpoint VPC, crea [un'interfaccia VPC](VPCEndpoints.vpc-endpoint-create.md) endpoint per Timestream for. LiveAnalytics

# Creazione di un endpoint VPC di interfaccia per Timestream per LiveAnalytics
<a name="VPCEndpoints.vpc-endpoint-create"></a>

Puoi creare un [endpoint VPC di interfaccia](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html) per il servizio Timestream for LiveAnalytics utilizzando la console Amazon VPC o il (). AWS Command Line Interface AWS CLI Per creare un endpoint VPC per Timestream, completa i passaggi specifici di Timestream descritti di seguito. 

**Nota**  
Prima di completare i passaggi seguenti, assicurati di aver compreso [le considerazioni specifiche per gli endpoint VPC Timestream](VPCEndpoints.vpc-endpoint-considerations.md).

## Creazione di un nome di servizio endpoint VPC utilizzando la cella Timestream
<a name="VPCEndpoints.vpc-endpoint-create.vpc-endpoint-name"></a>

 A causa dell'architettura unica di Timestream, è necessario creare endpoint di interfaccia VPC separati per ogni SDK (Write and Query). Inoltre, devi specificare un endpoint della cella Timestream (potrai creare un endpoint solo per la cella Timestream a cui sei mappato). Per utilizzare Interface VPC Endpoints per connetterti direttamente a Timestream dall'interno del tuo VPC, completa i passaggi seguenti: 

1. Innanzitutto, trova un endpoint cellulare Timestream disponibile. Per trovare un endpoint di cella disponibile, usa l'[`DescribeEndpoints`azione](https://docs.aws.amazon.com/timestream/latest/developerguide/API_query_DescribeEndpoints.html) (disponibile sia tramite Write che Query APIs) per elencare gli endpoint di cella disponibili nel tuo account Timestream. Vedi l'[esempio](#VPCEndpoints.vpc-endpoint-create.vpc-endpoint-name.example) per ulteriori dettagli. 

1. Dopo aver selezionato un endpoint di cella da utilizzare, crea una stringa di endpoint dell'interfaccia VPC per l'API Timestream Write o Query:
   + *Per l'API Write:*

     ```
     com.amazonaws.<region>.timestream.ingest-<cell>
     ```
   + *Per l'API Query:*

     ```
     com.amazonaws.<region>.timestream.query-<cell>
     ```

    [dove *<region>* è un [codice AWS regionale valido](https://docs.aws.amazon.com/general/latest/gr/rande.html) ed *<cell>* è uno degli indirizzi degli endpoint delle celle (ad esempio `cell1` o`cell2`) restituiti nell'[oggetto Endpoints](https://docs.aws.amazon.com/timestream/latest/developerguide/API_query_DescribeEndpoints.html#API_query_DescribeEndpoints_ResponseSyntax) dall'azioneDescribeEndpoints .](https://docs.aws.amazon.com/timestream/latest/developerguide/API_query_DescribeEndpoints.html) Vedi l'[esempio](#VPCEndpoints.vpc-endpoint-create.vpc-endpoint-name.example) per ulteriori dettagli. 

1. Ora che hai creato un nome di servizio endpoint VPC, [crea un](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html) endpoint di interfaccia. Quando ti viene chiesto di fornire un nome di servizio endpoint VPC, usa il nome del servizio endpoint VPC che hai creato nel passaggio 2.

### Esempio: creazione del nome del servizio endpoint VPC
<a name="VPCEndpoints.vpc-endpoint-create.vpc-endpoint-name.example"></a>

Nell'esempio seguente, l'`DescribeEndpoints`azione viene eseguita nella AWS CLI utilizzando l'API Write nella `us-west-2` regione:

```
aws timestream-write describe-endpoints --region us-west-2
```

Questo comando restituirà il seguente risultato:

```
{
    "Endpoints": [
        {
            "Address": "ingest-cell1.timestream.us-west-2.amazonaws.com",
            "CachePeriodInMinutes": 1440
        }
    ]
}
```

In questo caso, *cell1* è il*<cell>*, ed *us-west-2* è il*<region>*. Quindi, il nome del servizio endpoint VPC risultante sarà simile a: 

```
com.amazonaws.us-west-2.timestream.ingest-cell1
```

Ora che hai creato un endpoint VPC di interfaccia per Timestream, LiveAnalytics crea [una policy di endpoint VPC](VPCEndpoints.vpc-endpoint-policy.md) per Timestream for. LiveAnalytics

# Creazione di una policy per gli endpoint VPC per Timestream per LiveAnalytics
<a name="VPCEndpoints.vpc-endpoint-policy"></a>

Puoi allegare una policy per gli endpoint al tuo endpoint VPC che controlla l'accesso a Timestream for. LiveAnalytics La policy specifica le informazioni riportate di seguito:
+ Il principale che può eseguire operazioni.
+ Le azioni che possono essere eseguite.
+ Le risorse sui cui si possono eseguire operazioni.

Per ulteriori informazioni, consulta [Controllo degli accessi ai servizi con endpoint VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html) in *Guida per l'utente di Amazon VPC*. 

**Esempio: policy degli endpoint VPC per Timestream for actions LiveAnalytics**  
Di seguito è riportato un esempio di policy sugli endpoint per Timestream for. LiveAnalytics Se associata a un endpoint, questa politica consente l'accesso al Timestream elencato per LiveAnalytics le azioni (in questo caso [https://docs.aws.amazon.com/timestream/latest/developerguide/API_ListDatabases.html](https://docs.aws.amazon.com/timestream/latest/developerguide/API_ListDatabases.html)) per tutti i principali su tutte le risorse.

```
{
   "Statement":[
      {
         "Principal":"*",
         "Effect":"Allow",
         "Action":[
            "timestream:ListDatabases"
         ],
         "Resource":"*"
      }
   ]
}
```

# Best practice di sicurezza per Amazon Timestream for LiveAnalytics
<a name="best-practices-security"></a>

Amazon Timestream LiveAnalytics for offre una serie di funzionalità di sicurezza da prendere in considerazione durante lo sviluppo e l'implementazione delle proprie politiche di sicurezza. Le seguenti best practice sono linee guida generali e non rappresentano una soluzione di sicurezza completa. Poiché queste best practice potrebbero non essere appropriate o sufficienti per l’ambiente, sono da considerare come considerazioni utili anziché prescrizioni. 

**Topics**
+ [Timestream per le migliori pratiche di sicurezza preventiva LiveAnalytics](best-practices-security-preventative.md)

# Timestream per le migliori pratiche di sicurezza preventiva LiveAnalytics
<a name="best-practices-security-preventative"></a>

Le seguenti best practice possono aiutarti ad anticipare e prevenire gli incidenti di sicurezza in Timestream for. LiveAnalytics

**Crittografia dei dati a riposo**  
[Timestream for LiveAnalytics crittografa a riposo tutti i dati utente memorizzati nelle tabelle utilizzando le chiavi di crittografia archiviate in ().AWS Key Management ServiceAWS KMS](https://aws.amazon.com/kms/) Questo fornisce un livello aggiuntivo di protezione dei dati dagli accessi non autorizzati allo storage sottostante.  
Timestream for LiveAnalytics utilizza una singola chiave di servizio predefinita (CMK di AWS proprietà) per crittografare tutte le tabelle. Se questa chiave non esiste, viene creata per te. Le chiavi predefinite del servizio non possono essere disabilitate. Per ulteriori informazioni, consulta [Timestream for LiveAnalytics Encryption at](https://docs.aws.amazon.com/mcs/latest/devguide/EncryptionAtRest.html) Rest.

**Usa i ruoli IAM per autenticare l'accesso a Timestream per LiveAnalytics**  
Gli utenti, le applicazioni e gli altri AWS servizi per cui accedere a Timestream devono includere AWS credenziali valide nelle loro richieste API. LiveAnalytics AWS Non è necessario archiviare AWS le credenziali direttamente nell'applicazione o nell'istanza EC2. Si tratta di credenziali a lungo termine che non vengono automaticamente ruotate e, pertanto, potrebbero avere un impatto aziendale significativo se compromesse. Un ruolo IAM consente di ottenere le chiavi di accesso temporanee che possono essere utilizzate per accedere ai servizi e alle risorse AWS .  
Per ulteriori informazioni, consulta [IAM Roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) (Ruoli IAM).

**Utilizza le politiche IAM per Timestream per l'autorizzazione di base LiveAnalytics **  
Quando concedi le autorizzazioni, decidi chi le ottiene, per quale Timestream le LiveAnalytics APIs ottengono e le azioni specifiche che desideri consentire su tali risorse. L’implementazione del privilegio minimo è fondamentale per ridurre i rischi di sicurezza e l’impatto che può risultare da errori o intenzioni dannose.  
Associa le politiche di autorizzazione alle identità IAM (ovvero utenti, gruppi e ruoli) e quindi concedi le autorizzazioni per eseguire operazioni su Timestream per le risorse. LiveAnalytics  
Puoi farlo usando quanto segue:  
+ [AWS politiche gestite (predefinite)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)
+ [Policy gestite dal cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)
+ [autorizzazione basata su tag](security_iam_service-with-iam.md#security_iam_service-with-iam-tags)

**Valutazione della crittografia lato client**  
Se memorizzi dati sensibili o riservati in Timestream for LiveAnalytics, potresti voler crittografare tali dati il più vicino possibile alla loro origine in modo che siano protetti per tutto il loro ciclo di vita. La crittografia dei dati sensibili in transito e in archivio aiuta a garantire che i dati in formato testo non crittografato non siano disponibili per terze parti.

# Utilizzo di altri servizi
<a name="OtherServices"></a>

Amazon Timestream LiveAnalytics for si integra con una varietà di servizi e strumenti AWS di terze parti diffusi. Attualmente, Timestream for LiveAnalytics supporta integrazioni con quanto segue: 

**Topics**
+ [Amazon DynamoDB](dynamodb.md)
+ [AWS Lambda](Lambda.md)
+ [AWS IoT Core](IOT-Core.md)
+ [Servizio gestito da Amazon per Apache Flink](ApacheFlink.md)
+ [Amazon Kinesis](Kinesis.md)
+ [Amazon MQ](MQ.md)
+ [Amazon MSK](MSK.md)
+ [Amazon Quick](Quicksight.md)
+ [Amazon SageMaker AI](Sagemaker.md)
+ [Amazon SQS](SQS.md)
+ [Utilizzo DBeaver per lavorare con Amazon Timestream](DBeaver.md)
+ [Grafana](Grafana.md)
+ [Utilizzo SquaredUp per lavorare con Amazon Timestream](SquaredUp.md)
+ [Telegraf open source](Telegraf.md)
+ [JDBC](JDBC.md)
+ [ODBC](ODBC.md)
+ [Endpoint VPC (AWS PrivateLink)](vpc-interface-endpoints.md)

# Amazon DynamoDB
<a name="dynamodb"></a>

## Utilizzo di EventBridge Pipes per inviare dati DynamoDB a Timestream
<a name="DynamoDB-via-pipes"></a>

Puoi utilizzare EventBridge Pipes per inviare dati da un flusso DynamoDB a un Amazon Timestream for table. LiveAnalytics 

Le pipe sono destinate point-to-point alle integrazioni tra sorgenti e destinazioni supportate, con supporto per trasformazioni e arricchimenti avanzati. Le pipe riducono la necessità di conoscenze specializzate e codice di integrazione durante lo sviluppo di architetture basate sugli eventi. Per configurare una pipe, si sceglie l'origine, si aggiungono filtri facoltativi, si definisce l'arricchimento facoltativo e si sceglie la destinazione per i dati dell'evento.

![\[Una sorgente invia gli eventi a una EventBridge pipe, che filtra e indirizza gli eventi corrispondenti alla destinazione.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/pipes-overview_shared_architecture.png)


Per ulteriori informazioni su EventBridge Pipes, consultate [EventBridge Pipes](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-pipes.html) nella *Guida EventBridge per l'utente*. Per informazioni sulla configurazione di una pipe per inviare eventi a un Amazon LiveAnalytics Timestream for table [EventBridge ,](https://docs.aws.amazon.com/eventbridge/latest/userguide/pipes-targets-specifics.html#pipes-targets-specifics-timestream) consulta le specifiche del target Pipes.

# AWS Lambda
<a name="Lambda"></a>

 Puoi creare funzioni Lambda che interagiscono con Timestream for. LiveAnalytics Ad esempio, puoi creare una funzione Lambda che viene eseguita a intervalli regolari per eseguire una query su Timestream e inviare una notifica SNS in base ai risultati della query che soddisfano uno o più criteri. [Per ulteriori informazioni su Lambda, consulta la documentazione di Lambda AWS .](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

**Topics**
+ [Crea funzioni AWS Lambda usando Amazon Timestream for with Python LiveAnalytics](#Lambda.w-python)
+ [Crea funzioni AWS Lambda usando Amazon Timestream for with LiveAnalytics JavaScript](#Lambda.w-js)
+ [Crea funzioni AWS Lambda utilizzando Amazon Timestream for with Go LiveAnalytics](#Lambda.w-go)
+ [Crea funzioni AWS Lambda usando Amazon Timestream per C\$1 LiveAnalytics](#Lambda.w-c-sharp)

## Crea funzioni AWS Lambda usando Amazon Timestream for with Python LiveAnalytics
<a name="Lambda.w-python"></a>

 Per creare funzioni AWS Lambda utilizzando Amazon Timestream LiveAnalytics for with Python, segui i passaggi seguenti.

1.  Crea un ruolo IAM da far assumere a Lambda che conceda le autorizzazioni necessarie per accedere al servizio Timestream, come descritto in. [Fornisci Timestream per l'accesso LiveAnalytics](accessing.md#getting-started.prereqs.iam-user)

1. Modifica la relazione di trust del ruolo IAM per aggiungere il servizio Lambda. Puoi usare i comandi seguenti per aggiornare un ruolo esistente in modo che AWS Lambda possa assumerlo:

   1. Crea il documento relativo alla politica di fiducia:

      ```
      cat > Lambda-Role-Trust-Policy.json << EOF
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": [
                "lambda.amazonaws.com"
              ]
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      EOF
      ```

   1. Aggiorna il ruolo del passaggio precedente con il documento di fiducia

      ```
      aws iam update-assume-role-policy --role-name <name_of_the_role_from_step_1> --policy-document file://Lambda-Role-Trust-Policy.json
      ```

I riferimenti correlati sono disponibili in [TimestreamWrite](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/timestream-write.html)e [TimestreamQuery](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/timestream-query.html).

## Crea funzioni AWS Lambda usando Amazon Timestream for with LiveAnalytics JavaScript
<a name="Lambda.w-js"></a>

 [Per creare funzioni AWS Lambda utilizzando Amazon Timestream LiveAnalytics for JavaScript with, segui le istruzioni riportate qui.](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-package.html#nodejs-package-dependencies)

[I riferimenti correlati sono disponibili su [Timestream Write Client - AWS SDK per JavaScript v3 e Timestream Query Client - SDK per v3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-write/index.html). AWS JavaScript ](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-timestream-query/index.html)

## Crea funzioni AWS Lambda utilizzando Amazon Timestream for with Go LiveAnalytics
<a name="Lambda.w-go"></a>

 [Per creare funzioni AWS Lambda utilizzando Amazon Timestream LiveAnalytics for with Go, segui le istruzioni riportate qui.](https://docs.aws.amazon.com/lambda/latest/dg/golang-package.html)

[https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/timestreamwrite](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/timestreamwrite)

## Crea funzioni AWS Lambda usando Amazon Timestream per C\$1 LiveAnalytics
<a name="Lambda.w-c-sharp"></a>

 [Per creare funzioni AWS Lambda utilizzando Amazon Timestream LiveAnalytics for with C\$1, segui le istruzioni descritte qui.](https://docs.aws.amazon.com/lambda/latest/dg/csharp-package.html)

I riferimenti correlati sono disponibili su [Amazon. TimestreamWrite](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/TimestreamWrite/NTimestreamWrite.html)e [Amazon. TimestreamQuery](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/TimestreamQuery/NTimestreamQuery.html).

# AWS IoT Core
<a name="IOT-Core"></a>

 Puoi raccogliere dati dai dispositivi IoT utilizzando [AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/iot-gs.html) e indirizzarli ad Amazon Timestream tramite azioni delle regole IoT Core. AWS Le azioni delle regole IoT specificano cosa fare quando viene attivata una regola. Puoi definire azioni per inviare dati a una tabella Amazon Timestream, a un database Amazon DynamoDB e richiamare una funzione Lambda. AWS 

 L'azione Timestream in IoT Rules viene utilizzata per inserire i dati dai messaggi in arrivo direttamente in Timestream. L'azione analizza i risultati dell'istruzione [IoT Core SQL](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-reference.html) e archivia i dati in Timestream. I nomi dei campi del set di risultati SQL restituito vengono utilizzati come measure: :name e il valore del campo è measure: :value. 

 Ad esempio, considera l'istruzione SQL e il payload del messaggio di esempio: 

```
SELECT temperature, humidity from 'iot/topic'
```

```
{
  "dataFormat": 5, 
  "rssi": -88,
  "temperature": 24.04,    
  "humidity": 43.605,    
  "pressure": 101082,    
  "accelerationX": 40,    
  "accelerationY": -20,    
  "accelerationZ": 1016,    
  "battery": 3007,    
  "txPower": 4,    
  "movementCounter": 219,    
  "device_id": 46216,
  "device_firmware_sku": 46216   
}
```

 Se viene creata un'azione della regola IoT Core per Timestream con l'istruzione SQL precedente, verranno aggiunti due record a Timestream con i nomi delle misure temperatura e umidità e valori di misura rispettivamente di 24,04 e 43,605. 

 È possibile modificare il nome della misura di un record aggiunto a Timestream utilizzando l'operatore AS nell'istruzione SELECT. L'istruzione SQL riportata di seguito creerà un record con il nome del messaggio temp anziché temperature. 

 Il tipo di dati della misura viene dedotto dal tipo di dati del valore del payload del messaggio. I tipi di dati JSON come integer, double, boolean e string vengono mappati rispettivamente ai tipi di dati Timestream di BIGINT, DOUBLE, BOOLEAN e VARCHAR. [I dati possono anche essere impostati su tipi di dati specifici utilizzando la funzione cast ().](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-cast) È possibile specificare il timestamp della misura. Se il timestamp viene lasciato vuoto, viene utilizzata l'ora in cui la voce è stata elaborata. 

Puoi fare riferimento alla documentazione [sulle regole e le azioni di Timestream](https://docs.aws.amazon.com/iot/latest/developerguide/timestream-rule-action.html) per ulteriori dettagli

 Per creare un'azione della regola IoT Core per archiviare i dati in Timestream, procedi nel seguente modo: 

**Topics**
+ [Prerequisiti](#prereqs)
+ [Utilizzo della console](#using-console)
+ [Utilizzo della CLI](#using-cli)
+ [Applicazione di esempio](#sample-app)
+ [Tutorial video](#video-tutorial)

## Prerequisiti
<a name="prereqs"></a>

1. Crea un database in Amazon Timestream utilizzando le istruzioni descritte in. [Creazione di un database](console_timestream.md#console_timestream.db.using-console)

1. Crea una tabella in Amazon Timestream utilizzando le istruzioni descritte in. [Creare una tabella](console_timestream.md#console_timestream.table.using-console)

## Utilizzo della console
<a name="using-console"></a>

1. **Utilizza la console di AWS gestione per AWS IoT Core per creare una regola facendo clic su **Gestisci** > **Routing dei messaggi** > **Regole** seguito da Crea regola.**

1. Imposta il nome della regola con un nome a tua scelta e l'SQL sul testo mostrato di seguito

   ```
   SELECT temperature as temp, humidity from 'iot/topic' 
   ```

1. Seleziona Timestream dall'elenco Azioni

1. Specificate il database, la tabella e i nomi delle dimensioni Timestream insieme al ruolo per scrivere i dati in Timestream. Se il ruolo non esiste, puoi crearne uno facendo clic su Crea ruoli

1. Per testare la regola, segui le istruzioni mostrate [qui](https://docs.aws.amazon.com/iot/latest/developerguide/iot-ddb-rule.html#test-db-rule).

## Utilizzo della CLI
<a name="using-cli"></a>

 [Se non hai installato l'interfaccia a riga di AWS comando (AWS CLI), fallo da qui.](https://aws.amazon.com/cli/) 

1. Salva il seguente payload di regole in un file JSON chiamato timestream\$1rule.json. *arn:aws:iam::123456789012:role/TimestreamRole*Sostituiscilo con il tuo ruolo arn, che garantisce l'accesso AWS IoT per archiviare i dati in Amazon Timestream

   ```
   { 
       "actions": [ 
               { 
                   "timestream": { 
                       "roleArn": "arn:aws:iam::123456789012:role/TimestreamRole", 
                       "tableName": "devices_metrics", 
                       "dimensions": [ 
                           { 
                               "name": "device_id", 
                               "value": "${clientId()}" 
                           }, 
                           { 
                               "name": "device_firmware_sku", 
                               "value": "My Static Metadata" 
                           } 
                       ], 
                       "databaseName": "record_devices" 
                   } 
               } 
       ], 
       "sql": "select * from 'iot/topic'", 
       "awsIotSqlVersion": "2016-03-23", 
       "ruleDisabled": false 
   }
   ```

1. Crea una regola tematica utilizzando il seguente comando

   ```
   aws iot create-topic-rule --rule-name timestream_test --topic-rule-payload file://<path/to/timestream_rule.json> --region us-east-1 
   ```

1. Recupera i dettagli della regola dell'argomento utilizzando il seguente comando

   ```
   aws iot get-topic-rule --rule-name timestream_test 
   ```

1. Salva il seguente payload di messaggi in un file chiamato timestream\$1msg.json

   ```
   {
     "dataFormat": 5, 
     "rssi": -88,
     "temperature": 24.04,    
     "humidity": 43.605,    
     "pressure": 101082,    
     "accelerationX": 40,    
     "accelerationY": -20,    
     "accelerationZ": 1016,    
     "battery": 3007,    
     "txPower": 4,    
     "movementCounter": 219,    
     "device_id": 46216,
     "device_firmware_sku": 46216   
   }
   ```

1. Verificate la regola utilizzando il seguente comando

   ```
   aws iot-data publish --topic 'iot/topic' --payload file://<path/to/timestream_msg.json>
   ```

## Applicazione di esempio
<a name="sample-app"></a>

 Per aiutarti a iniziare a utilizzare Timestream con AWS IoT Core, abbiamo creato un'applicazione di esempio completamente funzionale che crea gli artefatti necessari in AWS IoT Core e Timestream per creare una regola tematica e un'applicazione di esempio per la pubblicazione di dati sull'argomento. 

1.  Clona il GitHub repository per l'[applicazione di esempio](https://github.com/awslabs/amazon-timestream-tools/blob/master/integrations/iot_core) per l'integrazione AWS IoT Core seguendo le istruzioni di [GitHub](https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/cloning-a-repository)

1. Segui le istruzioni nel [README](https://github.com/awslabs/amazon-timestream-tools/blob/master/integrations/iot_core) per utilizzare un AWS CloudFormation modello per creare gli artefatti necessari in Amazon Timestream e AWS IoT Core e per pubblicare messaggi di esempio sull'argomento.

## Tutorial video
<a name="video-tutorial"></a>

Questo [video](https://youtu.be/00Wersoz2Q4) spiega come IoT Core funziona con Timestream.

# Servizio gestito da Amazon per Apache Flink
<a name="ApacheFlink"></a>

Puoi utilizzare Apache Flink per trasferire i dati delle serie temporali da Amazon Managed Service per Apache Flink, Amazon MSK, Apache Kafka e altre tecnologie di streaming direttamente in Amazon Timestream for. LiveAnalytics Abbiamo creato un connettore dati di esempio Apache Flink per Timestream. Abbiamo anche creato un'applicazione di esempio per l'invio di dati ad Amazon Kinesis in modo che i dati possano fluire da Kinesis a Managed Service for Apache Flink e infine ad Amazon Timestream. Tutti questi artefatti sono disponibili in. GitHub Questo [video tutorial](https://youtu.be/64DSlBvN5lg) descrive la configurazione.

**Nota**  
 Java 11 è la versione consigliata per l'utilizzo dell'applicazione Managed Service for Apache Flink. Se disponete di più versioni di Java, assicuratevi di esportare Java 11 nella variabile di ambiente JAVA\$1HOME. 

**Topics**
+ [Applicazione di esempio](#ApacheFlink.sample-app)
+ [Tutorial video](#ApacheFlink.video-tutorial)

## Applicazione di esempio
<a name="ApacheFlink.sample-app"></a>

Per iniziare, seguite la procedura seguente:

1. Crea un database in Timestream con il nome `kdaflink` seguendo le istruzioni descritte in. [Creazione di un database](console_timestream.md#console_timestream.db.using-console)

1. Crea una tabella in Timestream con il nome `kinesisdata1` seguendo le istruzioni descritte in. [Creare una tabella](console_timestream.md#console_timestream.table.using-console)

1. Crea un Amazon Kinesis Data Stream con il nome `TimestreamTestStream` seguendo le istruzioni descritte in [Creazione di un](https://docs.aws.amazon.com/streams/latest/dev/amazon-kinesis-streams.html#how-do-i-create-a-stream) flusso.

1. Clona il GitHub repository per il [connettore dati Apache Flink per Timestream](https://github.com/awslabs/amazon-timestream-tools/blob/master/integrations/flink_connector) seguendo le istruzioni di. [GitHub](https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/cloning-a-repository)

1.  [Per compilare, eseguire e utilizzare l'applicazione di esempio, segui le istruzioni del connettore dati di esempio Apache Flink README.](https://github.com/awslabs/amazon-timestream-tools/blob/master/integrations/flink_connector/README.md) 

1. [Compilate l'applicazione Managed Service for Apache Flink seguendo le istruzioni per la compilazione del codice dell'applicazione.](https://docs.aws.amazon.com/managed-flink/latest/java/get-started-exercise.html#get-started-exercise-5.5)

1. Carica il file binario dell'applicazione Managed Service for Apache Flink seguendo le istruzioni per [caricare](https://docs.aws.amazon.com/managed-flink/latest/java/get-started-exercise.html#get-started-exercise-6) il codice di streaming Apache Flink.

   1. Dopo aver fatto clic su Crea applicazione, fai clic sul collegamento del ruolo IAM per l'applicazione.

   1. Allega le politiche IAM per **AmazonKinesisReadOnlyAccess**e **AmazonTimestreamFullAccess**.
**Nota**  
Le politiche IAM di cui sopra non sono limitate a risorse specifiche e non sono adatte all'uso in produzione. Per un sistema di produzione, prendi in considerazione l'utilizzo di politiche che limitano l'accesso a risorse specifiche.

1. Clona il GitHub repository per l'[applicazione di esempio che scrive i dati su Kinesis seguendo le istruzioni](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/tools/python/kinesis_ingestor) di. [GitHub](https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/cloning-a-repository)

1. Segui le istruzioni nel file [README](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/kinesis_ingestor/README.md) per eseguire l'applicazione di esempio per la scrittura di dati su Kinesis.

1. Esegui una o più query in Timestream per assicurarti che i dati vengano inviati da Kinesis a Managed Service for Apache Flink to Timestream seguendo le istruzioni a. [Creare una tabella](console_timestream.md#console_timestream.table.using-console)

## Tutorial video
<a name="ApacheFlink.video-tutorial"></a>

Questo [video](https://youtu.be/64DSlBvN5lg) spiega come utilizzare Timestream con Managed Service per Apache Flink.

# Amazon Kinesis
<a name="Kinesis"></a>

## Usando Servizio gestito Amazon per Apache Flink
<a name="kinesis-via-flink"></a>

È possibile inviare dati da Kinesis Data Streams a LiveAnalytics Timestream per utilizzare il connettore dati di esempio per Managed Service Timestream for Apache Flink. Per ulteriori informazioni, consulta Apache [Servizio gestito da Amazon per Apache Flink](ApacheFlink.md) Flink.

## Utilizzo di EventBridge Pipes per inviare dati Kinesis a Timestream
<a name="Kinesis-via-pipes"></a>

Puoi utilizzare EventBridge Pipes per inviare dati da un flusso Kinesis a un Amazon Timestream for table. LiveAnalytics 

Le pipe sono destinate point-to-point alle integrazioni tra sorgenti e destinazioni supportate, con supporto per trasformazioni e arricchimenti avanzati. Le pipe riducono la necessità di conoscenze specializzate e codice di integrazione durante lo sviluppo di architetture basate sugli eventi. Per configurare una pipe, si sceglie l'origine, si aggiungono filtri facoltativi, si definisce l'arricchimento facoltativo e si sceglie la destinazione per i dati dell'evento.

![\[Una sorgente invia gli eventi a una EventBridge pipe, che filtra e indirizza gli eventi corrispondenti alla destinazione.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/pipes-overview_shared_architecture.png)


Questa integrazione consente di sfruttare la potenza delle funzionalità di analisi dei dati delle serie temporali Timestream di cui dispone, semplificando al contempo la pipeline di inserimento dei dati.

L'utilizzo di EventBridge Pipes with offre i seguenti vantaggi: Timestream 
+ Inserimento di dati in tempo reale: trasmetti i dati da Kinesis direttamente a Timestream per LiveAnalytics consentire analisi e monitoraggio in tempo reale.
+ Integrazione perfetta: utilizza EventBridge Pipes per gestire il flusso di dati senza la necessità di complesse integrazioni personalizzate.
+ Filtraggio e trasformazione migliorati: filtra o trasforma i record Kinesis prima che vengano archiviati Timestream per soddisfare i requisiti specifici di elaborazione dei dati.
+ Scalabilità: gestisci flussi di dati ad alta velocità e garantisci un'elaborazione efficiente dei dati con funzionalità integrate di parallelismo e batch.

### Configurazione
<a name="Kinesis-via-pipes-config"></a>

Per configurare una EventBridge Pipe per lo streaming di dati da Kinesis a Timestream, segui questi passaggi:

1. Creare un flusso Kinesis

   Assicurati di avere un flusso di dati Kinesis attivo da cui desideri importare i dati.

1. Crea un Timestream database e una tabella

   Configura il Timestream database e la tabella in cui verranno archiviati i dati.

1. Configura la EventBridge Pipe:
   + Sorgente: seleziona il tuo stream Kinesis come sorgente.
   + Obiettivo: scegli Timestream come destinazione.
   + Impostazioni di batch: definisci la finestra di batch e le dimensioni del batch per ottimizzare l'elaborazione dei dati e ridurre la latenza.

**Importante**  
Quando si configura una tubazione, si consiglia di verificare la correttezza di tutte le configurazioni inserendo alcuni record. Tieni presente che la corretta creazione di una tubazione non garantisce che la pipeline sia corretta e che i dati scorrano senza errori. Potrebbero verificarsi errori di runtime, come una tabella errata, un parametro del percorso dinamico errato o un Timestream record non valido dopo l'applicazione della mappatura, che verranno rilevati quando i dati effettivi fluiranno attraverso la pipe.

Le seguenti configurazioni determinano la velocità con cui i dati vengono inseriti:
+ BatchSize: La dimensione massima del batch per cui verrà inviato a Timestream. LiveAnalytics Intervallo: 0 - 100. Si consiglia di mantenere questo valore su 100 per ottenere la massima produttività.
+ MaximumBatchingWindowInSeconds: Il tempo massimo di attesa per riempire BatchSize prima che il batch venga inviato a Timestream per la destinazione. LiveAnalytics A seconda della frequenza degli eventi in arrivo, questa configurazione determinerà il ritardo di inserimento. Si consiglia di mantenere questo valore < 10 secondi per continuare a inviare i dati quasi in tempo reale. Timestream 
+ ParallelizationFactor: il numero di batch da elaborare contemporaneamente da ogni shard. Si consiglia di utilizzare il valore massimo di 10 per ottenere la massima produttività e un'ingestione quasi in tempo reale.

  Se lo stream viene letto da più destinatari, utilizza il fan-out avanzato per fornire un pubblico dedicato alla tua pipe e ottenere un throughput elevato. *Per ulteriori informazioni, consulta [Sviluppo di consumatori con fan-out avanzati con l' Kinesis Data Streams API nella Guida per l'](https://docs.aws.amazon.com/streams/latest/dev/building-enhanced-consumers-api.html)utente.Kinesis Data Streams *

**Nota**  
Il throughput massimo che può essere raggiunto è limitato dalle esecuzioni [simultanee](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html#eb-pipes-limits) di pipe per account.

La seguente configurazione garantisce la prevenzione della perdita di dati:
+ DeadLetterConfig: Si consiglia di eseguire sempre la configurazione DeadLetterConfig per evitare perdite di dati nei casi in cui gli eventi non possano essere importati in Timestream a LiveAnalytics causa di errori dell'utente.

Ottimizza le prestazioni della tua pipe con le seguenti impostazioni di configurazione, che aiutano a evitare che i record causino rallentamenti o blocchi.
+ MaximumRecordAgeInSeconds: I record più vecchi di questo non verranno elaborati e verranno spostati direttamente in DLQ. Si consiglia di impostare questo valore in modo che non sia superiore al periodo di conservazione dell'archivio di memoria configurato per la Timestream tabella di destinazione.
+ MaximumRetryAttempts: Il numero di tentativi di riprovare un record prima che il record venga inviato a DeadLetterQueue. Si consiglia di configurarlo a 10. Questo dovrebbe aiutare a risolvere eventuali problemi temporanei e, in caso di problemi persistenti, il record verrà spostato DeadLetterQueue e sbloccato nel resto dello stream.
+ OnPartialBatchItemFailure: Per le fonti che supportano l'elaborazione parziale in batch, consigliamo di abilitarla e configurarla come AUTOMATIC\$1BISECT per riprovare ulteriormente i record non riusciti prima di scaricarli a DLQ. dropping/sending 

#### Esempio di configurazione
<a name="Kinesis-via-pipes-config-example"></a>

Ecco un esempio di come configurare un EventBridge Pipe per lo streaming di dati da un flusso Kinesis a una Timestream tabella:

**Example IAM aggiornamenti delle politiche per Timestream**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "timestream:WriteRecords"
            ],
            "Resource": [
                "arn:aws:timestream:us-east-1:123456789012:database/my-database/table/my-table"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "timestream:DescribeEndpoints"
            ],
            "Resource": "*"
        }
    ]
}
```

**Example Configurazione del flusso Kinesis**  <a name="kinesis-stream-config.example"></a>

```
{
  "Source": "arn:aws:kinesis:us-east-1:123456789012:stream/my-kinesis-stream",
  "SourceParameters": {
    "KinesisStreamParameters": {
        "BatchSize": 100,
        "DeadLetterConfig": {
            "Arn": "arn:aws:sqs:us-east-1:123456789012:my-sqs-queue"
        },
       "MaximumBatchingWindowInSeconds": 5,
        "MaximumRecordAgeInSeconds": 1800,
        "MaximumRetryAttempts": 10,
        "StartingPosition": "LATEST",
       "OnPartialBatchItemFailure": "AUTOMATIC_BISECT"
    }
  }
}
```

**Example Timestream configurazione del target**  <a name="kinesis-stream-config.example"></a>

```
{
    "Target": "arn:aws:timestream:us-east-1:123456789012:database/my-database/table/my-table",
    "TargetParameters": {
        "TimestreamParameters": {
            "DimensionMappings": [
                {
                    "DimensionName": "sensor_id",
                    "DimensionValue": "$.data.device_id",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "DimensionName": "sensor_type",
                    "DimensionValue": "$.data.sensor_type",
                    "DimensionValueType": "VARCHAR"
                },
                {
                    "DimensionName": "sensor_location",
                    "DimensionValue": "$.data.sensor_loc",
                    "DimensionValueType": "VARCHAR"
                }
            ],
            "MultiMeasureMappings": [
                {
                    "MultiMeasureName": "readings",
                    "MultiMeasureAttributeMappings": [
                        {
                            "MultiMeasureAttributeName": "temperature",
                            "MeasureValue": "$.data.temperature",
                            "MeasureValueType": "DOUBLE"
                        },
                        {
                            "MultiMeasureAttributeName": "humidity",
                            "MeasureValue": "$.data.humidity",
                            "MeasureValueType": "DOUBLE"
                        },
                        {
                            "MultiMeasureAttributeName": "pressure",
                            "MeasureValue": "$.data.pressure",
                            "MeasureValueType": "DOUBLE"
                        }
                    ]
                }
            ],
            "SingleMeasureMappings": [],
            "TimeFieldType": "TIMESTAMP_FORMAT",
            "TimestampFormat": "yyyy-MM-dd HH:mm:ss.SSS",
            "TimeValue": "$.data.time",
            "VersionValue": "$.approximateArrivalTimestamp"
        }
    }
}
```



### trasformazione degli eventi
<a name="Kinesis-via-pipes-trans"></a>

EventBridge Le pipe ti consentono di trasformare i dati prima che arrivino. TimestreamÈ possibile definire regole di trasformazione per modificare i Kinesis record in entrata, ad esempio cambiare i nomi dei campi.

Supponiamo che lo Kinesis stream contenga dati di temperatura e umidità. Puoi utilizzare una EventBridge trasformazione per rinominare questi campi prima di inserirli. Timestream

### Best practice
<a name="Kinesis-via-pipes-best"></a>

**Batching e buffering**
+ Configura la finestra e le dimensioni del batch per bilanciare la latenza di scrittura e l'efficienza di elaborazione.
+ Utilizzate una finestra di batch per accumulare una quantità sufficiente di dati prima dell'elaborazione, riducendo il sovraccarico dovuto alla frequente presenza di piccoli batch.

**Elaborazione parallela**

Utilizzate l'**ParallelizationFactor**impostazione per aumentare la concorrenza, in particolare per i flussi ad alta velocità. Ciò garantisce che più batch di ogni frammento possano essere elaborati contemporaneamente.

**Trasformazione dei dati**

Sfrutta le capacità di trasformazione di EventBridge Pipes per filtrare e migliorare i record prima di archiviarli. Timestream Questo può aiutare ad allineare i dati ai requisiti analitici.

**Sicurezza**
+ Assicurati che i ruoli IAM utilizzati per EventBridge Pipes dispongano delle autorizzazioni necessarie per leggere Kinesis e scrivere. Timestream
+ Utilizza misure di crittografia e controllo degli accessi per proteggere i dati in transito e a riposo.

### Errori di debug
<a name="Kinesis-via-pipes-debug"></a>
+ **Disattivazione automatica delle tubazioni**

  Le pipe verranno disattivate automaticamente in circa 2 ore se la destinazione non esiste o presenta problemi di autorizzazione
+ **Throttles**

  I tubi hanno la capacità di spegnersi automaticamente e riprovare finché l'acceleratore non si riduce.
+ **Abilitazione dei registri**

  Ti consigliamo di abilitare i log a livello di ERRORE e di includere i dati di esecuzione per ottenere maggiori informazioni sugli errori. In caso di errore, questi registri conterranno dati request/response inviati/ricevuti da. Timestream Ciò consente di comprendere l'errore associato e, se necessario, di rielaborare i record dopo averlo corretto.

### Monitoraggio
<a name="Kinesis-via-pipes-monitor"></a>

Ti consigliamo di impostare allarmi su quanto segue per rilevare eventuali problemi con il flusso di dati:
+ Età massima del record nella fonte
  + `GetRecords.IteratorAgeMilliseconds`
+ Metriche dei guasti in Pipes
  + `ExecutionFailed`
  + `TargetStageFailed`
+ Timestream Errori di scrittura dell'API
  + `UserErrors`

Per ulteriori metriche di monitoraggio, consulta [Monitoraggio EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-monitoring.html#eb-metrics) nella *Guida per l'EventBridge utente*.

# Amazon MQ
<a name="MQ"></a>

## Utilizzo di EventBridge Pipes per inviare dati Amazon MQ a Timestream
<a name="MQ-via-pipes"></a>

Puoi utilizzare EventBridge Pipes per inviare dati da un broker Amazon MQ a un Amazon Timestream LiveAnalytics per tabelle.

Le pipe sono destinate point-to-point alle integrazioni tra sorgenti e destinazioni supportate, con supporto per trasformazioni e arricchimenti avanzati. Le pipe riducono la necessità di conoscenze specializzate e codice di integrazione durante lo sviluppo di architetture basate sugli eventi. Per configurare una pipe, si sceglie l'origine, si aggiungono filtri facoltativi, si definisce l'arricchimento facoltativo e si sceglie la destinazione per i dati dell'evento.

![\[Una sorgente invia gli eventi a una EventBridge pipe, che filtra e indirizza gli eventi corrispondenti alla destinazione.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/pipes-overview_shared_architecture.png)


Per ulteriori informazioni su EventBridge Pipes, consultate [EventBridge Pipes](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-pipes.html) nella *Guida EventBridge per l'utente*. Per informazioni sulla configurazione di una pipe per inviare eventi a un Amazon LiveAnalytics Timestream for table [EventBridge ,](https://docs.aws.amazon.com/eventbridge/latest/userguide/pipes-targets-specifics.html#pipes-targets-specifics-timestream) consulta le specifiche del target Pipes.

# Amazon MSK
<a name="MSK"></a>

## Utilizzo di Managed Service for Apache Flink per inviare Amazon MSK dati a Timestream per LiveAnalytics
<a name="msk-aka"></a>

Puoi inviare dati Timestream da Amazon MSK a creando un connettore dati simile al connettore dati di esempio Timestream per Managed Service for Apache Flink. Per ulteriori informazioni, consulta [Servizio gestito da Amazon per Apache Flink](ApacheFlink.md).

## Utilizzo di Kafka Connect per inviare dati Amazon MSK a Timestream per LiveAnalytics
<a name="msk-kafka-connect"></a>

Puoi usare Kafka Connect per importare i dati delle tue serie temporali Amazon MSK direttamente da Timestream for. LiveAnalytics

Abbiamo creato un esempio di Kafka Sink Connector per. Timestream Abbiamo anche creato un esempio di piano di test di Apache JMeter per la pubblicazione di dati su un argomento di Kafka, in modo che i dati possano fluire dall'argomento, attraverso il Timestream Kafka Sink Connector, a un Timestream per tabella. LiveAnalytics Tutti questi artefatti sono disponibili su. GitHub 

**Nota**  
Java 11 è la versione consigliata per l'utilizzo del Timestream Kafka Sink Connector. Se disponi di più versioni di Java, assicurati di esportare Java 11 nella variabile di ambiente JAVA\$1HOME. 

### Creazione di un'applicazione di esempio
<a name="msk-kafka-connect-app"></a>

Per iniziare, segui la procedura riportata di seguito.

1. In Timestream for LiveAnalytics, crea un database con il nome. `kafkastream` 

   Consulta la procedura [Creazione di un database](console_timestream.md#console_timestream.db.using-console) per istruzioni dettagliate.

1. In Timestream for LiveAnalytics, crea una tabella con il nome. `purchase_history`

   Per istruzioni dettagliate, consulta [Creare una tabella](console_timestream.md#console_timestream.table.using-console) la procedura.

1. Segui le istruzioni condivise in per creare quanto segue:, e.
   + Un Amazon MSK cluster
   + Un' Amazon EC2 istanza configurata come macchina client di Kafka Producer 
   + Un argomento di Kafka

   Vedi i [prerequisiti del progetto](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/tools/java/kafka_ingestor#prerequisites) kafka\$1ingestor per istruzioni dettagliate.

1. [Clona il repository Kafka Sink Connector.Timestream](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/integrations/kafka_connector) 

   Vedi [Clonazione di un repository su per istruzioni dettagliate](https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/cloning-a-repository). GitHub 

1. Compila il codice del plugin.

    Vedi [Connector - Build from source](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/integrations/kafka_connector#connector---build-from-source) on GitHub per istruzioni dettagliate.

1. Carica i seguenti file in un bucket S3: seguendo le istruzioni descritte in.
   + Il file jar (kafka-connector-timestream->VERSION<- .jar) dalla directory jar-with-dependencies `/target`
   + Il file di schema json di esempio,. `purchase_history.json`

   Per istruzioni dettagliate, consulta [Caricamento di oggetti](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html) nella *Guida per Amazon S3 l'utente*.

1. Crea due endpoint VPC. Questi endpoint verrebbero utilizzati da MSK Connector per accedere alle risorse utilizzando. AWS PrivateLink
   + Uno per accedere al bucket Amazon S3 
   + Uno per accedere al Timestream per la tabella. LiveAnalytics 

   Consulta [VPC Endpoints per istruzioni dettagliate](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/integrations/kafka_connector#vpc-endpoints).

1. Crea un plugin personalizzato con il file jar caricato.

   Per istruzioni dettagliate, consulta [Plugins](https://docs.aws.amazon.com/msk/latest/developerguide/msk-connect-plugins.html) nella *Amazon MSK Developer Guide*.

1. Crea una configurazione di worker personalizzata con il contenuto JSON descritto nei [parametri di configurazione del lavoratore](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/integrations/kafka_connector#worker-configuration-parameters), seguendo le istruzioni descritte in 

   Per istruzioni dettagliate, consulta [Creazione di una configurazione di worker personalizzata](https://docs.aws.amazon.com/msk/latest/developerguide/msk-connect-workers.html#msk-connect-create-custom-worker-config) nella *Amazon MSK Developer Guide*.

1. Crea un IAM ruolo di esecuzione del servizio.

   Vedi [IAM Service Role](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/integrations/kafka_connector#iam-service-role) per istruzioni dettagliate.

1. Crea un Amazon MSK connettore con il plug-in personalizzato, la configurazione personalizzata del worker e il IAM ruolo di esecuzione del servizio creati nei passaggi precedenti e con la [configurazione del connettore di esempio](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/integrations/kafka_connector#sample-connector-configuration).

   Per istruzioni dettagliate, consulta [Creazione di un connettore](https://docs.aws.amazon.com/msk/latest/developerguide/msk-connect-connectors.html#mkc-create-connector-intro) nella *Amazon MSK Developer Guide*.

   Assicurati di aggiornare i valori dei seguenti parametri di configurazione con i rispettivi valori. Vedi [Parametri di configurazione del connettore](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/integrations/kafka_connector#connector-configuration-parameters) per i dettagli.
   + `aws.region`
   + `timestream.schema.s3.bucket.name`
   + `timestream.ingestion.endpoint`

   Il completamento della creazione del connettore richiede 5-10 minuti. La pipeline è pronta quando il suo stato cambia in. `Running`

1. Pubblica un flusso continuo di messaggi per scrivere dati sull'argomento Kafka creato.

   Vedi [Come usarlo per istruzioni](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/tools/java/kafka_ingestor#how-to-use-it) dettagliate.

1. Eseguire una o più interrogazioni per assicurarsi che i dati vengano inviati da MSK Connect Amazon MSK alla tabella Timestream for. LiveAnalytics 

   Consultate la procedura per istruzioni dettagliate[Esecuzione di una query](console_timestream.md#console_timestream.queries.using-console).

#### Risorse aggiuntive
<a name="msk-kafka-connect-more-info"></a>

Il blog, [Real-time serverless data ingestion from your Kafka clusters in Timestream for using Kafka Connect, spiega come configurare una end-to-end pipeline utilizzando Timestream for LiveAnalytics Kafka Sink Connector](https://aws.amazon.com/blogs/database/real-time-serverless-data-ingestion-from-your-kafka-clusters-into-amazon-timestream-using-kafka-connect/), a partire da una macchina client LiveAnalytics Kafka Producer che utilizza il piano di test Apache JMeter per pubblicare migliaia di messaggi di esempio su un argomento Kafka per verificare i record inseriti in un Timestream for table. LiveAnalytics 

# Amazon Quick
<a name="Quicksight"></a>

Puoi utilizzare Amazon Quick per analizzare e pubblicare dashboard di dati che contengono i dati di Amazon Timestream. Questa sezione descrive come creare una nuova connessione a una fonte di QuickSight dati, modificare le autorizzazioni, creare nuovi set di dati ed eseguire un'analisi. Questo [video tutorial](https://youtu.be/TzW4HWl-L8s) descrive come lavorare con Timestream e Quick. 

**Nota**  
 Tutti i set di dati in Quick sono di sola lettura. Non puoi apportare modifiche ai dati effettivi in Timestream utilizzando Quick per rimuovere la fonte di dati, il set di dati o i campi. 

**Topics**
+ [Accesso ad Amazon Timestream da QuickSight](#Quicksight.accessing)
+ [Crea una nuova connessione a una fonte di dati per Timestream QuickSight](#Quicksight.create-connection)
+ [Modifica le autorizzazioni per la connessione all'origine QuickSight dati per Timestream](#Quicksight.permissions)
+ [Crea un nuovo QuickSight set di dati per Timestream](#Quicksight.create-data)
+ [Crea una nuova analisi per Timestream](#Quicksight.create-analysis)
+ [Tutorial video](#Quicksight.video-tutorial)

## Accesso ad Amazon Timestream da QuickSight
<a name="Quicksight.accessing"></a>

 Prima di procedere, Amazon QuickSight deve essere autorizzato a connettersi ad Amazon Timestream. Se le connessioni non sono abilitate, riceverai un errore quando tenti di connetterti. Un QuickSight amministratore può autorizzare le connessioni alle AWS risorse. Per autorizzare una connessione da QuickSight Timestream, segui la procedura in [Using Other AWS Services: Scoping Down Access](https://docs.aws.amazon.com/quicksight/latest/user/scoping-policies-for-access-to-aws-resources.html), scegliendo Amazon Timestream nel passaggio 5. 

## Crea una nuova connessione a una fonte di dati per Timestream QuickSight
<a name="Quicksight.create-connection"></a>

**Nota**  
La connessione tra Amazon QuickSight e Amazon Timestream è crittografata in transito tramite SSL (TLS 1.2). Non è possibile creare una connessione non crittografata.

1. Assicurati di aver configurato le autorizzazioni appropriate per consentire QuickSight ad Amazon di accedere ad Amazon Timestream, come descritto in. [Accesso ad Amazon Timestream da QuickSight](#Quicksight.accessing)

1. Inizia creando un nuovo set di dati. **Scegli **Datasets** dal pannello di navigazione, quindi scegli Nuovo set di dati.** 

1. Seleziona la scheda sorgente dati Timestream.

1. Per **Nome dell'origine dati**, inserisci un nome per la tua connessione all'origine dati Timestream, ad esempio. `US Timestream Data` 
**Nota**  
Poiché puoi creare molti set di dati da una connessione a Timestream, è preferibile assegnare un nome semplice.

1. Scegli **Convalida connessione** per verificare di poterti connettere correttamente a Timestream.
**Nota**  
 La **convalida della connessione** convalida solo la possibilità di connettersi. Tuttavia, non convalida una tabella o una query specifica. 

1. Seleziona **Crea origine dati** per procedere.

1. Per **Database**, scegli **Seleziona**... per visualizzare l'elenco delle opzioni disponibili. Scegli quella che vuoi usare. 

1. Scegli **Seleziona** per continuare. 

1. Seleziona una delle seguenti opzioni:
   + Per importare i dati nel QuickSight motore in memoria (chiamato SPICE), scegli **Importa in SPICE per un'**analisi più rapida. 
   +  QuickSight **Per consentire l'esecuzione di una query sui dati ogni volta che aggiorni il set di dati o utilizzi l'analisi o la dashboard, scegli Interroga direttamente i tuoi dati.** 

1. Scegli **Modifica/Anteprima** e poi **Salva** per salvare il set di dati e chiuderlo.

## Modifica le autorizzazioni per la connessione all'origine QuickSight dati per Timestream
<a name="Quicksight.permissions"></a>

 La procedura seguente descrive come visualizzare, aggiungere e revocare le autorizzazioni per altri QuickSight utenti in modo che possano accedere alla stessa fonte di dati Timestream. Le persone devono essere utenti attivi QuickSight prima di poterle aggiungere. 

**Nota**  
In QuickSight, le fonti di dati hanno due livelli di autorizzazione: utente e proprietario.  
Scegli *l'utente* per consentire l'accesso in lettura. 
Scegli *il proprietario* per consentire a quell'utente di modificare, condividere o eliminare questa fonte di QuickSight dati. 

1. Assicurati di aver configurato le autorizzazioni appropriate per consentire QuickSight ad Amazon di accedere ad Amazon Timestream, come descritto in. [Accesso ad Amazon Timestream da QuickSight](#Quicksight.accessing)

1. Scegli **Set di dati** sulla sinistra, quindi scorri verso il basso per trovare il la scheda dell'origine dati per la tua connessione Timestream. Ad esempio, `US Timestream Data`.

1. Scegli la scheda sorgente dei `Timestream` dati.

1. Scegli `Share data source`. Viene visualizzato un elenco delle autorizzazioni correnti. 

1. (Facoltativo) Per modificare le autorizzazioni, puoi scegliere `user` o. `owner` 

1. (Facoltativo) Per revocare le autorizzazioni, scegli. `Revoke access` Le persone che revochi non possono creare nuovi set di dati da questa fonte di dati. Tuttavia, i loro set di dati esistenti avranno ancora accesso a questa fonte di dati.

1. Per aggiungere autorizzazioni, scegli`Invite users`, quindi segui questi passaggi per aggiungere un utente:

   1. Aggiungi persone per consentire loro di utilizzare la stessa fonte di dati.

   1. Per ognuna, scegli `Permission` quella che desideri applicare.

1. Quando hai finito, scegli`Close`.

## Crea un nuovo QuickSight set di dati per Timestream
<a name="Quicksight.create-data"></a>

1. Assicurati di aver configurato le autorizzazioni appropriate per consentire QuickSight ad Amazon di accedere ad Amazon Timestream, come descritto in. [Accesso ad Amazon Timestream da QuickSight](#Quicksight.accessing)

1. Scegli **Set di dati** sulla sinistra, quindi scorri verso il basso per trovare il la scheda dell'origine dati per la tua connessione Timestream. Se disponi di molte fonti di dati, puoi utilizzare la barra di ricerca nella parte superiore della pagina per trovarle con una corrispondenza parziale sul nome.

1. Scegli la scheda sorgente dati **Timestream**. Quindi scegli **Crea set di dati**.

1. Per **Database**, scegli **Seleziona** per visualizzare l'elenco delle opzioni disponibili. Scegli il database che desideri utilizzare. 

1. Per **Tabelle**, seleziona la tabella che desideri utilizzare.

1. Scegli **Modifica/Anteprima**.

1. (Facoltativo) Per aggiungere altri dati, scegli **Aggiungi dati** in alto a destra. 

   1. Scegli **Cambia origine dati** e scegli un'origine dati diversa. 

   1. Segui le istruzioni dell'interfaccia utente per completare l'aggiunta dei dati. 

   1. Dopo aver aggiunto nuovi dati allo stesso set di dati, scegli **Configura questo join** (i due punti rossi). Imposta un join per ogni tabella aggiuntiva. 

   1. Se desideri aggiungere campi calcolati, scegli **Aggiungi campo calcolato**. 

   1. Per usare Sagemaker, scegli **Augment** with. SageMaker Questa opzione è disponibile solo nell' QuickSight edizione Enterprise.

   1. Deseleziona tutti i campi che desideri omettere.

   1. Aggiorna tutti i tipi di dati che desideri modificare.

1. Al termine, scegli **Salva** per salvare e chiudere il set di dati. 

## Crea una nuova analisi per Timestream
<a name="Quicksight.create-analysis"></a>

1. Assicurati di aver configurato le autorizzazioni appropriate per consentire QuickSight ad Amazon di accedere ad Amazon Timestream, come descritto in. [Accesso ad Amazon Timestream da QuickSight](#Quicksight.accessing)

1. Scegli **Analisi** sulla sinistra.

1. Seleziona una delle seguenti opzioni:
   + Per creare una nuova analisi, scegli **Nuova analisi** sulla destra.
   + Per aggiungere il set di dati Timestream a un'analisi esistente, apri l'analisi che desideri modificare. Scegli l'icona a forma di matita in alto a sinistra, quindi **Aggiungi** set di dati.

1. Inizia la prima visualizzazione dei dati scegliendo i campi a sinistra. 

1. Per ulteriori informazioni, consulta [Working with Analyses - Amazon QuickSight ](https://docs.aws.amazon.com/quicksight/latest/user/working-with-analyses.html)

## Tutorial video
<a name="Quicksight.video-tutorial"></a>

Questo [video](https://youtu.be/TzW4HWl-L8s) spiega come Quick funziona con Timestream.

# Amazon SageMaker AI
<a name="Sagemaker"></a>

 Puoi usare Amazon SageMaker Notebooks per integrare i tuoi modelli di machine learning con Amazon Timestream. Per aiutarti a iniziare, abbiamo creato un esempio di SageMaker Notebook che elabora i dati di Timestream. I dati vengono inseriti in Timestream da un'applicazione Python multithread che invia continuamente dati. Il codice sorgente per l'esempio SageMaker Notebook e l'applicazione Python di esempio sono disponibili in. GitHub 

1. Create un database e una tabella seguendo le istruzioni descritte in [Creazione di un database](console_timestream.md#console_timestream.db.using-console) and[Creare una tabella](console_timestream.md#console_timestream.table.using-console). 

1. Clona il GitHub repository per l'applicazione di [esempio Python multithread](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/tools/python/continuous-ingestor) seguendo le istruzioni di. [ GitHub](https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/cloning-a-repository)

1. Clona il GitHub repository per il Timestream Notebook di [esempio seguendo le istruzioni di](https://github.com/awslabs/amazon-timestream-tools/blob/master/integrations/sagemaker). SageMaker [ GitHub](https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/cloning-a-repository) 

1. [Esegui l'applicazione per l'inserimento continuo di dati in Timestream seguendo le istruzioni nel README.](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/continuous-ingestor/README.md)

1. [Segui le istruzioni per creare un bucket Amazon S3 per Amazon SageMaker come descritto qui.](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-config-permissions.html)

1. Crea un' SageMaker istanza Amazon con l'ultima versione di boto3 installata: oltre alle istruzioni descritte [qui](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-setup-working-env.html), segui i passaggi seguenti: 

   1. **Nella pagina **Crea un'istanza notebook**, fai clic su Configurazione aggiuntiva**

   1. Fai clic su **Configurazione del ciclo di vita *(opzionale)*** e seleziona **Crea una nuova** configurazione del ciclo di vita

   1. Nella casella *Create lifecycle configuration* wizard, effettuate le seguenti operazioni:

      1. Inserisci il nome desiderato per la configurazione, ad es. `on-start`

      1. [Nello script Start Notebook, copia e incolla il contenuto dello script da Github](https://github.com/aws-samples/amazon-sagemaker-notebook-instance-lifecycle-config-samples/blob/master/scripts/install-pip-package-single-environment/on-start.sh) 

      1. Sostituisci `PACKAGE=scipy` con `PACKAGE=boto3` nello script incollato.

1. Fai clic su **Crea configurazione**

1. Vai al servizio IAM nella console di AWS gestione e trova il ruolo di SageMaker esecuzione appena creato per l'istanza del notebook.

1. Allega la policy IAM for `AmazonTimestreamFullAccess` al ruolo di esecuzione.
**Nota**  
La policy `AmazonTimestreamFullAccess` IAM non è limitata a risorse specifiche e non è adatta all'uso in produzione. Per un sistema di produzione, prendi in considerazione l'utilizzo di politiche che limitano l'accesso a risorse specifiche.

1. Quando lo stato dell'istanza del notebook è **InService**, scegli **Open Jupyter** per avviare un SageMaker Notebook per l'istanza

1.  **Carica i file `timestreamquery.py` e `Timestream_SageMaker_Demo.ipynb` inseriscili nel Notebook selezionando il pulsante Carica**

1. Scegliere `Timestream_SageMaker_Demo.ipynb`
**Nota**  
**Se vedi un pop-up con **Kernel not found**, scegli **conda\$1python3** e fai clic su Set Kernel.**

1. Modifica`DB_NAME`, `TABLE_NAME``bucket`, e in modo che corrispondano al nome del database, `ENDPOINT` al nome della tabella, al nome del bucket S3 e alla regione per i modelli di addestramento.

1. Scegli l'icona di **riproduzione** per eseguire le singole celle

1. Quando arrivi alla cella`Leverage Timestream to find hosts with average CPU utilization across the fleet`, assicurati che l'output restituisca almeno 2 nomi host.
**Nota**  
Se nell'output sono presenti meno di 2 nomi host, potrebbe essere necessario rieseguire l'applicazione Python di esempio che inserisce i dati in Timestream con un numero maggiore di thread e su scala host. 

1. Quando arrivate alla cella, modificatela in base alle risorse richieste per il vostro `Train a Random Cut Forest (RCF) model using the CPU utilization history` lavoro di formazione `train_instance_type`

1. Quando arrivi alla cella`Deploy the model for inference`, modificala in `instance_type` base ai requisiti di risorse per il tuo lavoro di inferenza
**Nota**  
Potrebbero essere necessari alcuni minuti per addestrare il modello. Al termine dell'addestramento, nell'output della cella verrà visualizzato il messaggio **Completato - Training job completato**.

1. Esegui la cella `Stop and delete the endpoint` per ripulire le risorse. Puoi anche interrompere ed eliminare l'istanza dalla SageMaker console

# Amazon SQS
<a name="SQS"></a>

## Utilizzo di EventBridge Pipes per inviare dati Amazon SQS a Timestream
<a name="SQS-via-pipes"></a>

Puoi utilizzare EventBridge Pipes per inviare dati da una coda Amazon SQS a un Amazon Timestream for table. LiveAnalytics 

Le pipe sono destinate point-to-point alle integrazioni tra sorgenti e destinazioni supportate, con supporto per trasformazioni e arricchimenti avanzati. Le pipe riducono la necessità di conoscenze specializzate e codice di integrazione durante lo sviluppo di architetture basate sugli eventi. Per configurare una pipe, si sceglie l'origine, si aggiungono filtri facoltativi, si definisce l'arricchimento facoltativo e si sceglie la destinazione per i dati dell'evento.

![\[Una sorgente invia gli eventi a una EventBridge pipe, che filtra e indirizza gli eventi corrispondenti alla destinazione.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/pipes-overview_shared_architecture.png)


Per ulteriori informazioni su EventBridge Pipes, consultate [EventBridge Pipes](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-pipes.html) nella *Guida EventBridge per l'utente*. Per informazioni sulla configurazione di una pipe per inviare eventi a un Amazon LiveAnalytics Timestream for table [EventBridge ,](https://docs.aws.amazon.com/eventbridge/latest/userguide/pipes-targets-specifics.html#pipes-targets-specifics-timestream) consulta le specifiche del target Pipes.

# Utilizzo DBeaver per lavorare con Amazon Timestream
<a name="DBeaver"></a>

[DBeaver](https://dbeaver.io/)è un client SQL universale gratuito che può essere utilizzato per gestire qualsiasi database dotato di un driver JDBC. È ampiamente utilizzato dagli sviluppatori e dagli amministratori di database grazie alle sue solide capacità di visualizzazione, modifica e gestione dei dati.

Utilizzando le opzioni DBeaver di connettività cloud di Amazon, puoi connetterti DBeaver ad Amazon Timestream in modo nativo. DBeaver fornisce un'interfaccia completa e intuitiva per lavorare con i dati delle serie temporali direttamente dall'interno di un'applicazione. DBeaver Utilizzando le credenziali, consente inoltre l'accesso completo a tutte le interrogazioni che è possibile eseguire da un'altra interfaccia di interrogazione. Consente anche di creare grafici per una migliore comprensione e visualizzazione dei risultati delle query.

## Configurazione DBeaver per lavorare con Timestream
<a name="DBeaver-setup"></a>

Segui i seguenti passaggi per configurare l'utilizzo DBeaver di Timestream:

1. [Scarica e installa DBeaver](https://dbeaver.io/download/) sul tuo computer locale.

1. Avvia DBeaver, vai all'area di selezione del database, scegli **Serie temporali** nel riquadro a sinistra, quindi seleziona l'icona **Timestream** nel riquadro a destra:  
![\[DBeaver schermata che mostra come selezionare Timestream nell'area di selezione del database.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/DBeaver-01.png)

1. Nella finestra **Impostazioni di connessione Timestream**, inserisci tutte le informazioni necessarie per connetterti al tuo database Amazon Timestream. Assicurati che le chiavi utente che inserisci abbiano le autorizzazioni necessarie per accedere al tuo database Timestream. Inoltre, assicurati di mantenere le informazioni e le chiavi che inserisci in modo DBeaver sicuro e privato, come per qualsiasi informazione sensibile.  
![\[DBeaver schermata che mostra i campi di connessione per Timestream.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/DBeaver-02.png)

1. Verifica la connessione per assicurarti che tutto sia configurato correttamente:  
![\[DBeaver schermata che mostra un test di connessione riuscito.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/DBeaver-03.png)

1. Se il test di connessione ha esito positivo, ora puoi interagire con il tuo database Amazon Timestream proprio come faresti con qualsiasi altro database in esso. DBeaver Ad esempio, puoi accedere all'editor SQL o alla vista ER Diagram per eseguire le query:  
![\[DBeaver schermata che mostra una query Timestream eseguita dall'editor SQL.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/DBeaver-04.png)

1. DBeaver fornisce anche potenti strumenti di visualizzazione dei dati. Per utilizzarli, esegui la query, quindi seleziona l'icona del grafico per visualizzare il set di risultati. Lo strumento grafico può aiutarti a comprendere meglio le tendenze dei dati nel tempo.

L'associazione di Amazon DBeaver Timestream a crea un ambiente efficace per la gestione dei dati delle serie temporali. Puoi integrarlo perfettamente nel tuo flusso di lavoro esistente per migliorare la produttività e l'efficienza.

# Grafana
<a name="Grafana"></a>

 Puoi visualizzare i dati delle tue serie temporali e creare avvisi utilizzando Grafana. [Per aiutarti a iniziare con la visualizzazione dei dati, abbiamo creato una dashboard di esempio in Grafana che visualizza i dati inviati a Timestream da un'applicazione Python e un video tutorial che descrive la configurazione.](https://youtu.be/pilkz645cs4) 

**Topics**
+ [Applicazione di esempio](#Grafana.sample-app)
+ [Tutorial video](#Grafana.video-tutorial)

## Applicazione di esempio
<a name="Grafana.sample-app"></a>

1.  Crea un database e una tabella in Timestream seguendo le istruzioni descritte in per ulteriori informazioni. [Creazione di un database](console_timestream.md#console_timestream.db.using-console) 
**Nota**  
 Il nome del database e il nome della tabella predefiniti per la dashboard Grafana sono impostati rispettivamente su GrafanaDB e GrafanaTable. Usa questi nomi per ridurre al minimo la configurazione. 

1. Installa [Python 3.7](https://www.python.org/downloads/) o versioni successive.

1.  [Installa e configura Timestream Python](getting-started.python.md) SDK s.

1.  Clona il GitHub repository per l'applicazione [Python multithread inserendo](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/tools/python/continuous-ingestor) continuamente dati in Timestream seguendo le istruzioni di. [GitHub](https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/cloning-a-repository)

1. [Esegui l'applicazione per importare continuamente dati in Timestream seguendo le istruzioni nel README.](https://github.com/awslabs/amazon-timestream-tools/blob/mainline/tools/python/continuous-ingestor/README.md) 

1. [Scopri come creare e utilizzare le risorse di Amazon Managed Grafana](https://docs.aws.amazon.com/grafana/latest/userguide/getting-started-with-AMG.html) o completa Install [Grafana](https://grafana.com/docs/grafana/latest/installation/).

1. Se installi Grafana anziché usare Amazon Managed Grafana, completa Installazione di Amazon [Timestream](https://grafana.com/grafana/plugins/grafana-timestream-datasource/?tab=installation/) su Grafana Cloud.

1. Apri la dashboard Grafana utilizzando un browser a tua scelta. [Se hai installato Grafana localmente, puoi seguire le istruzioni descritte nella documentazione di Grafana per accedere.](https://grafana.com/docs/grafana/latest/getting-started/getting-started/#log-in-for-the-first-time)

1. Dopo aver avviato Grafana, vai su Datasources, fai clic su Aggiungi origine dati, cerca Timestream e seleziona l'origine dati Timestream.

1. Configura il provider di autenticazione e la regione e fai clic su Salva e prova.

1. Imposta le macro predefinite.

   1. Imposta \$1\$1\$1database sul nome del tuo database Timestream (ad esempio GrafanADB).

   1. Imposta \$1\$1\$1table sul nome della tua tabella Timestream (ad esempio GrafanaTable).

   1. Imposta \$1\$1\$1measure sulla misura più comunemente usata dalla tabella.

1. Fai clic su Salva e prova.

1. Fai clic sulla scheda Dashboard.

1. Fai clic su Importa per importare la dashboard.

1. Fate doppio clic sulla dashboard dell'applicazione di esempio.

1. Fai clic sulle impostazioni del pannello di controllo.

1. Seleziona Variabili.

1. Modifica dbName e TableName in modo che corrispondano ai nomi del database e della tabella Timestream.

1. Fai clic su Save (Salva).

1. Aggiorna la dashboard.

1. Per creare avvisi, segui le istruzioni descritte nella documentazione di Grafana [per configurare le regole di avviso gestite da Grafana](https://grafana.com/docs/grafana/latest/alerting/alerting-rules/create-grafana-managed-rule/).

1. [Per risolvere i problemi relativi agli avvisi, segui le istruzioni descritte nella documentazione Grafana per la risoluzione dei problemi.](https://grafana.com/docs/grafana/latest/troubleshooting/)

1. Per ulteriori informazioni, consulta la [documentazione Grafana](https://grafana.com/docs/).

## Tutorial video
<a name="Grafana.video-tutorial"></a>

Questo [video](https://youtu.be/pilkz645cs4) spiega come Grafana funziona con Timestream.

# Utilizzo SquaredUp per lavorare con Amazon Timestream
<a name="SquaredUp"></a>

[SquaredUp](https://SquaredUp.com/)è una piattaforma di osservabilità che si integra con Amazon Timestream. Puoi utilizzare l'intuitivo designer SquaredUp di dashboard per visualizzare, analizzare e monitorare i dati delle serie temporali. Le dashboard possono essere condivise pubblicamente o privatamente e possono essere creati canali di notifica per avvisare l'utente quando cambia lo stato di salute di un monitor.

## Utilizzo SquaredUp con Amazon Timestream
<a name="SquaredUp-using"></a>

1. [Iscriviti [SquaredUp](https://squaredup.com/)](https://app.squaredup.com/?signup=true)e inizia gratuitamente.

1. Aggiungi una [fonte di AWS dati](https://squaredup.com/cloud/pluginsetup-aws).

1. Crea un riquadro del dashboard che utilizza il flusso di dati [Timestream Query](https://squaredup.com/cloud/AWS-Timestream-Query).

1. Facoltativamente, abilita il monitoraggio del riquadro, crea un canale di notifica o condividi la dashboard pubblicamente o privatamente.

1. Facoltativamente, crea altri riquadri per visualizzare i dati di Timestream insieme ai dati degli altri strumenti di monitoraggio e osservabilità.

# Telegraf open source
<a name="Telegraf"></a>

 Puoi utilizzare il plug-in Timestream for LiveAnalytics output per Telegraf per scrivere metriche in Timestream direttamente da Telegraf open source. LiveAnalytics

 Questa sezione fornisce una spiegazione su come installare Telegraf con il plug-in Timestream for output, come eseguire Telegraf con il plug-in Timestream for LiveAnalytics output e come Telegraf open source funziona con Timestream for. LiveAnalytics LiveAnalytics

**Topics**
+ [LiveAnalytics Installazione di Telegraf con il plug-in Timestream for output](Telegraf.installing-output-plugin.md)
+ [Esecuzione di Telegraf con il plug-in Timestream for output LiveAnalytics](Telegraf.running-output-plugin.title.md)
+ [Mappatura delle Telegraf/InfluxDB metriche sul Timestream per il modello LiveAnalytics](Telegraf.how-it-works.md)

# LiveAnalytics Installazione di Telegraf con il plug-in Timestream for output
<a name="Telegraf.installing-output-plugin"></a>

A partire dalla versione 1.16, il plug-in Timestream for LiveAnalytics output è disponibile nella versione ufficiale di Telegraf. [Per installare il plug-in di output sulla maggior parte dei principali sistemi operativi, segui i passaggi descritti nella documentazione di Telegraf. InfluxData ](https://docs.influxdata.com/telegraf/v1.16/introduction/installation/) Per l'installazione sul sistema operativo Amazon Linux 2, segui le istruzioni riportate di seguito.

## Installazione di Telegraf con il LiveAnalytics plug-in Timestream for output su Amazon Linux 2
<a name="w2aab7c44c35b9b5"></a>

 Per installare Telegraf con il plug-in Timestream Output su Amazon Linux 2, procedi nel seguente modo. 

1. Installa Telegraf usando il gestore di pacchetti. `yum`

   ```
   cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
   [influxdb]
   name = InfluxDB Repository - RHEL \$releasever
   baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
   enabled = 1
   gpgcheck = 1
   gpgkey = https://repos.influxdata.com/influxdb.key
   EOF
   ```

1. Eseguire il seguente comando seguente.

   ```
   sudo sed -i "s/\$releasever/$(rpm -E %{rhel})/g" /etc/yum.repos.d/influxdb.repo
   ```

1. Installa e avvia Telegraf.

   ```
   sudo yum install telegraf
   sudo service telegraf start
   ```

# Esecuzione di Telegraf con il plug-in Timestream for output LiveAnalytics
<a name="Telegraf.running-output-plugin.title"></a>

Puoi seguire le istruzioni riportate di seguito per eseguire Telegraf con il plugin Timestream for. LiveAnalytics 

1. Genera una configurazione di esempio usando Telegraf.

   ```
   telegraf --section-filter agent:inputs:outputs --input-filter cpu:mem --output-filter timestream config > example.config
   ```

1. Crea un database in Timestream [utilizzando la console di gestione, la](console_timestream.md#console_timestream.db.using-console) [CLI](https://docs.aws.amazon.com/cli/latest/reference/timestream-write/create-database.html) o. [SDKs](getting-started-sdks.md)

1. Nel `example.config` file, aggiungi il nome del tuo database modificando la seguente chiave nella sezione. `[[outputs.timestream]] `

   ```
   database_name = "yourDatabaseNameHere"
   ```

1. Per impostazione predefinita, Telegraf creerà una tabella. Se desideri creare una tabella manualmente, imposta `create_table_if_not_exists` `false` e segui le istruzioni per creare una tabella [utilizzando la console di gestione](console_timestream.md#console_timestream.table.using-console), la [CLI o](https://docs.aws.amazon.com/cli/latest/reference/timestream-write/create-table.html). [SDKs](getting-started-sdks.md)

1. Nel file *example.config*, configura le credenziali nella sezione. `[[outputs.timestream]] ` Le credenziali devono consentire le seguenti operazioni.

   ```
   timestream:DescribeEndpoints
   timestream:WriteRecords
   ```
**Nota**  
Se lasci `create_table_if_not_exists` impostato su`true`, includi:  

   ```
   timestream:CreateTable
   ```
**Nota**  
Se lo `describe_database_on_start` imposti`true`, includi quanto segue.  

   ```
   timestream:DescribeDatabase
   ```

1. Puoi modificare il resto della configurazione in base alle tue preferenze.

1. Quando hai finito di modificare il file di configurazione, esegui Telegraf con quanto segue.

   ```
   ./telegraf --config example.config
   ```

1. Le metriche dovrebbero apparire entro pochi secondi, a seconda della configurazione dell'agente. Dovresti vedere anche le nuove tabelle, *cpu* e *mem*, nella console Timestream.

# Mappatura delle Telegraf/InfluxDB metriche sul Timestream per il modello LiveAnalytics
<a name="Telegraf.how-it-works"></a>

 Quando si scrivono dati da Telegraf a Timestream for, i dati vengono mappati come segue. LiveAnalytics
+ Il timestamp viene scritto come campo temporale.
+ I tag vengono scritti come dimensioni.
+ I campi sono scritti come misure.
+ Le misurazioni sono per lo più scritte come nomi di tabelle (ne parleremo più avanti).

Il plug-in Timestream for LiveAnalytics output per Telegraf offre diverse opzioni per l'organizzazione e l'archiviazione dei dati in Timestream for. LiveAnalytics Questo può essere descritto con un esempio che inizia con i dati in formato protocollo di linea.

`weather,location=us-midwest,season=summer temperature=82,humidity=71 1465839830100400200 airquality,location=us-west no2=5,pm25=16 1465839830100400200`

Di seguito vengono descritti i dati.
+ I nomi delle misurazioni sono `weather` e`airquality`.
+ I tag sono `location` e`season`.
+ I campi sono `temperature``humidity`,`no2`, e`pm25`.

**Topics**
+ [Memorizzazione dei dati in più tabelle](#Telegraf.how-it-works.multi-table-single-measure.title)
+ [Memorizzazione dei dati in un'unica tabella](#Telegraf.how-it-works.single-table-single-measure.title)

## Memorizzazione dei dati in più tabelle
<a name="Telegraf.how-it-works.multi-table-single-measure.title"></a>

Puoi scegliere di creare una tabella separata per misurazione e memorizzare ogni campo in una riga separata per tabella.

La configurazione è`mapping_mode = "multi-table"`.
+ Il Timestream for LiveAnalytics adapter creerà due tabelle, `weather` vale a dire e. `airquality`
+ Ogni riga della tabella conterrà un solo campo.

Il Timestream risultante per le LiveAnalytics tabelle, `weather` e`airquality`, avrà il seguente aspetto.


**`weather`**  

| time | location | stagione | measure\$1name | measure\$1value::bigint | 
| --- | --- | --- | --- | --- | 
|  2016-06-13 17:43:50  |  Stati Uniti-Midwest  |  estate  |  temperature  |  82  | 
|  2016-06-13 17:43:50  |  Stati Uniti-Midwest  |  estate  |  umidità  |  71  | 


**`airquality`**  

| time | location | measure\$1name | measure\$1value::bigint | 
| --- | --- | --- | --- | 
|  2016-06-13 17:43:50  |  Stati Uniti-Midwest  |  n° 2   |  5  | 
|  2016-06-13 17:43:50  |  Stati Uniti-Midwest  |  pm 25   |  16  | 

## Memorizzazione dei dati in un'unica tabella
<a name="Telegraf.how-it-works.single-table-single-measure.title"></a>

Puoi scegliere di memorizzare tutte le misurazioni in un'unica tabella e memorizzare ogni campo in una riga separata della tabella.

La configurazione è`mapping_mode = "single-table"`. Sono disponibili due configurazioni aggiuntive quando si utilizza`single-table`, `single_table_name` e`single_table_dimension_name_for_telegraf_measurement_name`.
+ Il plug-in Timestream for LiveAnalytics output creerà una singola tabella con un nome *<single\$1table\$1name>* che include una colonna. *<single\$1table\$1dimension\$1name\$1for\$1telegraf\$1measurement\$1name>*
+ La tabella può contenere più campi in un'unica riga della tabella.

Il Timestream risultante per la LiveAnalytics tabella sarà simile a questo.


**`weather`**  

| time | location | stagione | *<single\$1table\$1dimension\$1name\$1 for\$1telegraf\$1measurement\$1name>* | measure\$1name | measure\$1value::bigint | 
| --- | --- | --- | --- | --- | --- | 
|  2016-06-13 17:43:50  |  Stati Uniti-Midwest  |  estate  |  meteo  |  temperature  |  82  | 
|  2016-06-13 17:43:50  |  Stati Uniti-Midwest  |  estate  |  meteo  |  umidità  |  71  | 
|  2016-06-13 17:43:50  |  Stati Uniti-Midwest  |  estate  |  qualità dell'aria  |  n. 2  |  5  | 
|  2016-06-13 17:43:50  |  Stati Uniti-Midwest  |  estate  |  meteo  |  pm 25  |  16  | 

# JDBC
<a name="JDBC"></a>

 [Puoi utilizzare una connessione Java Database Connectivity (JDBC) per connettere Timestream LiveAnalytics ai tuoi strumenti di business intelligence e ad altre applicazioni, come SQL Workbench.](https://www.sql-workbench.eu/) Il driver Timestream for LiveAnalytics JDBC attualmente supporta l'SSO con Okta e Microsoft Azure AD. 

**Topics**
+ [Configurazione del driver JDBC per Timestream per LiveAnalytics](JDBC.configuring.md)
+ [Proprietà di connessione](JDBC.connection-properties.md)
+ [Esempi di URL JDBC](JDBC.url-examples.md)
+ [Configurazione di Timestream per l'autenticazione single LiveAnalytics sign-on JDBC con Okta](JDBC.SSOwithOkta.md)
+ [Configurazione di Timestream per l'autenticazione Single Sign-On LiveAnalytics JDBC con Microsoft Azure AD](JDBC.withAzureAD.md)

# Configurazione del driver JDBC per Timestream per LiveAnalytics
<a name="JDBC.configuring"></a>

Segui i passaggi seguenti per configurare il driver JDBC. 

**Topics**
+ [Timestream per il driver JDBC LiveAnalytics JARs](#w2aab7c44c37b7b7)
+ [Timestream per la classe del driver LiveAnalytics JDBC e il formato URL](#w2aab7c44c37b7b9)
+ [Applicazione di esempio](#w2aab7c44c37b7c11)

## Timestream per il driver JDBC LiveAnalytics JARs
<a name="w2aab7c44c37b7b7"></a>

 Puoi ottenere il driver Timestream for LiveAnalytics JDBC tramite download diretto o aggiungendo il driver come dipendenza Maven. 
+  *Come download diretto:.* Per scaricare direttamente il driver Timestream for LiveAnalytics JDBC, completa i seguenti passaggi:

  1. [Passa a /releases https://github.com/awslabs/ amazon-timestream-driver-jdbc](https://github.com/awslabs/amazon-timestream-driver-jdbc/releases) 

  1. Puoi `amazon-timestream-jdbc-1.0.1-shaded.jar` utilizzarlo direttamente con i tuoi strumenti e applicazioni di business intelligence

  1. `amazon-timestream-jdbc-1.0.1-javadoc.jar`Scaricatelo in una directory a vostra scelta.

  1. Nella directory in cui hai scaricato`amazon-timestream-jdbc-1.0.1-javadoc.jar`, esegui il seguente comando per estrarre i file HTML Javadoc: 

     ```
     jar -xvf amazon-timestream-jdbc-1.0.1-javadoc.jar
     ```
+  *Come dipendenza Maven:* per aggiungere il driver Timestream for LiveAnalytics JDBC come dipendenza Maven, completa i seguenti passaggi:

  1. Naviga e apri il file dell'applicazione in un editor a tua scelta. `pom.xml`

  1. Aggiungi il driver JDBC come dipendenza nel file dell'applicazione: `pom.xml`

     ```
     <!-- https://mvnrepository.com/artifact/software.amazon.timestream/amazon-timestream-jdbc -->
     <dependency>
         <groupId>software.amazon.timestream</groupId>
         <artifactId>amazon-timestream-jdbc</artifactId>
         <version>1.0.1</version>
     </dependency>
     ```

## Timestream per la classe del driver LiveAnalytics JDBC e il formato URL
<a name="w2aab7c44c37b7b9"></a>

 La classe di driver per il driver Timestream for JDBC è: LiveAnalytics 

```
software.amazon.timestream.jdbc.TimestreamDriver
```

 Il driver JDBC Timestream richiede il seguente formato di URL JDBC: 

```
jdbc:timestream:
```

 Per specificare le proprietà del database tramite l'URL JDBC, utilizza il seguente formato URL: 

```
jdbc:timestream://
```

## Applicazione di esempio
<a name="w2aab7c44c37b7c11"></a>

Per aiutarti a iniziare a usare Timestream for LiveAnalytics con JDBC, abbiamo creato un'applicazione di esempio completamente funzionale in. GitHub

1. [Crea un database con dati di esempio seguendo le istruzioni descritte qui.](getting-started.db-w-sample-data.md#getting-started.db-w-sample-data.using-console)

1. Clona il GitHub repository per l'[applicazione di esempio per JDBC seguendo le istruzioni](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/integrations/jdbc) di. [GitHub](https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories/cloning-a-repository)

1. Segui le istruzioni nel [README](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/integrations/jdbc/README.md) per iniziare a usare l'applicazione di esempio.

# Proprietà di connessione
<a name="JDBC.connection-properties"></a>

 Il driver Timestream for LiveAnalytics JDBC supporta le seguenti opzioni: 

**Topics**
+ [Opzioni di autenticazione di base](#JDBC.connection-properties.basic-auth)
+ [Opzione standard di informazioni sul cliente](#JDBC.connection-properties.standard-client)
+ [Opzione di configurazione del driver](#JDBC.connection-properties.driver-config)
+ [Opzione SDK](#JDBC.connection-properties.sdk-options)
+ [Opzione di configurazione dell'endpoint](#JDBC.connection-properties.endpoint-config)
+ [Opzioni del fornitore di credenziali](#JDBC.connection-properties.cred-providers)
+ [Opzioni di autenticazione basate su SAML per Okta](#JDBC.connection-properties.okta)
+ [Opzioni di autenticazione basate su SAML per Azure AD](#JDBC.connection-properties.azure-ad)

**Nota**  
 Se non viene fornita nessuna delle proprietà, il driver Timestream for LiveAnalytics JDBC utilizzerà la catena di credenziali predefinita per caricare le credenziali. 

**Nota**  
 Tutte le chiavi di proprietà fanno distinzione tra maiuscole e minuscole. 

## Opzioni di autenticazione di base
<a name="JDBC.connection-properties.basic-auth"></a>

La tabella seguente descrive le opzioni di autenticazione di base disponibili.


| Opzione | Description | Predefinita | 
| --- | --- | --- | 
|  AccessKeyId  |  L'id della chiave di accesso dell' AWS utente.  |  NONE  | 
|  SecretAccessKey  |  La chiave di accesso segreta AWS dell'utente.  |  NONE  | 
|  SessionToken  |  Il token di sessione temporaneo necessario per accedere a un database con autenticazione a più fattori (MFA) abilitata.  |  NONE  | 

## Opzione standard di informazioni sul cliente
<a name="JDBC.connection-properties.standard-client"></a>

La tabella seguente descrive l'opzione Standard Client Info.


| Opzione | Description | Predefinita | 
| --- | --- | --- | 
|  ApplicationName  |  Il nome dell'applicazione che attualmente utilizza la connessione. `ApplicationName`viene utilizzato per scopi di debug e non verrà comunicato al servizio Timestream. LiveAnalytics  |  Il nome dell'applicazione rilevato dal driver.  | 

## Opzione di configurazione del driver
<a name="JDBC.connection-properties.driver-config"></a>

La tabella seguente descrive l'opzione di configurazione del driver.


| Opzione | Description | Predefinita | 
| --- | --- | --- | 
|  EnableMetaDataPreparedStatement  |  Abilita il driver Timestream for LiveAnalytics JDBC per cui restituire i metadati`PreparedStatements`, ma ciò comporterà un costo aggiuntivo con Timestream per il recupero dei metadati. LiveAnalytics   |  FALSE  | 
|  Region  |  L'area del database.  |  us-east-1  | 

## Opzione SDK
<a name="JDBC.connection-properties.sdk-options"></a>

La tabella seguente descrive l'opzione SDK.


| Opzione | Description | Predefinita | 
| --- | --- | --- | 
|  RequestTimeout  |  Il tempo in millisecondi in cui l' AWS SDK attenderà una richiesta di query prima del timeout. Il valore non positivo disabilita il timeout della richiesta.  |  0  | 
|  SocketTimeout  |  Il tempo in millisecondi in cui l' AWS SDK attenderà il trasferimento dei dati su una connessione aperta prima del timeout. Il valore non deve essere negativo. Un valore di `0` disabilita il timeout del socket.  |  50000  | 
|  MaxRetryCountClient  |  Il numero massimo di tentativi per errori ripetibili con codici di errore 5XX nell'SDK. Il valore non deve essere negativo.  |  NONE  | 
|  MaxConnections  |  Il numero massimo di connessioni HTTP aperte contemporaneamente al servizio Timestream for. LiveAnalytics Il valore deve essere positivo.  |  50  | 

## Opzione di configurazione dell'endpoint
<a name="JDBC.connection-properties.endpoint-config"></a>

La tabella seguente descrive l'opzione di configurazione degli endpoint.


| Opzione | Description | Predefinita | 
| --- | --- | --- | 
|  Endpoint  |  L'endpoint per il servizio Timestream for. LiveAnalytics   |  NONE  | 

## Opzioni del fornitore di credenziali
<a name="JDBC.connection-properties.cred-providers"></a>

La tabella seguente descrive le opzioni disponibili del Credential Provider.


| Opzione | Description | Predefinita | 
| --- | --- | --- | 
|  AwsCredentialsProviderClass  |  Una delle `PropertiesFileCredentialsProvider` o `InstanceProfileCredentialsProvider` da utilizzare per l'autenticazione.  |  NONE  | 
|  CustomCredentialsFilePath  |  Il percorso di un file di proprietà contenente credenziali AWS di sicurezza `accessKey` e`secretKey`. È richiesto solo se `AwsCredentialsProviderClass` è specificato come`PropertiesFileCredentialsProvider`.  |  NONE  | 

## Opzioni di autenticazione basate su SAML per Okta
<a name="JDBC.connection-properties.okta"></a>

La tabella seguente descrive le opzioni di autenticazione basate su SAML disponibili per Okta.


| Opzione | Description | Predefinita | 
| --- | --- | --- | 
|  IdpName  |  Il nome dell'Identity Provider (Idp) da utilizzare per l'autenticazione basata su SAML. Uno dei nostri. `Okta` `AzureAD`  |  NONE  | 
|  IdpHost  |  Il nome host dell'Idp specificato.  |  NONE  | 
|  IdpUserName  |  Il nome utente per l'account Idp specificato.  |  NONE  | 
|  IdpPassword  |  La password per l'account Idp specificato.  |  NONE  | 
|  OktaApplicationID  |  L'ID univoco fornito da OKTA associato all'applicazione Timestream for. LiveAnalytics `AppId`può essere trovato nel `entityID` campo fornito nei metadati dell'applicazione. Considerate il seguente esempio: `entityID = http://www.okta.com//IdpAppID`  |  NONE  | 
|  RoleARN  |  L'Amazon Resource Name (ARN) del ruolo che il chiamante sta assumendo.  |  NONE  | 
|  IDPArn  |  L'Amazon Resource Name (ARN) del provider SAML in IAM che descrive l'Idp.  |  NONE  | 

## Opzioni di autenticazione basate su SAML per Azure AD
<a name="JDBC.connection-properties.azure-ad"></a>

La tabella seguente descrive le opzioni di autenticazione basate su SAML disponibili per Azure AD.


| Opzione | Description | Predefinita | 
| --- | --- | --- | 
|  IdpName  |  Il nome dell'Identity Provider (Idp) da usare per l'autenticazione basata su SAML. Uno dei nostri. `Okta` `AzureAD`  |  NONE  | 
|  IdpHost  |  Il nome host dell'Idp specificato.  |  NONE  | 
|  IdpUserName  |  Il nome utente per l'account Idp specificato.  |  NONE  | 
|  IdpPassword  |  La password per l'account Idp specificato.  |  NONE  | 
|  AADApplicationID  |  L'id univoco dell'applicazione registrata in Azure AD.  |  NONE  | 
|  AADClientSegreto  |  Il segreto del client associato all'applicazione registrata su Azure AD usato per autorizzare il recupero dei token.  |  NONE  | 
|  AADTenant  |  L'ID del tenant di Azure AD.  |  NONE  | 
|  IDPArn  |  L'Amazon Resource Name (ARN) del provider SAML in IAM che descrive l'Idp.  |  NONE  | 

# Esempi di URL JDBC
<a name="JDBC.url-examples"></a>

 Questa sezione descrive come creare un URL di connessione JDBC e fornisce esempi. Per specificare le [proprietà di connessione opzionali](JDBC.connection-properties.md), utilizzate il seguente formato URL:

```
jdbc:timestream://PropertyName1=value1;PropertyName2=value2... 
```

**Nota**  
Tutte le proprietà di connessione sono opzionali. Tutte le chiavi di proprietà fanno distinzione tra maiuscole e minuscole.

Di seguito sono riportati alcuni esempi di connessione JDBC. URLs

*Esempio con opzioni di autenticazione e regione di base:*  

```
jdbc:timestream://AccessKeyId=<myAccessKeyId>;SecretAccessKey=<mySecretAccessKey>;SessionToken=<mySessionToken>;Region=us-east-1
```

*Esempio con informazioni sul client, regione e opzioni SDK:*  

```
jdbc:timestream://ApplicationName=MyApp;Region=us-east-1;MaxRetryCountClient=10;MaxConnections=5000;RequestTimeout=20000
```

*Connect utilizzando la catena di provider di credenziali predefinita con AWS credenziali impostate nelle variabili di ambiente:*  

```
jdbc:timestream
```

*Connettiti utilizzando la catena di provider di credenziali predefinita con AWS credenziali impostate nell'URL di connessione:*  

```
jdbc:timestream://AccessKeyId=<myAccessKeyId>;SecretAccessKey=<mySecretAccessKey>;SessionToken=<mySessionToken>
```

*Connect utilizzando PropertiesFileCredentialsProvider come metodo di autenticazione:*  

```
jdbc:timestream://AwsCredentialsProviderClass=PropertiesFileCredentialsProvider;CustomCredentialsFilePath=<path to properties file>
```

*Connect utilizzando InstanceProfileCredentialsProvider come metodo di autenticazione:*  

```
jdbc:timestream://AwsCredentialsProviderClass=InstanceProfileCredentialsProvider
```

*Connect utilizzando le credenziali Okta come metodo di autenticazione:*  

```
jdbc:timestream://IdpName=Okta;IdpHost=<host>;IdpUserName=<name>;IdpPassword=<password>;OktaApplicationID=<id>;RoleARN=<roleARN>;IdpARN=<IdpARN>
```

*Connect usando le credenziali di Azure AD come metodo di autenticazione:*  

```
jdbc:timestream://IdpName=AzureAD;IdpUserName=<name>;IdpPassword=<password>;AADApplicationID=<id>;AADClientSecret=<secret>;AADTenant=<tenantID>;IdpARN=<IdpARN>
```

*Connect con un endpoint specifico:*  

```
jdbc:timestream://Endpoint=abc.us-east-1.amazonaws.com;Region=us-east-1
```

# Configurazione di Timestream per l'autenticazione single LiveAnalytics sign-on JDBC con Okta
<a name="JDBC.SSOwithOkta"></a>

 Timestream for LiveAnalytics supporta Timestream per l'autenticazione single sign-on JDBC con Okta. LiveAnalytics Per utilizzare Timestream per l'autenticazione single sign-on LiveAnalytics JDBC con Okta, completa ciascuna delle sezioni elencate di seguito. 

**Topics**
+ [Prerequisiti](aws-sso-with-okta-prerequisites.md)
+ [AWS federazione degli account in Okta](aws-account-federation-in-okta.md)
+ [Configurazione di Okta per SAML](aws-setting-up-okta-for-saml.md)

# Prerequisiti
<a name="aws-sso-with-okta-prerequisites"></a>

Assicurati di aver soddisfatto i seguenti prerequisiti prima di utilizzare Timestream per l'autenticazione single sign-on JDBC con Okta: LiveAnalytics
+ [Autorizzazioni di amministratore per creare il provider di identità e i ruoli AWS](security-iam.md).
+  Un account Okta (vai a [https://www.okta.com/login/](https://www.okta.com/login/)creare un account).
+ [Accesso ad Amazon LiveAnalytics Timestream](accessing.md) per.

Ora che hai completato i prerequisiti, puoi procedere a. [AWS federazione degli account in Okta](aws-account-federation-in-okta.md)

# AWS federazione degli account in Okta
<a name="aws-account-federation-in-okta"></a>

Il driver Timestream for LiveAnalytics JDBC supporta AWS Account Federation in Okta. Per configurare AWS Account Federation in Okta, completa i seguenti passaggi:

1. Accedi alla dashboard di amministrazione di Okta utilizzando il seguente URL:

   ```
   https://<company-domain-name>-admin.okta.com/admin/apps/active 
   ```
**Nota**  
 Sostituisci **< company-domain-name >** con il tuo nome di dominio. 

1. Dopo aver effettuato correttamente l'accesso, scegli **Aggiungi applicazione** e cerca **AWS Account Federation**.

1. **Scegli Aggiungi**

1. Cambia l'URL di accesso con l'URL appropriato.

1. Seleziona **Next** (Successivo).

1. Scegli **SAML 2.0** come metodo di **accesso**

1. Scegli i **metadati di Identity Provider per aprire il file XML dei metadati**. Salva il file localmente.

1. Lascia vuote tutte le altre opzioni di configurazione.

1. Seleziona **Done** (Fatto).

Ora che hai completato AWS Account Federation in Okta, puoi procedere a[Configurazione di Okta per SAML](aws-setting-up-okta-for-saml.md).

# Configurazione di Okta per SAML
<a name="aws-setting-up-okta-for-saml"></a>

1. Scegli la scheda **Sign On** (Accedi). **Scegli la visualizzazione.**

1. Scegli il pulsante **Istruzioni di configurazione** nella sezione **Impostazioni**.

**Trovare il documento di metadati Okta**

1. Per trovare il documento, vai a:

   ```
   https://<domain>-admin.okta.com/admin/apps/active
   ```
**Nota**  
 <domain>è il tuo nome di dominio univoco per il tuo account Okta. 

1. Scegli l'applicazione **AWS Account Federation**

1. Scegli la **scheda Accedi**

# Configurazione di Timestream per l'autenticazione Single Sign-On LiveAnalytics JDBC con Microsoft Azure AD
<a name="JDBC.withAzureAD"></a>

 Timestream for LiveAnalytics supporta Timestream per l'autenticazione LiveAnalytics Single Sign-On JDBC con Microsoft Azure AD. Per usare Timestream per l'autenticazione single sign-on LiveAnalytics JDBC con Microsoft Azure AD, completa ciascuna delle sezioni elencate di seguito. 

**Topics**
+ [Prerequisiti](JDBC.withAzureAD.prereqs.md)
+ [Configurazione di Azure AD](JDBC.withAzureAD.setUp.md)
+ [Configurazione di IAM Identity Provider e ruoli in AWS](JDBC.withAzureAD.IAM.md)

# Prerequisiti
<a name="JDBC.withAzureAD.prereqs"></a>

Assicurati di aver soddisfatto i seguenti prerequisiti prima di utilizzare Timestream per l'autenticazione single sign-on LiveAnalytics JDBC con Microsoft Azure AD:
+ [Autorizzazioni di amministratore per creare il provider di identità e i ruoli AWS](security-iam.md).
+ Un account Azure Active Directory (vai a [ https://azure.microsoft.com/en-ca/services/active-directory/](https://azure.microsoft.com/en-ca/services/active-directory/) per creare un account)
+ [Accesso ad Amazon LiveAnalytics Timestream](accessing.md) per.

# Configurazione di Azure AD
<a name="JDBC.withAzureAD.setUp"></a>

1. Accedi al portale di Azure

1. Scegli **Azure Active Directory** nell'elenco dei servizi di Azure. Questo reindirizzerà alla pagina Default Directory.

1. Scegli **Applicazioni aziendali** nella sezione **Gestisci** nella barra laterale

1. Scegli **\$1 Nuova applicazione**.

1. Trova e seleziona **Amazon Web Services**.

1. Scegli **Single Sign-On** nella sezione **Gestisci** nella barra laterale

1. Scegli **SAML** come metodo Single Sign-On

1. Nella sezione Configurazione SAML di base, inserisci il seguente URL sia per l'identificatore che per l'URL di risposta:

   ```
   https://signin.aws.amazon.com/saml
   ```

1. Seleziona **Salva**

1. Scarica il file XML dei metadati della federazione nella sezione Certificato di firma SAML. Verrà utilizzato in un secondo momento durante la creazione dell'IAM Identity Provider

1. Torna alla pagina Default Directory e scegli **Registrazioni app** in **Gestisci**.

1. Scegli **Timestream for LiveAnalytics dalla sezione** **Tutte** le applicazioni. La pagina verrà reindirizzata alla pagina Panoramica dell'applicazione
**Nota**  
Annota l'ID dell'applicazione (client) e l'ID della directory (tenant). Questi valori sono necessari per la creazione di una connessione.

1. Scegli **Certificati e segreti**

1. In **Client secrets**, crea un nuovo client secret con **\$1 New client secret**.
**Nota**  
Nota il segreto del client generato, poiché è necessario quando si crea una connessione a Timestream for. LiveAnalytics

1. **Nella barra laterale, sotto **Gestisci**, seleziona Autorizzazioni API**

1. Nella sezione **Autorizzazioni configurate**, usa **Aggiungi un'autorizzazione** per concedere ad Azure AD l'autorizzazione ad accedere a Timestream per. LiveAnalytics Scegli **Microsoft Graph** nella pagina Richiedi autorizzazioni API.

1. **Scegli **Autorizzazioni delegate e seleziona l'autorizzazione** User.Read**

1. **Scegli Aggiungi autorizzazioni**

1. Scegli **Concedi il consenso dell'amministratore per la directory predefinita**

# Configurazione di IAM Identity Provider e ruoli in AWS
<a name="JDBC.withAzureAD.IAM"></a>

 Completa ogni sezione seguente per configurare IAM for Timestream per l'autenticazione single sign-on LiveAnalytics JDBC con Microsoft Azure AD: 

**Topics**
+ [Crea un provider di identità SAML](#JDBC.withAzureAD.IAM.SAML)
+ [Creazione di un ruolo IAM](#JDBC.withAzureAD.IAM.roleForIAM)
+ [Creazione di una policy IAM](#JDBC.withAzureAD.IAM.policyForIAM)
+ [Approvvigionamento](#JDBC.withAzureAD.IAM.provisioning)

## Crea un provider di identità SAML
<a name="JDBC.withAzureAD.IAM.SAML"></a>

Per creare un provider di identità SAML per Timestream per l'autenticazione single sign-on LiveAnalytics JDBC con Microsoft Azure AD, completa i seguenti passaggi:

1.  AWS Accedi alla console di gestione

1. Scegli **Servizi** e seleziona **IAM** in Sicurezza, identità e conformità

1. Scegli i **provider di identità** in Gestione degli accessi

1. Scegli **Create Provider** e scegli **SAML** come tipo di provider. Inserisci il **nome del provider**. Questo esempio utilizzerà Azure. ADProvider

1. Carica il file XML Federation Metadata scaricato in precedenza

1. Scegli **Avanti**, quindi scegli **Crea**.

1. Al termine, la pagina verrà reindirizzata alla pagina dei provider di identità

## Creazione di un ruolo IAM
<a name="JDBC.withAzureAD.IAM.roleForIAM"></a>

Per creare un ruolo IAM per l'autenticazione Single Sign-on Timestream for LiveAnalytics JDBC con Microsoft Azure AD, completa i seguenti passaggi:

1. **Nella barra laterale, seleziona Ruoli in Gestione degli accessi**

1. Seleziona Create Role (Crea ruolo).

1. Scegli la **federazione SAML 2.0** come entità affidabile

1. Scegli il provider **Azure** AD

1. Scegli **Consenti l'accesso programmatico e alla console AWS di gestione**

1. Seleziona **Next: Permissions (Successivo: Autorizzazioni)**

1. Allega le politiche di autorizzazione o passa a Next:Tags

1. Aggiungi tag opzionali o continua con Next:Review

1. Immettere un nome di ruolo in Role name (Nome ruolo). Questo esempio utilizzerà Azure SAMLRole

1. Fornisci una descrizione del ruolo

1. Scegli **Crea ruolo** per completare

## Creazione di una policy IAM
<a name="JDBC.withAzureAD.IAM.policyForIAM"></a>

Per creare una policy IAM per l'autenticazione Single Sign-On Timestream for LiveAnalytics JDBC con Microsoft Azure AD, completa i seguenti passaggi:

1. **Nella barra laterale, scegli Politiche in Gestione degli accessi**

1. Scegli **Crea policy** e seleziona la scheda **JSON**

1. Aggiungi la seguente politica

------
#### [ JSON ]

****  

   ```
   {
   "Version":"2012-10-17",		 	 	 
   "Statement": [
       {
             "Effect": "Allow",
             "Action": [
                    "iam:ListRoles",
                    "iam:ListAccountAliases"
              ],
              "Resource": "*"
         }
   ]
   }
   ```

------

1. Selezionare **Creare policy**

1. Inserire un nome per la policy. Questo esempio utilizzerà TimestreamAccessPolicy.

1. Scegli **Crea politica**

1. Nella barra laterale, scegli **Ruoli** in Gestione degli accessi. 

1.  Scegli il **ruolo Azure AD** creato in precedenza e scegli **Allega policy** in Autorizzazioni.

1. Seleziona la policy di accesso creata in precedenza.

## Approvvigionamento
<a name="JDBC.withAzureAD.IAM.provisioning"></a>

Per fornire al provider di identità Timestream l'autenticazione Single Sign-On LiveAnalytics JDBC con Microsoft Azure AD, completa i seguenti passaggi:

1. Torna al portale di Azure

1. Scegli **Azure Active Directory** nell'elenco dei servizi di Azure. Questo reindirizzerà alla pagina Default Directory

1. Scegli **Applicazioni aziendali** nella sezione Gestisci nella barra laterale

1. **Scegli Provisioning**

1. Scegli la **modalità automatica** per il metodo di provisioning

1. In Credenziali di amministratore, inserisci il tuo **AwsAccessKeyID** per clientsecret e per Secret Token **SecretAccessKey**

1. **Imposta lo stato di **approvvigionamento** su Attivato**

1. Scegli **salva**. Ciò consente ad Azure AD di caricare i ruoli IAM necessari

1. Una volta completato lo stato del ciclo corrente, scegli **Utenti e gruppi** nella barra laterale

1. Scegli **\$1 Aggiungi utente**

1. Scegli l'utente Azure AD per cui fornire l'accesso a Timestream LiveAnalytics

1. Scegli il ruolo IAM Azure AD e il corrispondente Azure Identity Provider creato in AWS

1. **Scegli Assegna**

# ODBC
<a name="ODBC"></a>

Il [driver ODBC](https://github.com/awslabs/amazon-timestream-odbc-driver/tree/main) open source per Amazon Timestream for fornisce un'interfaccia relazionale SQL a Timestream LiveAnalytics LiveAnalytics per gli sviluppatori e consente la connettività da strumenti di business intelligence (BI) come Power BI Desktop e Microsoft Excel. Il driver Timestream per LiveAnalytics ODBC è attualmente disponibile su Windows[, macOS e Linux e](https://github.com/awslabs/amazon-timestream-odbc-driver/releases) supporta anche SSO con Okta e Microsoft Azure Active Directory (AD).

Per ulteriori informazioni, consulta la documentazione del [driver Amazon Timestream LiveAnalytics for ODBC](https://github.com/awslabs/amazon-timestream-odbc-driver/blob/main/docs/markdown/index.md) su. GitHub

**Topics**
+ [Configurazione del driver Timestream for ODBC LiveAnalytics](ODBC-setup.md)
+ [Sintassi e opzioni della stringa di connessione per il driver ODBC](ODBC-connecting.md)
+ [Esempi di stringhe di connessione per il driver Timestream for ODBC LiveAnalytics](ODBC-connecting-examples.md)
+ [Risoluzione dei problemi di connessione con il driver ODBC](ODBC-connecting-troubleshooting.md)

# Configurazione del driver Timestream for ODBC LiveAnalytics
<a name="ODBC-setup"></a>

## Configura l'accesso a Timestream nel tuo account LiveAnalytics AWS
<a name="ODBC-setup-access"></a>

Se non hai ancora configurato il tuo AWS account per utilizzarlo con Timestream LiveAnalytics, segui le istruzioni riportate in. [Accesso a Timestream per LiveAnalytics](accessing.md)

## Installa il driver ODBC sul tuo sistema
<a name="ODBC-setup-download"></a>

Scarica il programma di installazione del driver ODBC Timestream appropriato per il tuo sistema dal [ GitHubrepository ODBC](https://github.com/awslabs/amazon-timestream-odbc-driver/releases), e segui le istruzioni di installazione relative al tuo sistema:.
+ [Guida all'installazione di Windows](https://github.com/awslabs/amazon-timestream-odbc-driver/blob/main/docs/markdown/setup/windows-installation-guide.md)
+ [Guida all'installazione di macOS](https://github.com/awslabs/amazon-timestream-odbc-driver/blob/main/docs/markdown/setup/macOS-installation-guide.md)
+ [Guida all'installazione di Linux](https://github.com/awslabs/amazon-timestream-odbc-driver/blob/main/docs/markdown/setup/linux-installation-guide.md)

## Imposta un nome di origine dati (DSN) per il driver ODBC
<a name="ODBC-setup-dsn"></a>

Segui le istruzioni contenute nella guida alla configurazione DSN per il tuo sistema:
+ [Configurazione DSN di Windows](https://github.com/awslabs/amazon-timestream-odbc-driver/blob/main/docs/markdown/setup/windows-dsn-configuration.md)
+ [Configurazione DSN macOS](https://github.com/awslabs/amazon-timestream-odbc-driver/blob/main/docs/markdown/setup/macOS-dsn-configuration.md)
+ [Configurazione DSN Linux](https://github.com/awslabs/amazon-timestream-odbc-driver/blob/main/docs/markdown/setup/linux-dsn-configuration.md)

## Configura la tua applicazione di business intelligence (BI) in modo che funzioni con il driver ODBC
<a name="ODBC-setup-bi-apps"></a>

Di seguito sono riportate le istruzioni per impostare diverse applicazioni di BI comuni in modo che funzionino con il driver ODBC:
+ [Configurazione di Microsoft Power BI.](https://github.com/awslabs/amazon-timestream-odbc-driver/blob/main/docs/markdown/setup/microsoft-power-bi.md)
+ [Configurazione di Microsoft Excel](https://github.com/awslabs/amazon-timestream-odbc-driver/blob/main/docs/markdown/setup/microsoft-excel.md)
+ [Configurazione di Tableau](https://github.com/awslabs/amazon-timestream-odbc-driver/blob/main/docs/markdown/setup/tableau.md)

Per altre applicazioni

# Sintassi e opzioni della stringa di connessione per il driver ODBC
<a name="ODBC-connecting"></a>

La sintassi per specificare le opzioni relative alla stringa di connessione per il driver ODBC è la seguente:

```
DRIVER={Amazon Timestream ODBC Driver};(option)=(value);
```

Le opzioni disponibili sono riportate di seguito:

**Opzioni di connessione del driver**
+ **`Driver`***(richiesto)* — Il driver utilizzato con ODBC.

  L'impostazione predefinita è Amazon Timestream.
+ **`DSN`**— Il nome della fonte di dati (DSN) da utilizzare per configurare la connessione.

  Il valore predefinito è `NONE`.
+ **`Auth`**— La modalità di autenticazione. Deve essere una delle seguenti:
  + `AWS_PROFILE`— Utilizza la catena di credenziali predefinita.
  + `IAM`— Utilizza le credenziali AWS IAM.
  + `AAD`— Usa il provider di identità Azure Active Directory (AD).
  + `OKTA`— Usa il provider di identità Okta.

  Il valore predefinito è `AWS_PROFILE`.

**Opzioni di configurazione degli endpoint**
+ **`EndpointOverride`**— L'override dell'endpoint per il servizio Timestream for. LiveAnalytics Questa è un'opzione avanzata che sostituisce la regione. Esempio:

  ```
  query-cell2.timestream.us-east-1.amazonaws.com
  ```
+ **`Region`**— La regione di firma per l'endpoint Timestream for service. LiveAnalytics 

  Il valore predefinito è `us-east-1`.

**Opzione del fornitore di credenziali**
+ **`ProfileName`**— Il nome del profilo nel file di AWS configurazione.

  Il valore predefinito è `NONE`.

**AWS Opzioni di autenticazione IAM**
+ **`UID`**o **`AccessKeyId`**— L'ID della chiave di accesso AWS dell'utente. Se entrambi `UID` `AccessKeyId` sono forniti nella stringa di connessione, il `UID` valore verrà utilizzato a meno che non sia vuoto.

  Il valore predefinito è `NONE`.
+ **`PWD`**o **`SecretKey`**— La chiave di accesso segreta dell'utente AWS. Se entrambi `PWD` `SecretKey` sono forniti nella stringa di connessione, verrà utilizzato il `PWD` valore with a meno che non sia vuoto.

  Il valore predefinito è `NONE`.
+ **`SessionToken`**— Il token di sessione temporaneo necessario per accedere a un database con autenticazione a più fattori (MFA) abilitata. Non includere un termine finale ` = ` nell'input.

  Il valore predefinito è `NONE`.

**Opzioni di autenticazione basate su SAML per Okta**
+ **`IdPHost`**— Il nome host dell'IdP specificato.

  Il valore predefinito è `NONE`.
+ **`UID`**o **`IdPUserName`**— Il nome utente per l'account IdP specificato. Se entrambi `UID` `IdPUserName` sono forniti nella stringa di connessione, il `UID` valore verrà utilizzato a meno che non sia vuoto.

  Il valore predefinito è `NONE`.
+ **`PWD`**o **`IdPPassword`**— La password per l'account IdP specificato. Se entrambi `PWD` `IdPPassword` sono forniti nella stringa di connessione, il `PWD` valore verrà utilizzato a meno che non sia vuoto.

  Il valore predefinito è `NONE`.
+ **`OktaApplicationID`**— L'ID univoco fornito da OKTA associato al Timestream for application. LiveAnalytics Un posto dove trovare l'ID dell'applicazione (AppId) si trova nel `entityID` campo fornito nei metadati dell'applicazione. Un esempio è:

  ```
  entityID="http://www.okta.com//(IdPAppID)
  ```

  Il valore predefinito è `NONE`.
+ **`RoleARN`**— L'Amazon Resource Name (ARN) del ruolo assunto dal chiamante.

  Il valore predefinito è `NONE`.
+ **`IdPARN`**— L'Amazon Resource Name (ARN) del provider SAML in IAM che descrive l'IdP.

  Il valore predefinito è `NONE`.

**Opzioni di autenticazione basate su SAML per Azure Active Directory**
+ **`UID`**o **`IdPUserName`**— Il nome utente per l'account IdP specificato.

  Il valore predefinito è `NONE`.
+ **`PWD`**o **`IdPPassword`**— La password per l'account IdP specificato.

  Il valore predefinito è `NONE`.
+ **`AADApplicationID`**— L'id univoco dell'applicazione registrata su Azure AD.

  Il valore predefinito è `NONE`.
+ **`AADClientSecret`**— Il segreto del client associato all'applicazione registrata su Azure AD usato per autorizzare il recupero dei token.

  Il valore predefinito è `NONE`.
+ **`AADTenant`**— L'ID del tenant di Azure AD.

  Il valore predefinito è `NONE`.
+ **`RoleARN`**— L'Amazon Resource Name (ARN) del ruolo assunto dal chiamante.

  Il valore predefinito è `NONE`.
+ **`IdPARN`**— L'Amazon Resource Name (ARN) del provider SAML in IAM che descrive l'IdP.

  Il valore predefinito è `NONE`.

**AWS Opzioni SDK (avanzate)**
+ **`RequestTimeout`**— Il tempo in millisecondi in cui l' AWS SDK attende una richiesta di query prima del timeout. Qualsiasi valore non positivo disabilita il timeout della richiesta.

  Il valore predefinito è `3000`.
+ **`ConnectionTimeout`**— Il tempo in millisecondi in cui l' AWS SDK attende il trasferimento dei dati su una connessione aperta prima del timeout. Il valore 0 disattiva il timeout della connessione. Questo valore non deve essere negativo.

  Il valore predefinito è `1000`.
+ **`MaxRetryCountClient`**— Il numero massimo di tentativi per errori ripetibili con codici di errore 5xx nell'SDK. Il valore non deve essere negativo.

  Il valore predefinito è `0`.
+ **`MaxConnections`**— Il numero massimo di connessioni HTTP aperte contemporaneamente al servizio Timestream. Il valore deve essere positivo.

  Il valore predefinito è `25`.

**Opzioni di registrazione del driver ODBC**
+ **`LogLevel`**— Il livello di registro per la registrazione dei driver. Deve essere un valore tra:
  + **0** (DISATTIVATO).
  + **1** (ERRORE).
  + **2** (AVVERTENZA).
  + **3** (INFORMAZIONI).
  + **4** (DEBUG).

  L'impostazione predefinita è `1` (ERROR).

  **Avviso:** le informazioni personali potrebbero essere registrate dal driver quando si utilizza la modalità di registrazione DEBUG.
+ **`LogOutput`**— Cartella in cui archiviare il file di registro.

  L'impostazione predefinita è:
  + **Windows:**`%USERPROFILE%`, o se non disponibile,`%HOMEDRIVE%%HOMEPATH%`.
  + **macOS e Linux:** o se non disponibile`$HOME`, il campo della funzione `pw_dir` `getpwuid(getuid())` restituisce il valore.

**Opzioni di registrazione SDK**

Il livello di registro AWS SDK è separato dal livello di registro del driver Timestream for LiveAnalytics ODBC. L'impostazione di uno non influisce sull'altro.

Il livello di registro SDK viene impostato utilizzando la variabile `TS_AWS_LOG_LEVEL` di ambiente. I valori validi sono:
+ `OFF`
+ `ERROR`
+ `WARN`
+ `INFO`
+ `DEBUG`
+ `TRACE`
+ `FATAL`

Se non `TS_AWS_LOG_LEVEL` è impostato, il livello di registro SDK viene impostato sul valore predefinito, ovvero. `WARN`

## Connessione tramite un proxy
<a name="ODBC-connecting-proxy"></a>

Il driver ODBC supporta la connessione ad Amazon LiveAnalytics Timestream tramite un proxy. Per utilizzare questa funzionalità, configura le seguenti variabili di ambiente in base alle impostazioni del proxy:
+ **`TS_PROXY_HOST`**— l'host proxy.
+ **`TS_PROXY_PORT`**— Il numero di porta del proxy.
+ **`TS_PROXY_SCHEME`**— Lo schema proxy, `http` o`https`.
+ **`TS_PROXY_USER`**— Il nome utente per l'autenticazione proxy.
+ **`TS_PROXY_PASSWORD`**— La password utente per l'autenticazione proxy.
+ **`TS_PROXY_SSL_CERT_PATH`**— Il file del certificato SSL da utilizzare per la connessione a un proxy HTTPS.
+ **`TS_PROXY_SSL_CERT_TYPE`**— Il tipo di certificato SSL del client proxy.
+ **`TS_PROXY_SSL_KEY_PATH`**— Il file di chiave privata da utilizzare per la connessione a un proxy HTTPS.
+ **`TS_PROXY_SSL_KEY_TYPE`**— Il tipo di file di chiave privata utilizzato per connettersi a un proxy HTTPS.
+ **`TS_PROXY_SSL_KEY_PASSWORD`**— La passphrase del file di chiave privata utilizzato per connettersi a un proxy HTTPS.

# Esempi di stringhe di connessione per il driver Timestream for ODBC LiveAnalytics
<a name="ODBC-connecting-examples"></a>

## Esempio di connessione al driver ODBC con credenziali IAM
<a name="ODBC-connecting-examples-iam"></a>

```
Driver={Amazon Timestream ODBC Driver};Auth=IAM;AccessKeyId=(your access key ID);secretKey=(your secret key);SessionToken=(your session token);Region=us-east-2;
```

## Esempio di connessione al driver ODBC con un profilo
<a name="ODBC-connecting-examples-profile"></a>

```
Driver={Amazon Timestream ODBC Driver};ProfileName=(the profile name);region=us-west-2;
```

Il driver tenterà di connettersi utilizzando le credenziali fornite in o`~/.aws/credentials`, se un file è specificato nella variabile di ambiente`AWS_SHARED_CREDENTIALS_FILE`, utilizzando le credenziali in quel file.

## Esempio di connessione al driver ODBC con Okta
<a name="ODBC-connecting-examples-okta"></a>

```
driver={Amazon Timestream ODBC Driver};auth=okta;region=us-west-2;idPHost=(your host at Okta);idPUsername=(your user name);idPPassword=(your password);OktaApplicationID=(your Okta AppId);roleARN=(your role ARN);idPARN=(your Idp ARN);
```

## Esempio di connessione al driver ODBC con Azure Active Directory (AAD)
<a name="ODBC-connecting-examples-aad"></a>

```
driver={Amazon Timestream ODBC Driver};auth=aad;region=us-west-2;idPUsername=(your user name);idPPassword=(your password);aadApplicationID=(your AAD AppId);aadClientSecret=(your AAD client secret);aadTenant=(your AAD tenant);roleARN=(your role ARN);idPARN=(your idP ARN);
```

## Esempio di connessione al driver ODBC con un endpoint specificato e un livello di registro pari a 2 (AVVISO)
<a name="ODBC-connecting-examples-okta"></a>

```
Driver={Amazon Timestream ODBC Driver};Auth=IAM;AccessKeyId=(your access key ID);secretKey=(your secret key);EndpointOverride=ingest.timestream.us-west-2.amazonaws.com;Region=us-east-2;LogLevel=2;
```

# Risoluzione dei problemi di connessione con il driver ODBC
<a name="ODBC-connecting-troubleshooting"></a>

**Nota**  
Quando il nome utente e la password sono già specificati nel DSN, non è necessario specificarli nuovamente quando il gestore dei driver ODBC li richiede.

Un codice di errore relativo `01S02` a un messaggio `Re-writing (connection string option) (have you specified it several times?` si verifica quando un'opzione di stringa di connessione viene passata più di una volta nella stringa di connessione. Se si specifica un'opzione più di una volta, viene generato un errore. Quando si effettua una connessione con un DSN e una stringa di connessione, se un'opzione di connessione è già specificata nel DSN, non specificarla nuovamente nella stringa di connessione.

# Endpoint VPC (AWS PrivateLink)
<a name="vpc-interface-endpoints"></a>

*Puoi stabilire una connessione privata tra il tuo VPC e Amazon Timestream creando un endpoint VPC LiveAnalytics di interfaccia.* Per ulteriori informazioni, consulta [Endpoint VPC (AWS PrivateLink)](VPCEndpoints.md). 

# Best practice
<a name="best-practices"></a>

 Per sfruttare appieno i vantaggi di Amazon Timestream LiveAnalytics for, segui le best practice descritte di seguito.

**Nota**  
Quando esegui proof-of-concept le applicazioni, considera la quantità di dati che l'applicazione accumulerà nell'arco di alcuni mesi o anni, valutando al contempo le prestazioni e la scalabilità di Timestream for. LiveAnalytics Man mano che i dati crescono nel tempo, noterai che le prestazioni di Timestream for LiveAnalytics rimangono per lo più invariate, perché la sua architettura serverless può sfruttare enormi quantità di parallelismo per l'elaborazione di grandi volumi di dati e scalare automaticamente in base alle esigenze della tua applicazione.

**Topics**
+ [Modellazione dei dati](data-modeling.md)
+ [Sicurezza](security-bp.md)
+ [Configurazione di Amazon Timestream per LiveAnalytics](configuration.md)
+ [Scritture](data-ingest.md)
+ [Query](queries-bp.md)
+ [Query pianificate](scheduledqueries-bp.md)
+ [Applicazioni client e integrazioni supportate](client-integrations.md)
+ [Ambito generale](general.md)

# Modellazione dei dati
<a name="data-modeling"></a>

Amazon Timestream LiveAnalytics for è progettato per raccogliere, archiviare e analizzare dati di serie temporali da applicazioni e dispositivi che emettono una sequenza di dati con un timestamp. Per prestazioni ottimali, i dati inviati a Timestream LiveAnalytics devono avere caratteristiche temporali e il tempo deve essere un componente essenziale dei dati.

Timestream for LiveAnalytics offre la flessibilità necessaria per modellare i dati in diversi modi per soddisfare i requisiti dell'applicazione. In questa sezione, trattiamo diversi di questi modelli e forniamo linee guida per ottimizzare costi e prestazioni. Acquisite familiarità con elementi chiave [Amazon LiveAnalytics Timestream per concetti](concepts.md) come dimensioni e misure. In questa sezione, imparerai di più su quanto segue per decidere se creare una singola tabella o più tabelle per archiviare i dati:
+ Quali dati inserire nella stessa tabella rispetto a quando si desidera separare i dati su più tabelle e database.
+ Come scegliere tra Timestream per i record con LiveAnalytics più misure rispetto ai record a misura singola e i vantaggi della modellazione utilizzando record multimisura, soprattutto quando l'applicazione tiene traccia di più misurazioni contemporaneamente e istantaneamente.
+ Quali attributi modellare come dimensioni o come misure.
+ Come utilizzare in modo efficace gli attributi del nome della misura per ottimizzare la latenza delle query.

**Topics**
+ [Tabella singola vs. tabelle multiple](#data-modeling-singleVmultitable)
+ [Record multimisura vs. record a misura singola](#data-modeling-multiVsinglerecords)
+ [Dimensioni e misure](#data-modeling-dimensionsmeasures)
+ [Utilizzo del nome della misura con record multimisura](#data-modeling-measurenamemulti)
+ [Consigli per il partizionamento di record multimisura](#data-modeling-multi-measure-partitioning)

## Tabella singola vs. tabelle multiple
<a name="data-modeling-singleVmultitable"></a>

Mentre si modellano i dati nell'applicazione, un altro aspetto importante è come modellare i dati in tabelle e database. I database e le tabelle in Timestream for LiveAnalytics sono astrazioni per il controllo degli accessi, la specificazione delle chiavi KMS, dei periodi di conservazione e così via. Timestream for partiziona LiveAnalytics automaticamente i dati ed è progettato per scalare le risorse in base al carico e ai requisiti di acquisizione, archiviazione e query delle applicazioni.

Una tabella in Timestream for LiveAnalytics può essere scalata fino a petabyte di dati archiviati e decine di gigabyte al secondo di dati scritti. Le query possono elaborare centinaia di terabyte all'ora. Le query in Timestream for LiveAnalytics possono estendersi su più tabelle e database, fornendo join e unioni per fornire un accesso senza interruzioni ai dati su più tabelle e database. Pertanto, la scala dei dati o il volume delle richieste di solito non sono la preoccupazione principale quando si decide come organizzare i dati in Timestream for. LiveAnalytics Di seguito sono riportate alcune considerazioni importanti per decidere quali dati collocare nella stessa tabella rispetto a tabelle diverse o tabelle in database diversi.
+ Le politiche di conservazione dei dati (conservazione degli archivi di memoria, conservazione degli archivi magnetici, ecc.) sono supportate in base alla granularità di una tabella. Pertanto, i dati che richiedono politiche di conservazione diverse devono trovarsi in tabelle diverse.
+ AWS KMS le chiavi utilizzate per crittografare i dati sono configurate a livello di database. Pertanto, i diversi requisiti delle chiavi di crittografia implicano che i dati dovranno trovarsi in database diversi.
+ Timestream for LiveAnalytics supporta il controllo degli accessi basato sulle risorse con la granularità di tabelle e database. Considera i tuoi requisiti di controllo degli accessi quando decidi quali dati scrivere nella stessa tabella rispetto a tabelle diverse.
+ Quando decidi quali dati archiviare in quale tabella, tieni presente i [limiti](https://docs.aws.amazon.com/timestream/latest/developerguide/ts-limits.html) relativi al numero di dimensioni, ai nomi delle misure e ai nomi degli attributi composti da più misure.
+ Quando decidi come organizzare i dati, prendi in considerazione il carico di lavoro e i modelli di accesso delle query, poiché la latenza delle query e la facilità di scrittura delle query dipenderanno da ciò.
  + Se si archiviano i dati su cui si eseguono frequentemente query nella stessa tabella, in genere si semplificherà il modo in cui si scrivono le query, in modo da evitare spesso la necessità di scrivere join, unioni o espressioni di tabella comuni. Ciò comporta in genere anche una minore latenza delle query. È possibile utilizzare i predicati sulle dimensioni e sui nomi delle misure per filtrare i dati pertinenti alle query.

    Ad esempio, si consideri un caso in cui si archiviano dati da dispositivi situati in sei continenti. Se le tue query accedono spesso ai dati provenienti da tutti i continenti per ottenere una vista aggregata globale, l'archiviazione dei dati di questi continenti nella stessa tabella semplificherà la scrittura delle query. D'altra parte, se memorizzi dati su tabelle diverse, puoi comunque combinare i dati nella stessa query, tuttavia dovrai scrivere una query per unire i dati di più tabelle.
  + Timestream for LiveAnalytics utilizza il partizionamento e l'indicizzazione adattivi sui dati in modo che alle query vengano addebitati solo i dati pertinenti. Ad esempio, se disponi di una tabella che memorizza i dati di un milione di dispositivi in sei continenti, se la tua query contiene predicati del tipo o`WHERE continent = 'North America'`, alle query vengono addebitati solo i dati relativi al dispositivo `WHERE device_id = 'abcdef'` o al continente.
  + Ove possibile, se si utilizza il nome della misura per separare i dati nella stessa tabella che non vengono emessi contemporaneamente o non vengono interrogati frequentemente, utilizzando i predicati come `WHERE measure_name = 'cpu'` nella query, non solo si ottengono i vantaggi di misurazione, ma Timestream for LiveAnalytics può anche eliminare efficacemente le partizioni che non hanno il nome della misura utilizzato nel predicato di query. Ciò consente di archiviare i dati correlati con nomi di misure diversi nella stessa tabella senza influire sulla latenza o sui costi delle query ed evita la diffusione dei dati in più tabelle. Il nome della misura viene utilizzato essenzialmente per partizionare i dati ed eliminare le partizioni non pertinenti alla query.

## Record multimisura vs. record a misura singola
<a name="data-modeling-multiVsinglerecords"></a>

Timestream for LiveAnalytics consente di scrivere dati con più misure per record (multimisura) o una singola misura per record (misura singola).

**Record multimisura**

In molti casi d'uso, un dispositivo o un'applicazione monitorata può emettere più metriche o eventi contemporaneamente. In questi casi, puoi memorizzare tutte le metriche emesse nello stesso timestamp nello stesso record multimisura. Cioè, tutte le misure memorizzate nello stesso record multimisura vengono visualizzate come colonne diverse nella stessa riga di dati.

Considerate, ad esempio, che la vostra applicazione emetta metriche come cpu, memory e disk\$1iops da un dispositivo misurato nello stesso istante. Di seguito è riportato un esempio di tabella di questo tipo in cui più metriche emesse nello stesso istante vengono memorizzate nella stessa riga. Vedrai che due host emettono le metriche una volta al secondo.


| Hostname (Nome host) | measure\$1name | Orario | cpu | Memoria | disk\$1iops | 
| --- | --- | --- | --- | --- | --- | 
| Host-24 GJU | metriche | 01/12/2021 19:00:00 | 35 | 54,9 | 38,2 | 
| Host-24 GJU | metriche | 01/12/2021 19:00:01 | 36 | 58 | 39 | 
| Host-28 GJU | metriche | 01/12/2021 19:00:00 | 15 | 55 | 92 | 
| Host-28 GJU | metriche | 01/12/2021 19:00:01 | 16 | 50 | 40 | 

**Record a misura singola**

I record a misura singola sono adatti quando i dispositivi emettono metriche diverse in periodi di tempo diversi oppure si utilizza una logica di elaborazione personalizzata che emette dati metrics/events in periodi di tempo diversi (ad esempio, quando cambia un dispositivo). reading/state Poiché ogni misura ha un timestamp unico, le misure possono essere archiviate nei propri record in Timestream for. LiveAnalytics Ad esempio, prendiamo in considerazione un sensore IoT, che monitora la temperatura e l'umidità del suolo, che emette un record solo quando rileva un cambiamento rispetto alla voce precedente riportata. L'esempio seguente fornisce un esempio di tali dati emessi utilizzando record di misure singole.


| device\$1id | measure\$1name | Orario | measure\$1value::double | measure\$1value::bigint | 
| --- | --- | --- | --- | --- | 
| sensor-sea478 | temperature |  2021-12-01 19:22:32 | 35 | NULL | 
| sensore-sea478 | temperature |  2021-12-01 18:07:51 | 36 | NULL | 
| sensore-sea478 | umidità |  2021-12-01 19:05:30 | NULL | 21 | 
| sensore-sea478 | umidità |  2021-12-01 19:00:01 | NULL | 23 | 

**Confronto tra record a misura singola e multimisura**

Timestream for LiveAnalytics offre la flessibilità necessaria per modellare i dati come record a misura singola o multipla a seconda dei requisiti e delle caratteristiche dell'applicazione. Una singola tabella può memorizzare sia record a misura singola che a più misure, se i requisiti dell'applicazione lo richiedono. In generale, quando l'applicazione emette più dati contemporaneamente e istantaneamente, la modellazione dei dati come record measures/events a più misure è generalmente consigliata per un accesso efficiente ai dati e un'archiviazione dei dati conveniente.

Ad esempio, se si considera un [caso DevOps d'uso che monitora metriche ed eventi](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/tools/python/perf-scale-workload) da centinaia di migliaia di server, ogni server emette periodicamente 20 metriche e 5 eventi, in cui gli eventi e le metriche vengono emessi contemporaneamente e istantaneamente. Tali dati possono essere modellati utilizzando record a singola misura o utilizzando record a più misure (per lo schema risultante, consulta il generatore di dati [open source](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/tools/python/perf-scale-workload)). In questo caso d'uso, la modellazione dei dati utilizzando record a più misure rispetto ai record a misura singola produce:
+ *Misurazione dell'ingestione: i record con più misure consentono di ridurre* *di circa il 40% i byte di ingestione scritti.* 
+ *Ingestione in batch*: i record su più misure comportano l'invio di batch di dati più grandi, il che implica che i client abbiano bisogno di meno thread e meno CPU per elaborare l'ingestione.
+ *Misurazione dello storage*: i record su più misure *riducono lo storage di circa 8 volte, con un notevole risparmio di storage sia per la memoria che per l'archiviazione* magnetica.
+ *Latenza delle query*: i record con più misure determinano una latenza di query inferiore per la maggior parte dei tipi di query rispetto ai record a misura singola.
+ *Byte misurati dalle query*: per le query che eseguono la scansione di dati inferiori a 10 MB, i record a misura singola e quelli a più misure sono comparabili. Per le interrogazioni che accedono a una singola misura e scansionano dati di dimensioni superiori a 10 MB, i record a misurazione singola generano in genere una riduzione dei byte misurati. Per le query che fanno riferimento a tre o più misure, i record con più misure comportano una riduzione dei byte misurati.
+ *Facilità di esprimere interrogazioni con più misure: quando le query* fanno riferimento a più misure, la modellazione dei dati con record multimisura consente di scrivere query più semplici e compatte. 

I fattori precedenti varieranno a seconda del numero di metriche monitorate, delle dimensioni dei dati, ecc. Sebbene l'esempio precedente fornisca alcuni dati concreti, ad esempio, vediamo in molti scenari applicativi e casi d'uso in cui se l'applicazione emette più misure contemporaneamente, l'archiviazione dei dati come record multimisura è più efficace. Inoltre, i record multimisura offrono la flessibilità dei tipi di dati e la memorizzazione di più altri valori come contesto (ad esempio, l'archiviazione di richieste e timestamp aggiuntivi IDs, di cui parleremo più avanti).

Si noti che un record multimisura può anche modellare misure sparse, come nell'esempio precedente per i record a misura singola: è possibile utilizzare il per `measure_name` memorizzare il nome della misura e utilizzare un nome di attributo multimisura generico, `value_bigint` ad esempio per memorizzare `BIGINT` misure, `value_timestamp` memorizzare `TIMESTAMP` valori aggiuntivi e così via. `value_double` `DOUBLE`

## Dimensioni e misure
<a name="data-modeling-dimensionsmeasures"></a>

Una tabella in Timestream per LiveAnalytics consente di memorizzare *dimensioni* (attributi identificativi di device/data ciò che si sta memorizzando) e *misure* (quelle metrics/values che si sta monitorando); vedere [Amazon LiveAnalytics Timestream per concetti](concepts.md) per maggiori dettagli. Mentre state modellando l'applicazione su Timestream LiveAnalytics, il modo in cui mappate i dati in dimensioni e misure influisce sulla latenza di inserimento e di interrogazione. Di seguito sono riportate le linee guida su come modellare i dati sotto forma di dimensioni e misure da applicare al caso d'uso.

**Scelta delle dimensioni**

I dati che identificano la fonte che invia i dati delle serie temporali sono una scelta naturale per le dimensioni, che sono attributi che non cambiano nel tempo. Ad esempio, se disponi di un server che emette metriche, gli attributi che identificano il server, come hostname, Region, rack e Availability Zone, sono candidati per le dimensioni. Allo stesso modo, per un dispositivo IoT con più sensori che riportano dati di serie temporali, attributi come l'ID del dispositivo e l'ID del sensore sono candidati per le dimensioni.

Se si scrivono dati come record multimisura, le dimensioni e gli attributi multimisura vengono visualizzati come colonne nella tabella quando si esegue `DESCRIBE` o si esegue un'`SELECT`istruzione sulla tabella. Pertanto, quando si scrivono le query, è possibile utilizzare liberamente le dimensioni e le misure della stessa query. Tuttavia, quando create il record di scrittura per importare dati, tenete presente quanto segue quando scegliete quali attributi sono specificati come dimensioni e quali sono valori di misura:
+ I nomi delle dimensioni, i valori delle dimensioni, il nome della misura e il timestamp identificano in modo univoco i dati delle serie temporali. Timestream for LiveAnalytics utilizza questo identificatore univoco per deduplicare automaticamente i dati. Cioè, se Timestream for LiveAnalytics riceve due punti dati con gli stessi valori di nomi di dimensione, valori di dimensione, nome di misura e timestamp e i valori hanno lo stesso numero di versione, allora Timestream for deduplica. LiveAnalytics Se la nuova richiesta di scrittura ha una versione inferiore a quella dei dati già esistenti in Timestream for, la richiesta di scrittura viene rifiutata. LiveAnalytics Se la nuova richiesta di scrittura ha una versione superiore, il nuovo valore sovrascrive il vecchio valore. Pertanto, la scelta dei valori delle dimensioni influirà su questo comportamento di deduplicazione.
+ I nomi e i valori delle dimensioni non possono essere aggiornati, ma il valore di misura può esserlo. Pertanto, tutti i dati che potrebbero richiedere aggiornamenti vengono meglio modellati come valori di misura. Ad esempio, se in fabbrica è presente una macchina il cui colore può cambiare, è possibile modellare il colore come valore di misura, a meno che non si desideri utilizzare il colore anche come attributo identificativo necessario per la deduplicazione. In altre parole, i valori di misura possono essere utilizzati per memorizzare attributi che cambiano solo lentamente nel tempo.

Tieni presente che una tabella in Timestream for LiveAnalytics non limita il numero di combinazioni univoche di nomi e valori delle dimensioni. Ad esempio, puoi avere miliardi di queste combinazioni di valori uniche memorizzate in una tabella. Tuttavia, come vedrete negli esempi seguenti, un'attenta scelta delle dimensioni e delle misure può ottimizzare in modo significativo la latenza delle richieste, in particolare per le query.

**Unico IDs nelle dimensioni**

Se lo scenario applicativo richiede la memorizzazione di un identificatore univoco per ogni punto dati (ad esempio, un ID di richiesta, un ID di transazione o un ID di correlazione), la modellazione dell'attributo ID come valore di misura comporterà una latenza di query significativamente migliore. Quando si modellano i dati con record multimisura, l'ID viene visualizzato nella stessa riga nel contesto delle altre dimensioni e dei dati delle serie temporali, in modo che le query possano continuare a utilizzarli in modo efficace. Ad esempio, considerando un [caso DevOps d'uso](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/tools/python/perf-scale-workload) in cui ogni punto dati emesso da un server ha un attributo ID di richiesta univoco, la modellazione dell'ID della richiesta come valore di misura comporta una latenza di query fino a 4 volte inferiore su diversi tipi di query, anziché modellare l'ID di richiesta univoco come dimensione.

È possibile utilizzare l'analogia simile per attributi che non sono completamente unici per ogni punto dati, ma hanno centinaia di migliaia o milioni di valori univoci. È possibile modellare questi attributi sia come dimensioni che come valori di misura. È consigliabile modellarlo come dimensione se i valori sono necessari per la deduplicazione sul percorso di scrittura, come illustrato in precedenza, oppure lo si utilizza spesso come predicato (ad esempio, nella `WHERE` clausola con un predicato di uguaglianza su un valore di quell'attributo, ad esempio nel caso in `device_id = 'abcde'` cui l'applicazione monitora milioni di dispositivi) nelle query. 

**Ampia gamma di tipi di dati con record multimisura**

I record multimisura offrono la flessibilità necessaria per modellare efficacemente i dati. I dati archiviati in un record di più misure vengono visualizzati come colonne nella tabella in modo simile alle dimensioni, garantendo così la stessa facilità di ricerca dei valori di dimensione e misura. Hai visto alcuni di questi modelli negli esempi discussi in precedenza. Di seguito troverai modelli aggiuntivi per utilizzare in modo efficace i record multimisura per soddisfare i casi d'uso dell'applicazione.

I record multimisura supportano gli attributi dei tipi di dati`DOUBLE`,`BIGINT`, `VARCHAR``BOOLEAN`, e. `TIMESTAMP` Pertanto, si adattano naturalmente a diversi tipi di attributi:
+ *Informazioni sulla posizione*: ad esempio, se si desidera tracciare una posizione (espressa come latitudine e longitudine), modellarla come attributo multimisura comporterà una latenza di interrogazione inferiore rispetto alla memorizzazione come `VARCHAR` dimensioni, specialmente quando si hanno predicati sulle latitudini e sulle longitudini. 
+ *Più timestamp in un record*: se lo scenario dell'applicazione richiede di tenere traccia di più timestamp per un record di serie temporali, è possibile modellarli come attributi aggiuntivi nel record multimisura. Questo modello può essere utilizzato per archiviare dati con timestamp futuri o passati. Tieni presente che ogni record utilizzerà comunque il timestamp nella colonna dell'ora per partizionare, indicizzare e identificare in modo univoco un record.

In particolare, se nella query sono presenti dati numerici o timestamp su cui sono presenti dei predicati, la modellazione di tali attributi come attributi multimisura anziché come dimensioni comporterà una minore latenza delle query. Questo perché quando si modellano tali dati utilizzando i ricchi tipi di dati supportati nei record multimisura, è possibile esprimere i predicati utilizzando tipi di dati nativi anziché trasferire valori da `VARCHAR` un altro tipo di dati se tali dati sono stati modellati come dimensioni.

## Utilizzo del nome della misura con record multimisura
<a name="data-modeling-measurenamemulti"></a>

*Le tabelle in Timestream LiveAnalytics supportano un attributo speciale (o colonna) chiamato nome della misura.* Specificate un valore per questo attributo per ogni record per cui scrivete su Timestream. LiveAnalytics Per i record a misura singola, è naturale utilizzare il nome della metrica (ad esempio CPU o memoria per le metriche del server o temperatura o pressione per le metriche dei sensori). Quando si utilizzano record con più misure, gli attributi in un record con più misure vengono denominati e questi nomi diventano nomi di colonna nella tabella. Pertanto, cpu, memoria, temperatura e pressione possono diventare nomi di attributi multimisura. Una domanda naturale è come utilizzare efficacemente il nome della misura.

Timestream for LiveAnalytics utilizza i valori nell'attributo del nome della misura per partizionare e indicizzare i dati. Pertanto, se una tabella ha più nomi di misure diversi e se le query utilizzano tali valori come predicati di query, Timestream for LiveAnalytics può utilizzare il partizionamento e l'indicizzazione personalizzati per eliminare i dati non pertinenti alle query. Ad esempio, se la tabella contiene nomi di `memory` misure `cpu` e la query ha un predicato`WHERE measure_name = 'cpu'`, Timestream for LiveAnalytics può eliminare efficacemente i dati per i nomi delle misure non pertinenti alla query, ad esempio le righe con memoria dei nomi di misura in questo esempio. Questa eliminazione si applica anche quando si utilizzano nomi di misure con record di più misure. È possibile utilizzare efficacemente l'attributo measure name come attributo di partizionamento per una tabella. Il nome della misura insieme ai nomi e ai valori delle dimensioni e l'ora vengono utilizzati per partizionare i dati in un flusso temporale per tabella. LiveAnalytics Tieni presente [i limiti](https://docs.aws.amazon.com/timestream/latest/developerguide/ts-limits.html) al numero di nomi di misura univoci consentiti in un Timestream for table. LiveAnalytics Si noti inoltre che il nome di una misura è associato anche a un tipo di dati di valore di misura. Ad esempio, il nome di una singola misura può essere associato solo a un tipo di valore di misura. Questo tipo può essere uno tra `DOUBLE``BIGINT`,`BOOLEAN`,`VARCHAR`, o`MULTI`. I record a più misure memorizzati con un nome di misura avranno il tipo di dati di`MULTI`. Poiché un singolo record multimisura può memorizzare più metriche con diversi tipi di dati (`DOUBLE`,, `BIGINT``VARCHAR`, e`TIMESTAMP`)`BOOLEAN`, è possibile associare dati di tipi diversi in un record con più misure. 

Le sezioni seguenti descrivono alcuni esempi diversi di come l'attributo measure name può essere efficacemente utilizzato per raggruppare diversi tipi di dati nella stessa tabella. 

**Sensori IoT che segnalano qualità e valore**

Immagina di avere un'applicazione che monitora i dati provenienti dai sensori IoT. Ogni sensore rileva diverse misure, come temperatura e pressione. Oltre ai valori effettivi, i sensori segnalano anche la qualità delle misurazioni, che è una misura dell'accuratezza della lettura e un'unità di misura. Poiché qualità, unità e valore vengono emessi insieme, possono essere modellati come record multimisura, come illustrato nei dati di esempio riportati di seguito dove `device_id` è una dimensione, e `quality``value`, e `unit` sono attributi multimisura:


| device\$1id | measure\$1name | Orario | Qualità | Valore | Unità | 
| --- | --- | --- | --- | --- | --- | 
| sensor-sea478 | temperature | 2021-12-01 19:22:32 | 92 | 35 | c | 
| sensor-sea478 | temperature | 2021-12-01 18:07:51 | 93 | 34 | c | 
| sensor-sea478 | pressure | 2021-12-01 19:05:30 | 98 | 31 | psi | 
| sensor-sea478 | pressure | 2021-12-01 19:00:01 | 24 | 132 | psi | 

Questo approccio consente di combinare i vantaggi dei record multimisura con il partizionamento e l'eliminazione dei dati utilizzando i valori di measure name. Se le query fanno riferimento a una singola misura, ad esempio la temperatura, è possibile includere un `measure_name` predicato nella query. Di seguito è riportato un esempio di tale interrogazione, che proietta anche l'unità per le misurazioni la cui qualità è superiore a 90.

```
SELECT device_id, time, value AS temperature, unit
FROM db.table
WHERE time > ago(1h)
    AND measure_name = 'temperature'
    AND quality > 90
```

L'utilizzo del `measure_name` predicato sulla query consente a Timestream di LiveAnalytics eliminare efficacemente partizioni e dati non pertinenti alla query, migliorando così la latenza delle query.

È anche possibile archiviare tutte le metriche nello stesso record multimisura se tutte le metriche vengono emesse con lo stesso timestamp e/o più metriche vengono interrogate insieme nella stessa query. Ad esempio, puoi costruire un record multimisura con attributi come temperature\$1quality, temperature\$1value, temperature\$1unit, pressure\$1quality, pressure\$1value e pressure\$1unit. Molti dei punti discussi in precedenza sulla modellazione dei dati utilizzando record a misura singola anziché a più misure valgono per decidere come modellare i dati. Considerate i modelli di accesso alle query e il modo in cui i dati vengono generati per scegliere un modello che ottimizzi i costi, l'inserimento e la latenza delle query e la facilità di scrittura delle query.

**Diversi tipi di metriche nella stessa tabella**

Un altro caso d'uso in cui è possibile combinare record di più misure con i valori dei nomi delle misure consiste nel modellare diversi tipi di dati emessi indipendentemente dallo stesso dispositivo. Si consideri il caso d'uso del DevOps monitoraggio in cui i server emettono due tipi di dati: metriche emesse regolarmente ed eventi irregolari. Un esempio di questo approccio è lo schema discusso nel [generatore di dati che modella](https://github.com/awslabs/amazon-timestream-tools/tree/mainline/tools/python/perf-scale-workload) un caso d'uso. DevOps In questo caso, è possibile memorizzare i diversi tipi di dati emessi dallo stesso server nella stessa tabella utilizzando nomi di misure diversi. Ad esempio, tutte le metriche emesse nello stesso istante vengono archiviate con le metriche dei nomi delle misure. Tutti gli eventi emessi in un istante temporale diverso dalle metriche vengono archiviati con gli eventi relativi ai nomi delle misure. Lo schema di misura per la tabella (ad esempio, l'output della `SHOW MEASURES` query) è:


| measure\$1name | data\$1type | Dimensioni | 
| --- | --- | --- | 
| eventi | multi | [\$1"data\$1type» :"varchar», "dimension\$1name» :"availability\$1zone "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"microservice\$1name "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"nome\$1istanza "\$1, \$1" tipo\$1dati» :"varchar» :"varchar», "dimension\$1name» :"process\$1name "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"jdk\$1version "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"cell "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"region "\$1, \$1" tipo\$1dati» :"varchar», "dimension\$1name» :"region "\$1, \$1" tipo\$1dati» :"varchar», "dimension\$1name» :"region "\$1, \$1" tipo\$1dati» :"varchar»» :"varchar», "nome\$1dimensione» :"silo "\$1] | 
| metriche | multi | [\$1"data\$1type» :"varchar», "dimension\$1name» :"availability\$1zone "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"microservice\$1name "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"nome\$1istanza "\$1, \$1" tipo\$1dati» :"varchar» :"varchar», "dimension\$1name» :"os\$1version "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"cell "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"region "\$1, \$1" data\$1type» :"varchar», "dimension\$1name» :"silo "\$1, \$1" tipo\$1dati» :"varchar» :"dimension\$1name» :"silo "\$1, \$1" tipo\$1dati» :"varchar» :"dimension\$1name» :"silo "\$1, \$1" tipo\$1dati» :"varchar» :"dimension\$1name» :"silo "\$1, \$1" tipo\$1dati» :"varchar» :"dimension\$1name» :"silo "\$1 «varchar», "nome\$1dimensione» :"tipo\$1istanza "\$1] | 

In questo caso, puoi vedere che gli eventi e le metriche hanno anche diversi set di dimensioni, dove gli eventi hanno dimensioni diverse `jdk_version` e `process_name` mentre le metriche hanno dimensioni `instance_type` e`os_version`.

L'utilizzo di nomi di misure diversi consente di scrivere query con predicati, ad esempio di `WHERE measure_name = 'metrics'` ottenere solo le metriche. Inoltre, avere tutti i dati emessi dalla stessa istanza nella stessa tabella implica la possibilità di scrivere una query più semplice con il `instance_name` predicato per ottenere tutti i dati per quell'istanza. Ad esempio, un predicato del modulo `WHERE instance_name = 'instance-1234'` senza un `measure_name` predicato restituirà tutti i dati per una specifica istanza del server.

## Consigli per il partizionamento di record multimisura
<a name="data-modeling-multi-measure-partitioning"></a>

**Importante**  
**Questa sezione è obsoleta\$1**  
Queste raccomandazioni non sono aggiornate. Il partizionamento è ora meglio controllato utilizzando chiavi di partizione definite [dal cliente](customer-defined-partition-keys.md). 

Abbiamo visto che nell'ecosistema delle serie temporali c'è un numero crescente di carichi di lavoro che richiedono l'acquisizione e l'archiviazione di enormi quantità di dati e allo stesso tempo richiedono risposte alle query a bassa latenza quando si accede ai dati tramite un set di valori dimensionali ad alta cardinalità.

A causa di tali caratteristiche, i consigli contenuti in questa sezione saranno utili per i carichi di lavoro dei clienti che presentano le seguenti caratteristiche:
+ Ha adottato o desidera adottare record multimisura.
+ Aspettatevi di ricevere nel sistema un volume elevato di dati che verranno archiviati per lunghi periodi.
+ Richiedono tempi di risposta a bassa latenza per i loro modelli di accesso (interrogazione) principali.
+ Sappi che i modelli di interrogazione più importanti implicano una condizione di filtraggio di qualche tipo nel predicato. Questa condizione di filtraggio si basa su una dimensione di cardinalità elevata. Ad esempio, considera eventi o aggregazioni per, ServerID UserId DeviceId, host-name e così via.

In questi casi, un unico nome per tutte le misure multimisura non sarà di aiuto poiché il nostro motore utilizza nomi con più misure per partizionare i dati e avere un unico valore limita il vantaggio di partizione che si ottiene. Il partizionamento di questi record si basa principalmente su due dimensioni. Supponiamo che il tempo sia sull'asse x e su un hash di nomi di dimensione e che `measure_name` sia sull'asse y. `measure_name`In questi casi funziona quasi come una chiave di partizionamento.

La nostra raccomandazione è la seguente:
+ Quando modellate i dati per casi d'uso come quello che abbiamo menzionato, utilizzate un modello `measure_name` che sia una derivazione diretta del modello di accesso alle query principale. Esempio:
  + Il vostro caso d'uso richiede il monitoraggio delle prestazioni dell'applicazione e della QoE dal punto di vista dell'utente finale. Potrebbe trattarsi anche del tracciamento delle misurazioni per un singolo server o dispositivo IoT.
  + Se stai eseguendo interrogazioni e filtrando UserId in base a, al momento dell'inserimento devi trovare il modo migliore per associarti a. `measure_name` UserId
  + Poiché una tabella multimisura può contenere solo 8.192 nomi di misure diversi, qualunque formula venga adottata non dovrebbe generare più di 8.192 valori diversi.
+ Un approccio che abbiamo applicato con successo per i valori di stringa consiste nell'applicare un algoritmo di hashing al valore della stringa. Quindi esegui l'operazione del modulo con il valore assoluto del risultato hash e 8.192.

  ```
  measure_name = getMeasureName(UserId)
  int getMeasureName(value) {
      hash_value =  abs(hash(value))
      return hash_value % 8192
  }
  ```
+ Abbiamo anche aggiunto di `abs()` rimuovere il segno, eliminando la possibilità che i valori vadano da -8.192 a 8.192. Questa operazione deve essere eseguita prima dell'operazione del modulo.
+ Utilizzando questo metodo, le query possono essere eseguite in una frazione del tempo necessario per l'esecuzione su un modello di dati non partizionato.
+ Quando esegui una query sui dati, assicurati di includere una condizione di filtro nel predicato che utilizzi il nuovo valore derivato di. `measure_name` Esempio:
  + 

    ```
    SELECT * FROM your_database.your_table 
    WHERE host_name = 'Host-1235' time BETWEEN '2022-09-01' 
        AND '2022-09-18' 
        AND measure_name = (SELECT cast(abs(from_big_endian_64(xxhash64(CAST('HOST-1235' AS varbinary))))%8192 AS varchar))
    ```
  + Ciò ridurrà al minimo il numero totale di partizioni scansionate per ottenere dati che si tradurranno in query più rapide nel tempo.

Tieni presente che se desideri ottenere i vantaggi di questo schema di partizione, l'hash deve essere calcolato sul lato client e passato a Timestream LiveAnalytics come valore statico al motore di query. L'esempio precedente fornisce un modo per verificare che l'hash generato possa essere risolto dal motore quando necessario.


| time | host\$1name | location | tipo\$1server | cpu\$1usage | memoria\$1disponibile | cpu\$1temp | 
| --- | --- | --- | --- | --- | --- | --- | 
|  2022-09-07 21:48:44 .000000000  |  ospitare-1235  |  us-east1  |  5,8 xl  |  55  |  16,2  |  78  | 
|  R2022-09-07 21:48:44 .000000000  |  host-3587  |  Stati Uniti-West1  |  5,8 xl  |  62  |  18,1  |  81  | 
|  2022-09-07 21:48:45000 000000  |  host-258743  |  eu-central  |  5,8 xl  |  88  |  9.4  |  91  | 
|  2022-09-07 21:48:45 .000000000  |  host-35654  |  Stati Uniti - East2  |  5,8 xl  |  29  |  24  |  54  | 
|  R2022-09-07 21:48:45 .000000000  |  ospite-254  |  Stati Uniti-West1  |  5,8 xl  |  44  |  32  |  48  | 

Per generare il codice associato `measure_name` seguendo la nostra raccomandazione, esistono due percorsi che dipendono dal modello di ingestione.

1. *Per l'ingestione in batch di dati storici*: puoi aggiungere la trasformazione al tuo codice di scrittura se intendi utilizzare il tuo codice per il processo in batch.

   Basandosi sull'esempio precedente.

   ```
           List<String> hosts = new ArrayList<>();
   
           hosts.add("host-1235");
           hosts.add("host-3587");
           hosts.add("host-258743");
           hosts.add("host-35654");
           hosts.add("host-254");
   
           for (String h: hosts){
               ByteBuffer buf2 = ByteBuffer.wrap(h.getBytes());
               partition = abs(hasher.hash(buf2, 0L)) % 8192;
               System.out.println(h + " - " + partition);
   
           }
   ```

   Output

   ```
   host-1235 - 6445
   host-3587 - 6399
   host-258743 - 640
   host-35654 - 2093
   host-254 - 7051
   ```

   Set di dati risultante    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/data-modeling.html)

1. *Per l'ingestione in tempo reale*: è necessario generare i dati in `measure_name` volo man mano che arrivano i dati.

In entrambi i casi, ti consigliamo di testare l'algoritmo di generazione dell'hash su entrambe le estremità (ingestione e interrogazione) per assicurarti di ottenere gli stessi risultati.

Di seguito sono riportati alcuni esempi di codice su cui generare il valore hash. `host_name`

**Example Python**  

```
>>> import xxhash
>>> from bitstring import BitArray
>>> b=xxhash.xxh64('HOST-ID-1235').digest()
>>> BitArray(b).int % 8192
### 3195
```

**Example Go**  

```
package main

import (
    "bytes"
    "fmt"
    "github.com/cespare/xxhash"
)

func main() {
    buf := bytes.NewBufferString("HOST-ID-1235")
    x := xxhash.New()
    x.Write(buf.Bytes())
    // convert unsigned integer to signed integer before taking mod
    fmt.Printf("%f\n", abs(int64(x.Sum64())) % 8192)
}

func abs(x int64) int64 {
    if (x < 0) {
        return -x
    }
    return x
}
```

**Example Java**  

```
import java.nio.ByteBuffer;

import net.jpountz.xxhash.XXHash64;

public class test {
    public static void main(String[] args) {
        XXHash64 hasher = net.jpountz.xxhash.XXHashFactory.fastestInstance().hash64();

        String host = "HOST-ID-1235";
        ByteBuffer buf = ByteBuffer.wrap(host.getBytes());

        Long result = Math.abs(hasher.hash(buf, 0L));
        Long partition = result % 8192;

        System.out.println(result);
        System.out.println(partition);
    }
}
```

**Example dipendenza in Maven**  

```
        <dependency>
            <groupId>net.jpountz.lz4</groupId>
            <artifactId>lz4</artifactId>
            <version>1.3.0</version>
        </dependency>
```

# Sicurezza
<a name="security-bp"></a>
+ Per un accesso continuo a Timestream for LiveAnalytics, assicurati che le chiavi di crittografia siano protette e non vengano revocate o rese inaccessibili.
+ Monitora i log di accesso alle API da. AWS CloudTrail Controlla e revoca qualsiasi modello di accesso anomalo da parte di utenti non autorizzati. 
+ Segui le linee guida aggiuntive descritte in. [Best practice di sicurezza per Amazon Timestream for LiveAnalytics](best-practices-security.md)

# Configurazione di Amazon Timestream per LiveAnalytics
<a name="configuration"></a>

Configura il periodo di conservazione dei dati per l'archivio di memoria e l'archivio magnetico in modo che soddisfi i requisiti di elaborazione, archiviazione, prestazioni delle query e costo dei dati.
+ Imposta la conservazione dei dati dell'archivio di memoria in modo che soddisfi i requisiti dell'applicazione per l'elaborazione dei dati in arrivo tardivo. I dati in arrivo tardivo sono dati in arrivo con un timestamp precedente all'ora corrente. Viene emesso da risorse che raggruppano gli eventi per un periodo di tempo prima di inviare i dati a Timestream e anche da risorse con connettività intermittente LiveAnalytics, ad esempio un sensore IoT che è online a intermittenza.
+ Se prevedi che i dati in arrivo tardivo arrivino occasionalmente con timestamp prima della conservazione nell'archivio di memoria, dovresti abilitare le scritture magnetiche sull'archivio per la tua tabella. Una volta impostata l' EnableMagneticStoreWrites impostazione di una tabella, la tabella accetterà dati con data e ora precedenti alla conservazione nell'archivio di memoria, ma entro il periodo di conservazione dell'archivio magnetico. MagneticStoreWritesProperties 
+ Considerate le caratteristiche delle query che intendete eseguire su Timestream, ad LiveAnalytics esempio i tipi di query, la frequenza, l'intervallo di tempo e i requisiti prestazionali. Questo perché l'archivio di memoria e l'archivio magnetico sono ottimizzati per diversi scenari. L'archivio di memoria è ottimizzato per point-in-time query veloci che elaborano piccole quantità di dati recenti inviati a Timestream per. LiveAnalytics L'archivio magnetico è ottimizzato per query analitiche veloci che elaborano volumi di dati medio-grandi inviati a Timestream per. LiveAnalytics
+ Il periodo di conservazione dei dati dovrebbe essere influenzato anche dai requisiti di costo del sistema.

  Ad esempio, prendiamo in considerazione uno scenario in cui la soglia di arrivo tardivo dei dati per l'applicazione è di 2 ore e le applicazioni inviano molte query che elaborano dati relativi a un giorno, a una settimana o a un mese. In tal caso, potresti voler configurare un periodo di conservazione più breve per l'archivio di memoria (2-3 ore) e consentire a più dati di fluire verso l'archivio magnetico, dato che l'archivio magnetico è ottimizzato per query analitiche veloci.

Comprendete l'impatto dell'aumento o della diminuzione del periodo di conservazione dei dati dell'archivio di memoria e dell'archivio magnetico di una tabella esistente.
+ Quando si riduce il periodo di conservazione dell'archivio di memoria, i dati vengono spostati dall'archivio di memoria all'archivio magnetico e il trasferimento dei dati è permanente. Timestream for LiveAnalytics non recupera i dati dall'archivio magnetico per popolare l'archivio di memoria. Quando si riduce il periodo di conservazione dell'archivio magnetico, i dati vengono eliminati dal sistema e l'eliminazione dei dati è permanente.
+ Quando si aumenta il periodo di conservazione dell'archivio di memoria o dell'archivio magnetico, la modifica ha effetto sui dati inviati a Timestream a LiveAnalytics partire da quel momento in poi. Timestream for LiveAnalytics non recupera i dati dall'archivio magnetico per popolare l'archivio di memoria. Ad esempio, se il periodo di conservazione dell'archivio di memoria è stato inizialmente impostato su 2 ore e poi aumentato a 24 ore, occorreranno 22 ore prima che l'archivio di memoria contenga 24 ore di dati.

# Scritture
<a name="data-ingest"></a>
+ Assicurarsi che il timestamp dei dati in ingresso non sia precedente alla conservazione dei dati configurata per l'archivio di memoria e non oltre il periodo di inserimento futuro definito in. [QuoteQuote di default](ts-limits.md) L'invio di dati con un timestamp al di fuori di questi limiti comporterà il rifiuto dei dati da parte di Timestream, a meno che non abiliti le scritture con memorizzazione magnetica per la LiveAnalytics tabella. Se abiliti le scritture nell'archivio magnetico, assicurati che il timestamp per i dati in entrata non sia precedente alla conservazione dei dati configurata per l'archivio magnetico.
+ Se prevedi che i dati arrivino in ritardo, attiva le scritture sull'archivio magnetico per la tua tabella. Ciò consentirà l'inserimento di dati con timestamp che non rientrano nel periodo di conservazione dell'archivio di memoria ma che rientrano comunque nel periodo di conservazione dell'archivio magnetico. Puoi impostarlo aggiornando la `EnableMagneticStoreWrites` bandiera nella tua tabella. `MagneticStoreWritesProperties` Questa proprietà è false per impostazione predefinita. Si noti che le operazioni di scrittura nell'archivio magnetico non saranno immediatamente disponibili per l'interrogazione. Saranno disponibili entro 6 ore.
+ Indirizza i carichi di lavoro ad alto throughput all'archivio di memoria assicurandoti che i timestamp dei dati acquisiti rientrino nei limiti di conservazione dell'archivio di memoria. Le scritture sull'archivio magnetico sono limitate a un numero massimo di partizioni di archiviazione magnetica attive che possono ricevere l'ingestione simultanea per un database. È possibile visualizzare questa metrica in. `ActiveMagneticStorePartitions` CloudWatch Per ridurre le partizioni di immagazzinamento magnetico attivo, cercate di ridurre il numero di serie e la durata del tempo di ingestione dei magazzini magnetici in contemporanea.
+ Durante l'invio dei dati a Timestream for LiveAnalytics, raggruppa più record in un'unica richiesta per ottimizzare le prestazioni di acquisizione dei dati.
  + È utile raggruppare i record della stessa serie temporale e i record con lo stesso nome di misura.
  + Batch il maggior numero possibile di record in una singola richiesta, purché le richieste rientrino nei limiti di servizio definiti in[QuoteQuote di default](ts-limits.md).
  + Utilizza attributi comuni, ove possibile, per ridurre i costi di trasferimento e ingestione dei dati. [Per ulteriori informazioni, consulta WriteRecords API.](https://docs.aws.amazon.com/timestream/latest/developerguide/API_WriteRecords.html)
+ Se riscontri errori parziali sul lato client durante la scrittura dei dati su Timestream for LiveAnalytics, puoi inviare nuovamente il batch di record che non è riuscito a inserire dopo aver risolto la causa del rifiuto.
+ I dati ordinati per timestamp offrono prestazioni di scrittura migliori.
+ Amazon Timestream LiveAnalytics for è progettato per adattarsi automaticamente alle esigenze della tua applicazione. Quando Timestream for LiveAnalytics Notices aumenta il numero di richieste di scrittura provenienti dall'applicazione, l'applicazione potrebbe subire un certo livello di limitazione iniziale dell'archiviazione di memoria. Se la tua applicazione riscontra una limitazione dell'archiviazione di memoria, continua a inviare dati a Timestream alla stessa velocità (o maggiore) per consentire LiveAnalytics a Timestream di scalare automaticamente per soddisfare le esigenze dell'applicazione. LiveAnalytics Se notate una limitazione delle riserve magnetiche, dovreste ridurre la velocità di ingestione delle riserve magnetiche fino a ridurne il numero. `ActiveMagneticStorePartitions`

# Caricamento in batch
<a name="batch-load-bp"></a>

Le migliori pratiche per il caricamento in batch sono descritte in[Procedure ottimali per il caricamento in batch](batch-load-best-practices.md).

# Query
<a name="queries-bp"></a>

Di seguito sono riportate le best practice suggerite per le query con Amazon Timestream for. LiveAnalytics
+ Includi solo i nomi delle misure e delle dimensioni essenziali per l'interrogazione. L'aggiunta di colonne estranee aumenterà le scansioni dei dati, con un impatto sulle prestazioni delle query.
+ Prima di distribuire la query in produzione, si consiglia di esaminare le informazioni sulle query per assicurarsi che la riduzione spaziale e temporale sia ottimale. Per ulteriori informazioni, consulta [Utilizzo di informazioni dettagliate sulle query per ottimizzare le query in Amazon Timestream](using-query-insights.md).
+ Ove possibile, trasferite il calcolo dei dati su Timestream per LiveAnalytics utilizzare gli aggregati e le funzioni scalari integrate nelle clausole SELECT e WHERE, a seconda dei casi, per migliorare le prestazioni delle query e ridurre i costi. Consulta [SELECTUNLOAD](supported-sql-constructs.SELECT.md) e [Funzioni di aggregazione](aggregate-functions.md).
+ Ove possibile, utilizzate funzioni approssimative. Ad esempio, utilizzate APPROX\$1DISTINCT invece di COUNT (DISTINCT column\$1name) per ottimizzare le prestazioni delle query e ridurre il costo delle query. Per informazioni, consulta [Funzioni di aggregazione](aggregate-functions.md).
+ Utilizzate un'espressione CASE per eseguire aggregazioni complesse invece di selezionare più volte dalla stessa tabella. Per informazioni, consulta [L'istruzione CASE](conditional-expressions.CASE.md).
+ Ove possibile, includi un intervallo di tempo nella clausola WHERE della query. Ciò ottimizza le prestazioni e i costi delle query. Ad esempio, se hai bisogno solo dell'ultima ora di dati nel tuo set di dati, includi un predicato temporale come time > ago (1h). Consulta [SELECTUNLOAD](supported-sql-constructs.SELECT.md) e [Intervallo e durata](date-time-functions.md#date-time-functions-interval-duration).
+ Quando una query accede a un sottoinsieme di misure in una tabella, includi sempre i nomi delle misure nella clausola WHERE della query.
+ Ove possibile, utilizzate l'operatore di uguaglianza per confrontare dimensioni e misure nella clausola WHERE di una query. Un predicato di uguaglianza sui nomi delle dimensioni e delle misure consente di migliorare le prestazioni delle query e ridurre i costi delle query.
+ Ove possibile, evitate di utilizzare le funzioni della clausola WHERE per ottimizzare i costi.
+ Evita di utilizzare la clausola LIKE più volte. Piuttosto, utilizzate le espressioni regolari quando filtrate più valori su una colonna di stringhe. Per informazioni, consulta [Funzioni di espressioni regolari](regex-functions.md).
+ Utilizzate solo le colonne necessarie nella clausola GROUP BY di una query.
+ Se il risultato della query deve essere in un ordine specifico, specifica esplicitamente tale ordine nella clausola ORDER BY della query più esterna. Se il risultato della query non richiede l'ordinamento, evita di utilizzare una clausola ORDER BY per migliorare le prestazioni delle query.
+ Utilizzate una clausola LIMIT se avete bisogno solo delle prime N righe della query.
+ Se utilizzi una clausola ORDER BY per esaminare i valori N superiori o inferiori, utilizza una clausola LIMIT per ridurre i costi delle query.
+ Utilizza il token di impaginazione della risposta restituita per recuperare i risultati della query. Per ulteriori informazioni, consulta la sezione [Query](API_query_Query.html).
+ Se hai iniziato a eseguire una query e ti rendi conto che la query non restituirà i risultati che stai cercando, annulla la query per risparmiare sui costi. Per ulteriori informazioni, consulta [CancelQuery](API_query_CancelQuery.html).
+ Se la tua applicazione presenta problemi di throttling, continua a inviare dati ad Amazon Timestream alla stessa velocità LiveAnalytics per consentire ad Amazon Timestream di scalare automaticamente LiveAnalytics per soddisfare le esigenze di throughput delle query della tua applicazione.
+ Se i requisiti di concorrenza delle query delle tue applicazioni superano i limiti predefiniti di Timestream for, contatta per eventuali aumenti dei limiti. LiveAnalytics Supporto 

# Query pianificate
<a name="scheduledqueries-bp"></a>

Le query pianificate consentono di ottimizzare le dashboard preelaborando alcune statistiche aggregate relative all'intero parco macchine. Quindi una domanda naturale da porsi è come prendere in considerazione il caso d'uso e identificare quali risultati precalcolare e come utilizzare questi risultati archiviati in una tabella derivata per creare la dashboard. La prima fase di questo processo consiste nell'identificare i pannelli da precalcolare. Di seguito sono riportate alcune linee guida di alto livello:
+ Considera i byte scansionati dalle query utilizzate per popolare i pannelli, la frequenza di ricarica del dashboard e il numero di utenti simultanei che caricherebbero questi dashboard. È necessario iniziare con i dashboard caricati più frequentemente e scansionare quantità significative di dati. Le prime due dashboard nell'esempio di [dashboard aggregata](https://docs.aws.amazon.com/timestream/latest/developerguide/scheduledqueries-example1.html) e la dashboard aggregata nell'esempio [drill down](https://docs.aws.amazon.com/timestream/latest/developerguide/scheduledqueries-example2.html) sono buoni esempi di tali dashboard. 
+ [Considerate quali calcoli vengono utilizzati ripetutamente.](https://docs.aws.amazon.com/timestream/latest/developerguide/cheduledqueries-example3.html) Sebbene sia possibile creare un'interrogazione pianificata per ogni pannello e ogni valore variabile utilizzato nel pannello, è possibile ottimizzare in modo significativo i costi e il numero di query pianificate cercando soluzioni per utilizzare un unico calcolo per precalcolare i dati necessari per più pannelli. 
+ Considerate la frequenza delle interrogazioni pianificate per aggiornare i risultati materializzati nella tabella derivata. È consigliabile analizzare la frequenza di aggiornamento di una dashboard rispetto alla finestra temporale richiesta in una dashboard rispetto al time binning utilizzato nel precalcolo e ai pannelli nei dashboard. Ad esempio, se una dashboard che traccia gli aggregati orari degli ultimi giorni viene aggiornata solo una volta ogni poche ore, potresti voler configurare le query pianificate in modo che si aggiornino solo una volta ogni 30 minuti o un'ora. D'altra parte, se disponi di una dashboard che traccia gli aggregati al minuto e viene aggiornata ogni minuto circa, vorrai che le tue query pianificate aggiornino i risultati ogni minuto o pochi minuti.
+ Considerate quali modelli di query possono essere ulteriormente ottimizzati (sia dal punto di vista del costo che della latenza delle query) utilizzando le query pianificate. Ad esempio, quando si calcolano i valori di dimensione univoci utilizzati spesso come variabili nei dashboard, o si restituisce l'ultimo punto dati emesso da un sensore o il primo punto dati emesso da un sensore dopo una certa data, ecc. Alcuni di questi [modelli di esempio](https://docs.aws.amazon.com/timestream/latest/developerguide/scheduledqueries-patterns.html) sono discussi in questa guida.

Le considerazioni precedenti avranno un impatto significativo sui vostri risparmi quando sposterete la dashboard per interrogare le tabelle derivate, sulla freschezza dei dati nelle dashboard e sui costi sostenuti dalle query pianificate.

# Applicazioni client e integrazioni supportate
<a name="client-integrations"></a>

Esegui l'applicazione client dalla stessa regione di Timestream per ridurre le latenze di rete e LiveAnalytics i costi di trasferimento dei dati. Per ulteriori informazioni sull'utilizzo di altri servizi, consulta. [Utilizzo di altri servizi](OtherServices.md) Di seguito sono riportati altri link utili.
+  [Migliori pratiche per AWS lo sviluppo con il AWS SDK per Java](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/best-practices.html)
+  [Procedure consigliate per l'utilizzo AWS Lambda delle funzioni](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html)
+ [Best practice per Amazon Managed Service per Apache Flink](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/best-practices.html)
+ [Le migliori pratiche per la creazione di dashboard in Grafana](https://grafana.com/docs/grafana/latest/best-practices/best-practices-for-creating-dashboards/)

# Ambito generale
<a name="general"></a>
+ Assicurati di seguire [The AWS Well-Architected](https://wa.aws.amazon.com/index.en.html) Framework quando usi Timestream per. LiveAnalytics Questo white paper fornisce indicazioni sulle migliori pratiche in materia di eccellenza operativa, sicurezza, affidabilità, efficienza delle prestazioni e ottimizzazione dei costi. 

# Misurazione e ottimizzazione dei costi
<a name="metering-and-pricing"></a>

Con Amazon Timestream LiveAnalytics for, paghi solo per ciò che usi. Timestream per LiveAnalytics contatori separati per scritture, dati archiviati e dati scansionati tramite query. [Il prezzo di ciascuna dimensione di misurazione è specificato nella pagina dei prezzi.](https://aws.amazon.com/timestream/pricing/) Puoi stimare la tua fattura mensile utilizzando il calcolatore dei prezzi di [Amazon Timestream LiveAnalytics ](samples/Amazon_Timestream_Pricing_Calculator.zip) for Pricing.

Questa sezione descrive come funziona la misurazione per le scritture, l'archiviazione e le query in Timestream for. LiveAnalytics Vengono inoltre forniti scenari e calcoli di esempio. Inoltre, è incluso un elenco di best practice per l'ottimizzazione dei costi. Puoi selezionare un argomento qui sotto: 

**Topics**
+ [Scritture](metering-and-pricing.writes.md)
+ [Archiviazione](metering-and-pricing.storage.md)
+ [Query](metering-and-pricing.queries.md)
+ [Ottimizzazione dei costi](metering-and-pricing.cost-optimization.md)
+ [Monitoraggio con Amazon CloudWatch](monitoring-cloudwatch.md)

# Scritture
<a name="metering-and-pricing.writes"></a>

 La dimensione di scrittura di ogni evento della serie temporale viene calcolata come la somma della dimensione del timestamp e di uno o più nomi di dimensione, valori di dimensione, nomi di misure e valori di misura. La dimensione del timestamp è di 8 byte. Le dimensioni dei nomi delle dimensioni, dei valori delle dimensioni e dei nomi delle misure sono la lunghezza dei byte codificati UTF-8 della stringa che rappresenta ogni nome di dimensione, valore di dimensione e nome di misura. La dimensione del valore di misura dipende dal tipo di dati. È 1 byte per il tipo di dati booleano, 8 byte per bigint e double e la lunghezza dei byte con codifica UTF-8 per le stringhe. Ogni scrittura viene conteggiata in unità di 1 KiB. 

Di seguito vengono forniti due esempi di calcolo:

**Topics**
+ [Calcolo della dimensione di scrittura di un evento di serie temporali](#metering-and-pricing.writes.write-size-one-event)
+ [Calcolo del numero di scritture](#metering-and-pricing.writes.write-size-multiple-events)

## Calcolo della dimensione di scrittura di un evento di serie temporali
<a name="metering-and-pricing.writes.write-size-one-event"></a>

Consideriamo un evento di serie temporale che rappresenta l'utilizzo della CPU di un'istanza EC2, come illustrato di seguito:


| Orario | region | az | vpc | Hostname (Nome host) | measure\$1name | measure\$1value::double | 
| --- | --- | --- | --- | --- | --- | --- | 
|  1602983435238563000  |  us-east-1  |  1d  |  vpc-1a2b3c4d  |  Host-24 GJU  |  utilizzazione\$1cpu\$1  |  35,0  | 

La dimensione di scrittura dell'evento della serie temporale può essere calcolata come:
+ tempo = 8 byte
+ prima dimensione = 15 byte (\$1) `region` `us-east-1`
+ seconda dimensione = 4 byte (\$1) `az` `1d`
+ terza dimensione = 15 byte (\$1) `vpc` `vpc-1a2b3c4d`
+ quarta dimensione = 18 byte (\$1) `hostname` `host-24Gju`
+ nome della misura = 15 byte () `cpu_utilization`
+ valore della misura = 8 byte

**Dimensione di scrittura dell'evento della serie temporale = 83 byte**

## Calcolo del numero di scritture
<a name="metering-and-pricing.writes.write-size-multiple-events"></a>

Consideriamo ora 100 istanze EC2, simili all'istanza descritta in[Calcolo della dimensione di scrittura di un evento di serie temporali](#metering-and-pricing.writes.write-size-one-event), che emettono metriche ogni 5 secondi. Il totale delle scritture mensili per le istanze EC2 varierà in base al numero di eventi di serie temporali esistenti per scrittura e all'eventuale utilizzo di attributi comuni durante il raggruppamento degli eventi delle serie temporali. Viene fornito un esempio di calcolo del totale delle scritture mensili per ciascuno dei seguenti scenari:

**Topics**
+ [Un evento di serie temporale per scrittura](#metering-and-pricing.writes.write-size-multiple-events.one-event-per-write)
+ [Raggruppamento di eventi di serie temporali in una scrittura](#metering-and-pricing.writes.write-size-multiple-events.batching-events)
+ [Suddivisione in batch di eventi di serie temporali e utilizzo di attributi comuni in una scrittura](#metering-and-pricing.writes.write-size-multiple-events.batching-events-and-using-common-attrbs)

### Un evento di serie temporale per scrittura
<a name="metering-and-pricing.writes.write-size-multiple-events.one-event-per-write"></a>

Se ogni scrittura contiene un solo evento di serie temporali, le scritture mensili totali vengono calcolate come segue:
+ 100 eventi di serie temporali = 100 scritture ogni 5 secondi
+ x 12 writes/minute = 1.200 scritture
+ x 60 minutes/hour = 72.000 scritture
+ x 24 hours/day = 1.728.000 scritture
+ x 30 = 51.840.000 scritture days/month 

**Totale delle scritture mensili = 51.840.000**

### Raggruppamento di eventi di serie temporali in una scrittura
<a name="metering-and-pricing.writes.write-size-multiple-events.batching-events"></a>

Dato che ogni scrittura è misurata in unità di 1 KB, una scrittura può contenere un batch di 12 eventi di serie temporali (998 byte) e le scritture mensili totali vengono calcolate come segue:
+ 100 eventi di serie temporali = 9 scritture (12 eventi di serie temporali per scrittura) ogni 5 secondi
+ x 12 writes/minute = 108 scritture
+ x 60 minutes/hour = 6.480 scritture
+ x 24 hours/day = 155.520 scritture
+ x 30 days/month = 4.665.600 scritture

**Totale delle scritture mensili = 4.665.600**

### Suddivisione in batch di eventi di serie temporali e utilizzo di attributi comuni in una scrittura
<a name="metering-and-pricing.writes.write-size-multiple-events.batching-events-and-using-common-attrbs"></a>

Se la regione, az, vpc e il nome della misura sono comuni tra 100 istanze EC2, i valori comuni possono essere specificati una sola volta per scrittura e sono indicati come attributi comuni. In questo caso, la dimensione degli attributi comuni è di 52 byte e la dimensione degli eventi delle serie temporali è di 27 byte. Dato che ogni scrittura è misurata in unità di 1 KB, una scrittura può contenere 36 eventi di serie temporali e attributi comuni e le scritture mensili totali vengono calcolate come segue:
+ 100 eventi di serie temporali = 3 scritture (36 eventi di serie temporali per scrittura) ogni 5 secondi
+ x 12 writes/minute = 36 scritture
+ x 60 minutes/hour = 2.160 scritture
+ x 24 hours/day = 51.840 scritture
+ x 30 days/month = 1.555.200 scritture

**Totale delle scritture mensili = 1.555.200**

**Nota**  
A causa dell'utilizzo del batch, degli attributi comuni e dell'arrotondamento delle scritture a unità di 1 KB, la dimensione di archiviazione degli eventi della serie temporale potrebbe essere diversa dalla dimensione di scrittura.

# Archiviazione
<a name="metering-and-pricing.storage"></a>

 La dimensione di archiviazione di ogni evento della serie temporale nell'archivio di memoria e nell'archivio magnetico viene calcolata come somma delle dimensioni del timestamp, dei nomi delle dimensioni, dei valori delle dimensioni, dei nomi delle misure e dei valori delle misure. La dimensione del timestamp è di 8 byte. Le dimensioni dei nomi delle dimensioni, dei valori delle dimensioni e dei nomi delle misure sono la lunghezza dei byte codificati UTF-8 di ogni stringa che rappresenta il nome della dimensione, il valore della dimensione e il nome della misura. La dimensione del valore di misura dipende dal tipo di dati. È 1 byte per i tipi di dati booleani, 8 byte per bigint e double e la lunghezza dei byte con codifica UTF-8 per le stringhe. Ogni misura viene archiviata come record separato in Amazon Timestream LiveAnalytics per, ad esempio se l'evento della serie temporale ha quattro misure, ci saranno quattro record per quell'evento di serie temporale in archiviazione. 

Considerando l'esempio dell'evento di serie temporale che rappresenta l'utilizzo della CPU di un'istanza EC2 (vedi[Calcolo della dimensione di scrittura di un evento di serie temporali](metering-and-pricing.writes.md#metering-and-pricing.writes.write-size-one-event)), la dimensione di archiviazione dell'evento della serie temporale viene calcolata come segue:
+ tempo = 8 byte
+ prima dimensione = 15 byte (\$1) `region` `us-east-1`
+ seconda dimensione = 4 byte (\$1) `az` `1d`
+ terza dimensione = 15 byte (\$1) `vpc` `vpc-1a2b3c4d`
+ quarta dimensione = 18 byte (\$1) `hostname` `host-24Gju`
+ nome della misura = 15 byte () `cpu_utilization`
+ valore della misura = 8 byte

**Dimensione di memorizzazione dell'evento della serie temporale = 83 byte**

**Nota**  
L'archivio di memoria viene misurato in GB/ora e l'archivio magnetico viene misurato in GB/mese.

# Query
<a name="metering-and-pricing.queries"></a>

[Le query vengono addebitate in base alla durata delle [unità di calcolo Timestream (TCUs)](tcu.md) utilizzate dall'applicazione in ore TCU, come specificato nella pagina dei prezzi di Amazon Timestream.](https://aws.amazon.com/timestream/pricing/) Amazon Timestream LiveAnalytics per il motore di query elimina i dati irrilevanti durante l'elaborazione di una query. Le interrogazioni con proiezioni e predicati, tra cui intervalli di tempo, nomi di misure e nomi di and/or dimensioni, consentono al motore di elaborazione delle query di ridurre una quantità significativa di dati e aiutano a ridurre i costi delle query.

# Ottimizzazione dei costi
<a name="metering-and-pricing.cost-optimization"></a>

Per ottimizzare i costi di scrittura, archiviazione e query, utilizza le seguenti best practice con Amazon Timestream per: LiveAnalytics
+ Batch di più eventi di serie temporali per scrittura per ridurre il numero di richieste di scrittura.
+ Prendi in considerazione l'utilizzo di record a più misure, che consentono di scrivere più misure di serie temporali in un'unica richiesta di scrittura e di archiviare i dati in modo più compatto. Ciò riduce il numero di richieste di scrittura, nonché i costi di archiviazione dei dati e i costi delle query. 
+ Utilizza gli attributi comuni con il batching per raggruppare più eventi di serie temporali per scrittura e ridurre ulteriormente il numero di richieste di scrittura.
+ Imposta la conservazione dei dati dell'archivio di memoria in modo che soddisfi i requisiti dell'applicazione per l'elaborazione dei dati in arrivo in ritardo. I dati in arrivo tardivo sono dati in entrata con un timestamp precedente all'ora corrente e al di fuori del periodo di conservazione dell'archivio di memoria.
+ Imposta la conservazione dei dati dell'archivio magnetico in modo che soddisfi i tuoi requisiti di archiviazione dei dati a lungo termine.
+ Durante la scrittura delle query, includi solo i nomi delle misure e delle dimensioni essenziali per l'interrogazione. L'aggiunta di colonne estranee aumenterà le scansioni dei dati e quindi aumenterà anche il costo delle query. Ti consigliamo di esaminare gli [approfondimenti delle query](using-query-insights.md) per valutare l'efficienza di potatura delle dimensioni e delle misure incluse.
+ Ove possibile, includi un intervallo di tempo nella clausola WHERE della richiesta. Ad esempio, se hai bisogno solo dell'ultima ora di dati nel tuo set di dati, includi un predicato temporale come. `time > ago(1h)`
+ Quando una query accede a un sottoinsieme di misure in una tabella, includi sempre i nomi delle misure nella clausola WHERE della query.
+ Se hai iniziato a eseguire una query e ti rendi conto che la query non restituirà i risultati che stai cercando, annulla la query per risparmiare sui costi.

# Monitoraggio con Amazon CloudWatch
<a name="monitoring-cloudwatch"></a>

Puoi monitorare Timestream per utilizzare LiveAnalytics Amazon CloudWatch, che raccoglie ed elabora i dati grezzi da Timestream per LiveAnalytics trasformarli in metriche leggibili. near-real-time Registra queste statistiche per due settimane in modo da poter accedere alle informazioni storiche e avere una prospettiva migliore sulle prestazioni della tua applicazione o del tuo servizio web. Per impostazione predefinita, Timestream per i dati LiveAnalytics metrici viene inviato automaticamente CloudWatch in periodi di 1 minuto o 15 minuti. Per ulteriori informazioni, consulta [What Is Amazon CloudWatch?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/WhatIsCloudWatch.html) nella *Amazon CloudWatch User Guide*.

**Topics**
+ [Come posso usare Timestream per LiveAnalytics le metriche?](#how-to-use-metrics)
+ [Timestream per LiveAnalytics metriche e dimensioni](metrics-dimensions.md)
+ [Creazione di CloudWatch allarmi per monitorare Timestream LiveAnalytics](creating-alarms.md)

## Come posso usare Timestream per LiveAnalytics le metriche?
<a name="how-to-use-metrics"></a>

Le metriche riportate da Timestream LiveAnalytics forniscono informazioni che puoi analizzare in diversi modi. L'elenco seguente mostra alcuni usi comuni dei parametri. Questi suggerimenti sono solo introduttivi e non costituiscono un elenco completo.


****  

|  In che modo?  |  Metriche pertinenti  | 
| --- | --- | 
|  How can I determine if any system errors occurred?  |  È possibile monitorare `SystemErrors` per determinare se eventuali richieste hanno generato un codice di errore del server. In genere, questo parametro deve essere uguale a zero. Se non lo è, potresti voler indagare.  | 
|  How can I monitor the amount of data in the memory store?  |  È possibile monitorare `MemoryCumulativeBytesMetered` durante il periodo di tempo specificato, per monitorare la quantità di dati archiviati nell'archivio di memoria in byte. Questa metrica viene emessa ogni ora ed è possibile tenere traccia dei byte archiviati in un account e della granularità del database. L'archiviazione di memoria viene misurata in GB all'ora (il costo di archiviazione di 1 GB di dati per un'ora). Quindi, moltiplicando il valore orario di `MemoryCumulativeBytesMetered` con i prezzi in GB all'ora nella tua regione, otterrai il costo orario sostenuto. Dimensioni: operazione (archiviazione), nome della metrica DatabaseName  | 
|  How can I monitor the amount of data in the magnetic store?  |   È possibile monitorare `MagneticCumulativeBytesMetered` durante il periodo di tempo specificato, per monitorare la quantità di dati archiviati nell'archivio magnetico in byte. Questa metrica viene emessa ogni ora ed è possibile tenere traccia dei byte archiviati in un account e della granularità del database. L'archiviazione di memoria viene misurata in GB al mese (il costo di archiviazione di 1 GB di dati per un mese). Quindi, moltiplicando il valore orario `MagneticCumulativeBytesMetered` con i prezzi in GB al mese nella tua regione, otterrai il costo orario sostenuto. Ad esempio, se il valore di `MagneticCumulativeBytesMetered` è 107374182400 byte (100 GB), la tariffa oraria di 1 GB di dati nell'archivio magnetico = (0,03) (prezzo us-east-1)/(30,4\$124). Moltiplicando questo valore per il valore in GB si otterrà \$10,004 \$1 per quell'ora. `MagneticCumulativeBytesMetered` Dimensioni: operazione (archiviazione), nome della metrica DatabaseName  | 
|  How can I monitor the data scanned by queries?  |   È possibile monitorare `CumulativeBytesMetered` durante il periodo di tempo specificato, per monitorare i dati scansionati dalle query (in byte) inviate a Timestream for. LiveAnalytics Questa metrica viene emessa dopo l'esecuzione della query ed è possibile tenere traccia dei dati scansionati in base alla granularità dell'account e del database. Puoi calcolare il costo delle query per un determinato periodo moltiplicando il valore della metrica per il prezzo per GB scansionato nella tua regione. I byte scansionati dalle query pianificate vengono contabilizzati in questa metrica. Dimensioni: operazione (interrogazione), nome della metrica DatabaseName  | 
|  How can I monitor the data scanned by scheduled queries?  |   È possibile monitorare `CumulativeBytesMetered` durante il periodo di tempo specificato, per monitorare i dati scansionati dalle query pianificate (in byte) eseguite da Timestream for. LiveAnalytics Questa metrica viene emessa dopo l'esecuzione della query ed è possibile tenere traccia dei dati scansionati in base alla granularità dell'account e del database. Puoi calcolare il costo delle query per un determinato periodo moltiplicando il valore della metrica per il prezzo per GB scansionato nella tua regione.  Nella query vengono contabilizzati anche i byte misurati. `CumulativeBytesMetered`  Dimensioni: operazione (TriggeredScheduledQuery), DatabaseName nome della metrica  | 
|  How can I monitor the number of records ingested?  |  È possibile monitorare `NumberOfRecords` nel periodo di tempo specificato per monitorare il numero di record acquisiti. È possibile tenere traccia dei byte archiviati in un account e della granularità del database. È inoltre possibile utilizzare questa metrica per monitorare le scritture effettuate da Scheduled Queries quando i risultati delle query vengono scritti in una tabella separata. Quando si utilizza l'`WriteRecords`API, la metrica viene emessa per ogni `WriteRecords` richiesta, con la dimensione Operation impostata CloudWatch su. `WriteRecords` Quando si utilizza `BatchLoad` o `ScheduledQuery` APIs, la metrica viene emessa a intervalli determinati dal servizio fino al completamento dell'attività. La dimensione CloudWatch Operazione per questa metrica è `BatchLoad` o`ScheduledQuery`, a seconda dell'API utilizzata. Dimensioni: operazione (WriteRecords, o ScheduledQuery) BatchLoad DatabaseName, nome della metrica  | 
|  How can I monitor the cost of records ingested?  |  È possibile monitorare `CumulativeBytesMetered` per monitorare il numero di byte ingeriti che generano costi. È possibile tenere traccia dei byte archiviati in un account e della granularità del database. I record importati vengono misurati in byte cumulativi. Moltiplicando il valore dei prezzi di `CumulativeBytesMetered` By Writes nella tua regione, otterrai i costi di importazione sostenuti. Quando si utilizza l'`WriteRecords`API, questa metrica viene emessa per ogni `WriteRecords` richiesta, con la dimensione Operation impostata su. CloudWatch `WriteRecords` Quando si utilizza l'`ScheduledQuery`API `BatchLoad` o, la metrica viene emessa a intervalli determinati dal servizio fino al completamento dell'attività. La dimensione CloudWatch Operation per questa metrica è `BatchLoad` o `ScheduledQuery` dipende dall'API utilizzata. Dimensioni: operazione (WriteRecords, BatchLoad, or ScheduledQuery) DatabaseName, nome della metrica  | 
| How can I monitor the Timestream Compute Units (TCUs) used in my account? |  Puoi eseguire il monitoraggio `QueryTCU` per tutto il periodo di tempo desiderato, per monitorare le unità di calcolo fornite nel tuo account. Questa metrica viene emessa ogni 15 minuti. Unità: `Count` Statistiche valide: minimo, massimo Metrica: `ResourceCount` Dimensioni:`Service: Timestream`,,`Namespace:AWS/Usage`,`Resource: QueryTCU`, `Type: Resource` `Class: OnDemand`  | 
| How can I monitor the number of provisioned Timestream Compute Units (TCUs) used in my account? |  La TCU fornita è disponibile solo nella regione Asia Pacifico (Mumbai). È possibile monitorare `QueryTCU` per monitorare il numero di provisioning TCUs utilizzati per il carico di lavoro delle query nell'account. Questa metrica viene emessa ogni minuto per il carico di lavoro durante le interrogazioni attive dall'account. Unità: `Count` Statistiche valide: minimo, massimo Metrica: `ResourceCount` Dimensioni:`Service: Timestream`,,`Namespace: AWS/Usage`, `Resource: ProvisionedQueryTCU` `Class: None`  | 
| How can I monitor the provisioned Timestream Compute Units (TCUs) used in my account? |  La TCU fornita è disponibile solo nella regione Asia Pacifico (Mumbai). È possibile eseguire il monitoraggio nell'`QueryTCU`arco del periodo di tempo specificato, per monitorare le unità di calcolo utilizzate per il carico di lavoro delle query nell'account. Questa metrica viene emessa con unità di calcolo massime e minime per ogni minuto durante il carico di lavoro di interrogazione attivo dall'account. Unità: `Count` Statistiche valide: minimo, massimo Metrica: `ResourceCount` Dimensioni:`Service: Timestream`,,`Namespace: AWS/Usage`, `Resource: QueryTCU` `Class: Provisioned`  | 

# Timestream per LiveAnalytics metriche e dimensioni
<a name="metrics-dimensions"></a>

Quando interagisci con Timestream for LiveAnalytics, invia le seguenti metriche e dimensioni ad Amazon. CloudWatch Tutte le metriche vengono aggregate e riportate ogni minuto. È possibile utilizzare le seguenti procedure per visualizzare le metriche di Timestream for. LiveAnalytics

**Per visualizzare le metriche utilizzando la console CloudWatch**

I parametri vengono raggruppati prima in base allo spazio dei nomi del servizio e successivamente in base alle diverse combinazioni di dimensioni all'interno di ogni spazio dei nomi.

1. Apri la CloudWatch console all'indirizzo [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Se necessario, modificare la regione . Nella barra di navigazione, scegli la regione in cui risiedono AWS le tue risorse. Per ulteriori informazioni, consulta [AWS Endpoint del servizio](https://docs.aws.amazon.com/general/latest/gr/rande.html).

1. Nel riquadro di navigazione, seleziona **Parametri**.

1. Nella scheda **Tutte le metriche**, scegli `AWS/Timestream for LiveAnalytics.`

**Per visualizzare le metriche utilizzando la CLI AWS**
+ Al prompt dei comandi utilizza il comando seguente.

  ```
  1. aws cloudwatch list-metrics --namespace "AWS/Timestream"
  ```

## Dimensioni per Timestream for metrics LiveAnalytics
<a name="mcs-metric-dimensions"></a>

Le metriche per Timestream for LiveAnalytics sono qualificate in base ai valori dell'account, del nome della tabella o dell'operazione. Puoi utilizzare la CloudWatch console per recuperare Timestream per LiveAnalytics i dati relativi a una qualsiasi delle dimensioni nella tabella seguente:


|  Dimensione  |  Description  | 
| --- | --- | 
|  DatabaseName  |  Questa dimensione limita i dati a uno specifico Timestream per il database. LiveAnalytics Questo valore può essere qualsiasi database nella regione corrente e nell'account corrente AWS   | 
|  Operation  |  Questa dimensione limita i dati a uno dei Timestream per LiveAnalytics operazioni come`Storage`, `WriteRecords``BatchLoad`, o. `ScheduledQuery` Per un elenco di valori disponibili, consulta il riferimento all'API Timestream for LiveAnalytics Query.  | 
|  TableName  |  Questa dimensione limita i dati a una tabella specifica in un database Timestream for. LiveAnalyticss   | 

**Importante**  
`CumulativeBytesMetered``UserErrors`e le `SystemErrors` metriche hanno solo la dimensione. `Operation` `SuccessfulRequestLatency`le metriche hanno sempre `Operation` una dimensione, ma possono anche avere le `TableName` dimensioni `DatabaseName` e, a seconda del valore di. `Operation` Questo perché Timestream per le operazioni a LiveAnalytics livello di tabella ha `DatabaseName` e `TableName` come dimensioni, ma le operazioni a livello di account no.

## Timestream per le metriche LiveAnalytics
<a name="mcs-metrics"></a>

**Nota**  
Amazon CloudWatch aggrega tutti i seguenti valori Timestream per le LiveAnalytics metriche a intervalli di un minuto.


**Metriche generali**  

| Metrica | Description | 
| --- | --- | 
|  `SuccessfulRequestLatency`  |  Le richieste riuscite a Timestream per il LiveAnalytics periodo di tempo specificato. SuccessfulRequestLatency può fornire due diversi tipi di informazioni: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/metrics-dimensions.html) SuccessfulRequestLatency riflette l'attività solo all'interno di Timestream LiveAnalytics e non tiene conto della latenza di rete o dell'attività sul lato client.  Unità: `Milliseconds` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/metrics-dimensions.html) Statistiche valide: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/metrics-dimensions.html)  | 


**Metriche di scrittura e archiviazione**  

| Metrica | Description | 
| --- | --- | 
|  `MagneticStoreRejectedRecordCount`  |  Il numero di record scritti di archiviazione magnetica che sono stati rifiutati in modo asincrono. Ciò può accadere se il nuovo record ha una versione inferiore alla versione corrente o se il nuovo record ha una versione uguale alla versione corrente ma contiene dati diversi.  Unità: `Count` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/metrics-dimensions.html) Statistiche valide: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/metrics-dimensions.html)  | 
|  `MagneticStoreRejectedUploadUserFailures`  |  Il numero di report relativi ai record respinti dall'archivio magnetico che non sono stati caricati a causa di errori dell'utente. Ciò può essere dovuto a autorizzazioni IAM non configurate correttamente o all'eliminazione di un bucket S3.  Unità: `Count` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/metrics-dimensions.html) Statistiche valide: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/metrics-dimensions.html)  | 
|  `MagneticStoreRejectedUploadSystemFailures`  |  Il numero di Magnetic Store ha rifiutato i report relativi ai record che non sono stati caricati a causa di errori di sistema.   Unità: `Count` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/metrics-dimensions.html) Statistiche valide: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/metrics-dimensions.html)  | 
|  `ActiveMagneticStorePartitions`  |  Il numero di partizioni di archiviazione magnetica che assorbono attivamente i dati in un determinato momento.  Unità: `Count` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/metrics-dimensions.html) Statistiche valide: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/metrics-dimensions.html)  | 
|  `MagneticStorePendingRecordsLatency`  |  La scrittura più vecchia su un archivio magnetico che non è disponibile per l'interrogazione. I record scritti nell'archivio magnetico saranno disponibili per l'interrogazione entro 6 ore.   Unità: `Milliseconds` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/metrics-dimensions.html) Statistiche valide: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/metrics-dimensions.html)  | 
|  `MemoryCumulativeBytesMetered`  |  La quantità di dati archiviati nell'archivio di memoria, in byte  Unità: `Bytes`  Dimensioni: `Operation` Statistiche valide: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/metrics-dimensions.html)  | 
|  `MagneticCumulativeBytesMetered`  |  La quantità di dati archiviati nell'archivio magnetico, in byte  Unità: `Bytes`  Dimensioni: `Operation` Statistiche valide: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/metrics-dimensions.html)  | 
|  `CumulativeBytesMetered`  |  La quantità di dati misurata dall'ingestione in Timestream for, in byte. LiveAnalytics  Unità: `Bytes` Dimensioni: `Operation` Statistiche valide: `Sum`  | 
|  `NumberOfRecords`  |  Il numero di record inseriti in Timestream per. LiveAnalytics  Unità: `Count` Dimensioni: `Operation` Statistiche valide: `Sum`  | 


**Metriche di interrogazione**  

| Metrica | Description | 
| --- | --- | 
|  `CumulativeBytesMetered`  |  La quantità di dati analizzati dalle query inviate a Timestream per, in byte. LiveAnalytics   Unità: `Bytes`  Dimensioni: `Operation` Statistiche valide: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/metrics-dimensions.html)  | 
| ResourceCount |  Le unità di calcolo Timestream (TCUs) utilizzate per il carico di lavoro delle query nell'account. Questa metrica viene emessa con unità di calcolo massime e minime per ogni minuto durante il carico di lavoro di interrogazione attivo dall'account. Unità: `Count` Statistiche valide: minimo, massimo Dimensioni:`Service: Timestream`,`Resource: QueryTCU`,`Type: Resource`, `Class: OnDemand`  | 


**Metriche degli errori**  

| Metrica | Description | 
| --- | --- | 
|  `SystemErrors`  |  Le richieste a Timestream LiveAnalytics generano un messaggio SystemError durante il periodo di tempo specificato. A di SystemError solito indica un errore interno del servizio.   Unità: `Count`  Dimensioni: `Operation` Statistiche valide: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/metrics-dimensions.html)  | 
|  `UserErrors`  |  Le richieste a Timestream LiveAnalytics generano un InvalidRequest errore durante il periodo di tempo specificato. An indica in InvalidRequest genere un errore sul lato client, ad esempio una combinazione di parametri non valida, un tentativo di aggiornare una tabella inesistente o una firma di richiesta errata. UserErrors rappresenta l'aggregato di richieste non valide per la regione corrente e l'account corrente. AWS AWS   Unità: `Count`  Dimensioni: `Operation` Statistiche valide: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/metrics-dimensions.html)  | 

**Importante**  
Non tutte le statistiche, come `Average` o `Sum`, si applicano a tutti i parametri. Tuttavia, tutti questi valori sono disponibili tramite Timestream per LiveAnalytics console o utilizzando la CloudWatch console o per tutte le AWS CLI metriche. AWS SDKs 

# Creazione di CloudWatch allarmi per monitorare Timestream LiveAnalytics
<a name="creating-alarms"></a>

Puoi creare un CloudWatch allarme Amazon per Timestream LiveAnalytics che invia un messaggio Amazon Simple Notification Service (Amazon SNS) quando l'allarme cambia stato. Un allarme monitora una singola metrica per un periodo di tempo specificato. L'allarme esegue una o più operazioni basate sul valore del parametro relativo a una soglia prestabilita per un certo numero di periodi. L'operazione corrisponde all'invio di una notifica a un argomento di Amazon SNS o a una policy di Auto Scaling.

Gli allarmi richiamano azioni solo per modifiche di stato sostenute. CloudWatch gli allarmi non richiamano azioni semplicemente perché si trovano in uno stato particolare. Lo stato deve essere cambiato e restare costante per un numero specificato di periodi.

Per ulteriori informazioni sulla creazione di CloudWatch allarmi, consulta [Using Amazon CloudWatch Alarms](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) nella *Amazon CloudWatch User Guide*.

# Risoluzione dei problemi
<a name="Troubleshooting"></a>

Questa sezione contiene informazioni sulla risoluzione dei problemi relativi a Timestream per. LiveAnalytics 

**Topics**
+ [Gestione delle valvole a farfalla WriteRecords](troubleshoot-writethrottles.md)
+ [Gestione dei record rifiutati](troubleshoot-rejectedrecords.md)
+ [Risoluzione dei problemi relativi a UNLOAD from Timestream per LiveAnalytics](troubleshoot-export-unload.md)
+ [Timestream per codici di errore LiveAnalytics specifici](APITimestreamSpecificErrors.md)

# Gestione delle valvole a farfalla WriteRecords
<a name="troubleshoot-writethrottles"></a>

Le richieste di scrittura dell'archivio di memoria su Timestream possono essere limitate man mano che Timestream si adatta alle esigenze di acquisizione dei dati dell'applicazione. Se le applicazioni presentano eccezioni di limitazione, è necessario continuare a inviare dati con la stessa velocità di trasmissione (o superiore) per consentire a Timestream di scalare automaticamente in base alle esigenze dell'applicazione. 

Le richieste di scrittura dell'archivio magnetico su Timestream potrebbero essere limitate se il limite massimo di partizioni di archiviazione magnetica che ricevono l'ingestione. Vedrai un messaggio di accelerazione che ti invita a controllare la metrica di Cloudwatch per questo database. `ActiveMagneticStorePartitions` Questa accelerazione può richiedere fino a 6 ore per risolversi. Per evitare questo rallentamento, è consigliabile utilizzare l'archivio di memoria per qualsiasi carico di lavoro di ingestione ad alta velocità. Per quanto riguarda l'ingestione di memorie magnetiche, è possibile effettuare l'acquisizione in un minor numero di partizioni limitando il numero di serie e la durata dell'acquisizione

Per ulteriori informazioni sulle migliori pratiche di inserimento dei dati, vedere. [Scritture](data-ingest.md)

# Gestione dei record rifiutati
<a name="troubleshoot-rejectedrecords"></a>

Se Timestream rifiuta i record, riceverai un messaggio `RejectedRecordsException` con i dettagli sul rifiuto. Per ulteriori informazioni su come estrarre queste informazioni dalla risposta, consulta [Gestione degli errori di scrittura](https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.write.html#code-samples.write.rejectedRecordException). WriteRecords 

 Tutti i rifiuti verranno inclusi in questa risposta **ad eccezione degli aggiornamenti dell'archivio magnetico in cui la versione del nuovo record è inferiore o uguale alla versione del record esistente**. In questo caso, Timestream non aggiornerà il record esistente che contiene la versione superiore. Timestream rifiuterà il nuovo record con una versione inferiore o uguale e scriverà questi errori in modo asincrono nel bucket S3. Per ricevere queste segnalazioni di errori asincrone, è necessario impostare la proprietà nella tabella. `MagneticStoreRejectedDataLocation` `MagneticStoreWriteProperties` 

# Risoluzione dei problemi relativi a UNLOAD from Timestream per LiveAnalytics
<a name="troubleshoot-export-unload"></a>

Di seguito sono riportate le istruzioni per la risoluzione dei problemi relativi al comando UNLOAD.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/troubleshoot-export-unload.html)

# Timestream per codici di errore LiveAnalytics specifici
<a name="APITimestreamSpecificErrors"></a>

Questa sezione contiene i codici di errore specifici per Timestream for. LiveAnalytics 

## Timestream per gli errori dell'API di scrittura LiveAnalytics
<a name="APITimestreamSpecificErrors.write"></a>

****InternalServerException****  
 Codice di stato HTTP: 500

**ThrottlingException**  
 Codice di stato HTTP: 429

**ValidationException**  
 Codice di stato HTTP: 400

**ConflictException**  
 Codice di stato HTTP: 409

**AccessDeniedException**  
Non disponi dell'autorizzazione di accesso sufficiente per eseguire questa operazione.  
 Codice di stato HTTP: 403

**ServiceQuotaExceededException**  
 Codice di stato HTTP: 402

**ResourceNotFoundException**  
 Codice di stato HTTP: 404

**RejectedRecordsException**  
 Codice di stato HTTP: 419

**InvalidEndpointException**  
 Codice di stato HTTP: 421

## Timestream per LiveAnalytics gli errori dell'API di interrogazione
<a name="APITimestreamSpecificErrors.query"></a>

**ValidationException**  
 Codice di stato HTTP: 400

**QueryExecutionException**  
 Codice di stato HTTP: 400

**ConflictException**  
 Codice di stato HTTP: 409

**ThrottlingException**  
 Codice di stato HTTP: 429

**InternalServerException**  
 Codice di stato HTTP: 500

**InvalidEndpointException**  
 Codice di stato HTTP: 421

# Quote
<a name="ts-limits"></a>

Questo argomento descrive le quote correnti, note anche come limiti, all'interno di Amazon Timestream for. LiveAnalytics Salvo dove diversamente specificato, ogni quota si applica a una Regione specifica.

**Topics**
+ [Quote di default](#ts-limits.default)
+ [Limiti del servizio](#system-limits)
+ [Tipi di dati supportati](#limits.datatypes)
+ [Caricamento in batch](#limits.batch-load)
+ [Vincoli per la denominazione](#limits.naming)
+ [Parole chiave riservate](#limits.reserved)
+ [Identificatori di sistema](#limits.system_identifier)
+ [UNLOAD](#limits.export-unload)

## Quote di default
<a name="ts-limits.default"></a>

La tabella seguente contiene il Timestream per le LiveAnalytics quote e i valori predefiniti.


| displayName | Descrizione | defaultValue | 
| --- | --- | --- | 
|  Database per account  |  Il numero massimo di database che è possibile creare per. Account AWS  |  500  | 
|  Tabelle per account  |  Il numero massimo di tabelle che è possibile creare per Account AWS.  |  50000  | 
|  Richiedi la tariffa per CRUD APIs  |  Il numero massimo di Create/Update/Delete richieste consentite al secondo per account, nella regione corrente.  |  1  | 
|  Richiedi una tariffa per altri APIs  |  Il numero massimo di List/Describe/Prepare/ExecuteScheduledQueryAPI richieste consentite al secondo per account, nella regione corrente.  |  5  | 
|  Query pianificate per account  |  Il numero massimo di interrogazioni pianificate che è possibile creare per. Account AWS  |  10000  | 
|  Numero massimo di partizioni di archiviazione magnetiche attive  |  Il numero massimo di partizioni di archiviazione magnetica attive per database. Una partizione può rimanere attiva fino a sei ore dopo la ricezione dell'ingestione.  |  250  | 

## Limiti del servizio
<a name="system-limits"></a>

La tabella seguente contiene il Timestream per i limiti del LiveAnalytics servizio e i valori predefiniti. Per modificare la conservazione dei dati per una tabella dalla console, vedi [Modificare una](https://docs.aws.amazon.com/timestream/latest/developerguide/console_timestream.html#console_timestream.edit-table.using-console) tabella.


| displayName | Descrizione | defaultValue | 
| --- | --- | --- | 
|  Periodo di importazione futuro in minuti  |  Il tempo di esecuzione massimo (in minuti) per i dati di serie temporali rispetto all'ora di sistema corrente. Ad esempio, se il periodo di inserimento futuro è di 15 minuti, Timestream for LiveAnalytics accetterà dati anticipati fino a 15 minuti rispetto all'ora corrente del sistema.  |  15  | 
|  Periodo minimo di conservazione per l'archiviazione in memoria in ore  |  La durata minima (in giorni) per la quale i dati possono essere conservati nell'archivio della memoria per tabella.  |  1  | 
|  Periodo massimo di conservazione per l'archivio della memoria in ore  |  La durata massima (in giorni) per la quale i dati possono essere mantenuti nell'archivio della memoria per tabella.  |  8766  | 
|  Periodo minimo di conservazione per l'archiviazione magnetica in giorni  |  La durata minima (in giorni) per la quale i dati devono essere conservati nell'archivio magnetico per tabella.  |  1  | 
|  Periodo massimo di conservazione per l'archiviazione magnetica in giorni  |  La durata massima (in giorni) per la quale i dati possono essere mantenuti nell'archivio magnetico. Questo valore equivale a 200 anni.  |  73000  | 
|  Periodo di conservazione predefinito per l'archivio magnetico (in giorni)  |  Il valore predefinito (in giorni) per il quale i dati vengono conservati nell'archivio magnetico per tabella. Questo valore è equivalente a 200 anni.  |  73000  | 
|  Periodo di conservazione predefinito per l'archiviazione in memoria, in ore  |  La durata predefinita (in ore) per la quale i dati vengono conservati nell'archivio di memoria.  |  6  | 
|  Dimensioni per tabella  |  Il numero massimo di dimensioni per tabella.  |  128  | 
|  Nomi delle misure per tabella  |  Il numero massimo di nomi di misure univoci per tabella.  |  8192  | 
|  Dimensione coppia nome-valore dimensione per serie  |  La dimensione massima della coppia nome-valore dimensione per serie.  |  2 KB  | 
|  Dimensione massima dei record  |  La dimensione massima di un record.  |  2 KB  | 
|  Record per richiesta WriteRecords API  |  Il numero massimo di record in una richiesta WriteRecords API.  |  100  | 
|  Lunghezza del nome della dimensione  |  Il numero massimo di byte per un nome di dimensione.  |  60 byte  | 
|  Lunghezza del nome della misura  |  Il numero massimo di byte per un nome di misura.  |  256 byte  | 
|  Lunghezza del nome del database  |  Il numero massimo di byte per un nome di database.  |  256 byte  | 
|  Lunghezza del nome della tabella  |  Il numero massimo di byte per un nome di tabella.  |  256 byte  | 
|  QueryString lunghezza in KB  |  La lunghezza massima (in KB) di una stringa di query in caratteri codificati UTF-8 per una query.  |  256  | 
|  Durata dell'esecuzione delle query in ore  |  La durata massima di esecuzione (in ore) per una query. Le query che richiedono più tempo scadranno.  |  1  | 
| Informazioni sulle interrogazioni | Il numero massimo di richieste API Query consentite con Query Insights abilitate al secondo per account, nella regione corrente. | 1 | 
|  Dimensione dei metadati per il risultato della query  |  La dimensione massima dei metadati per il risultato di una query.  |  100 KB  | 
|  Dimensione dei dati per il risultato della query  |  La dimensione massima dei dati per il risultato di una query.  |  5 Gigabyte  | 
|  Misure per record di più misure  |  Il numero massimo di misure per record di più misure.  |  256  | 
|  Dimensione del valore della misura per record di più misure  |  La dimensione massima dei valori delle misure per record di più misure.  |  2048  | 
|  Misure univoche su record di più misure per tabella  |  Le misure univoche in tutti i record di più misure definiti in una singola tabella.  |  1.024  | 
| Unità di calcolo Timestream () TCUs per account | Il numero massimo predefinito per account TCUs . | 200 | 
| Numero massimo di unità di calcolo Timestream fornite () TCUs per account. Provisioned TCU è disponibile solo nella regione Asia Pacifico (Mumbai).  | Il numero massimo di persone TCUs che puoi inserire nel tuo account. | 1000 | 
| MaxQuery TCU | La query massima TCUs che puoi impostare per il tuo account. | 1000 | 

## Tipi di dati supportati
<a name="limits.datatypes"></a>

La tabella seguente descrive i tipi di dati supportati per i valori di misura e dimensione.


| Descrizione | Timestream per valore LiveAnalytics  | 
| --- | --- | 
|  Tipi di dati supportati per i valori di misura.  |   Big int, double, string, boolean, MULTI, Timestamp   | 
|  Tipi di dati supportati per i valori delle dimensioni.  |   Stringa   | 

## Caricamento in batch
<a name="limits.batch-load"></a>

Le quote attuali, note anche come limiti, all'interno del carico in batch sono le seguenti.


| Descrizione | Timestream per quanto riguarda il valore LiveAnalytics  | 
| --- | --- | 
|  Dimensione massima dell'attività di caricamento in batch  |  La dimensione massima dell'attività di caricamento in batch non può superare i 100 GB.  | 
|  Quantità di file  |  Un'operazione di caricamento in batch non può contenere più di 100 file.  | 
|  Dimensione massima dei file  |  La dimensione massima dei file in un'operazione di caricamento in batch non può superare i 5 GB.  | 
|  Dimensione delle righe del file CSV  |  Una riga in un file CSV non può superare i 16 MB. Si tratta di un limite rigido che non può essere aumentato.  | 
|  Attività di caricamento in batch attive  |  Una tabella non può avere più di 5 attività di caricamento batch attive e un account non può avere più di 10 attività di caricamento batch attive. Timestream for LiveAnalytics limiterà le nuove attività di caricamento in batch fino a quando non saranno disponibili più risorse.  | 

## Vincoli per la denominazione
<a name="limits.naming"></a>

La tabella seguente descrive i vincoli di denominazione.


| Descrizione | Timestream per valore LiveAnalytics  | 
| --- | --- | 
|  La lunghezza massima del nome di una dimensione.  |   60 byte   | 
|  La lunghezza massima del nome di una misura.  |   256 byte   | 
|  La lunghezza massima del nome di una tabella o del nome di database.  |   256 byte   | 
|  Nome della tabella e del database  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/ts-limits.html)  I nomi delle tabelle e dei database vengono confrontati utilizzando la rappresentazione binaria UTF-8. Ciò significa che il confronto per i caratteri ASCII fa distinzione tra maiuscole e minuscole.   | 
|  Nome della misura  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/ts-limits.html)  I nomi delle tabelle e dei database vengono confrontati utilizzando la rappresentazione binaria UTF-8. Ciò significa che il confronto per i caratteri ASCII fa distinzione tra maiuscole e minuscole.   | 
|  Nome della dimensione  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/ts-limits.html)  I nomi delle dimensioni e delle misure vengono confrontati utilizzando la rappresentazione binaria UTF-8. Ciò significa che il confronto per i caratteri ASCII fa distinzione tra maiuscole e minuscole.   | 
| Tutti i nomi delle colonne | I nomi delle colonne non possono essere duplicati. Poiché i record composti da più misure rappresentano dimensioni e misure come colonne, il nome di una dimensione non può essere uguale al nome di una misura. I nomi rispettano la distinzione tra lettere maiuscole e minuscole. | 

## Parole chiave riservate
<a name="limits.reserved"></a>

 Tutte le seguenti sono parole chiave riservate: 
+ ALTER 
+ AND 
+ AS 
+ BETWEEN 
+ BY 
+ CASE 
+ CAST 
+ CONSTRAINT 
+ CREATE 
+ CROSS 
+ CUBE 
+ CURRENT\$1DATE
+ CURRENT\$1TIME 
+ CURRENT\$1TIMESTAMP 
+ CURRENT\$1USER 
+ DEALLOCATE 
+ DELETE 
+ DESCRIBE 
+ DISTINCT 
+ DROP
+ ELSE 
+ END 
+ ESCAPE 
+ EXCEPT 
+ EXECUTE 
+ EXISTS 
+ EXTRACT 
+ FALSE 
+ FOR 
+ FROM 
+ FULL 
+ GROUP
+ GROUPING 
+ HAVING 
+ IN 
+ INNER 
+ INSERT 
+ INTERSECT 
+ INTO 
+ IS 
+ JOIN 
+ LEFT 
+ LIKE
+ LOCALTIME 
+ LOCALTIMESTAMP 
+ NATURAL 
+ NORMALIZE 
+ NOT 
+ NULL 
+ ATTIVATO 
+ O 
+ ORDER 
+ OUTER 
+ PREPARE
+ RECURSIVE 
+ RIGHT 
+ ROLLUP 
+ SELECT 
+ TABLE 
+ THEN 
+ TRUE 
+ UESCAPE 
+ UNION 
+ UNNEST 
+ USING 
+ VALUES
+ WHEN 
+ WHERE 
+ WITH

## Identificatori di sistema
<a name="limits.system_identifier"></a>

 Riserviamo che i nomi delle colonne «measure\$1value», «ts\$1non\$1existent\$1col» e «time» siano Timestream per gli identificatori di sistema. LiveAnalytics Inoltre, i nomi delle colonne non possono iniziare con «ts\$1» o «measure\$1name». Gli identificatori di sistema distinguono tra maiuscole e minuscole. Identificatori confrontati utilizzando la rappresentazione binaria UTF-8. Ciò significa che il confronto per gli identificatori fa distinzione tra maiuscole e minuscole. 

**Nota**  
Gli identificatori di sistema non possono essere utilizzati per i nomi delle dimensioni o delle misure. Si consiglia di non utilizzare identificatori di sistema per i nomi di database o tabelle.

## UNLOAD
<a name="limits.export-unload"></a>

Per i limiti relativi al `UNLOAD` comando, consulta [Uso di UNLOAD per esportare i risultati delle query in S3 da Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/export-unload.html).

# Riferimento al linguaggio di interrogazione
<a name="reference"></a>

**Nota**  
Questo riferimento al linguaggio di interrogazione include la seguente documentazione di terze parti della [Trino Software Foundation](https://trino.io/foundation.html) (precedentemente Presto Software Foundation), che è concessa in licenza con la licenza Apache, versione 2.0. Non è possibile utilizzare questo file se non in conformità con questa licenza. Per ottenere una copia della licenza Apache, versione 2.0, visitate il sito web di [Apache](http://www.apache.org/licenses/LICENSE-2.0).

Timestream for LiveAnalytics supporta un linguaggio di interrogazione avanzato per lavorare con i dati. Di seguito puoi vedere i tipi di dati, gli operatori, le funzioni e i costrutti disponibili.

Puoi anche iniziare subito con il linguaggio di interrogazione di Timestream nella sezione. [Query di esempio](sample-queries.md)

**Topics**
+ [Tipi di dati supportati](supported-data-types.md)
+ [Funzionalità integrata per le serie temporali](timeseries-specific-constructs.md)
+ [Supporto per SQL](supported-sql-constructs.md)
+ [Operatori logici](logical-operators.md)
+ [Operatori di confronto](comparison-operators.md)
+ [Funzioni di confronto](comparison-functions.md)
+ [Espressioni condizionali](conditional-expressions.md)
+ [Funzioni di conversione](conversion-functions.md)
+ [Operatori matematici](mathematical-operators.md)
+ [Funzioni matematiche](mathematical-functions.md)
+ [Operatori di stringa](string-operators.md)
+ [Funzioni stringa](string-functions.md)
+ [Operatori di matrice](array-operators.md)
+ [Funzioni di array](array-functions.md)
+ [Funzioni bit per bit](bitwise-functions.md)
+ [Funzioni di espressioni regolari](regex-functions.md)
+ [Operatori data/ora](date-time-operators.md)
+ [Funzioni data/ora](date-time-functions.md)
+ [Funzioni di aggregazione](aggregate-functions.md)
+ [Funzioni finestra](window-functions.md)
+ [Query di esempio](sample-queries.md)

# Tipi di dati supportati
<a name="supported-data-types"></a>

Il linguaggio di interrogazione LiveAnalytics di Timestream for supporta i seguenti tipi di dati.

**Nota**  
I tipi di dati supportati per le scritture sono descritti in Tipi di [dati](https://docs.aws.amazon.com/timestream/latest/developerguide/writes.html#writes.data-types).


| Tipo di dati | Description | 
| --- | --- | 
|  `int`  |  Rappresenta un numero intero a 32 bit.  | 
|  `bigint`  |  Rappresenta un numero intero con segno a 64 bit.  | 
|  `boolean`  |  Uno dei due valori di verità della logica, `True` e`False`.  | 
|  `double`  |  Rappresenta un tipo di dati a precisione variabile a 64 bit. Implementa lo [standard IEEE 754](https://standards.ieee.org/standard/754-2019.html) per l'aritmetica binaria a virgola mobile.  Il linguaggio di interrogazione serve per leggere i dati. Esistono funzioni `Infinity` e valori `NaN` doppi che possono essere utilizzati nelle query. Ma non puoi scrivere quei valori su Timestream.   | 
|  `varchar`  |  Dati di caratteri a lunghezza variabile con una dimensione massima di 2 KB.  | 
|  `array[T,...]`  |  Contiene uno o più elementi di un tipo di dati specificato*T*, dove *T* possono essere presenti tutti i tipi di dati supportati in Timestream.  | 
|   `row(T,...)`   |  Contiene uno o più campi denominati del tipo di dati. *T* I campi possono essere di qualsiasi tipo di dati supportato da Timestream e sono accessibili con l'operatore di riferimento del campo a punti: <pre>.</pre>  | 
|  `date`  |  Rappresenta una data nel modulo`YYYY-MM-DD`. *YYYY* Dove sono rispettivamente l'anno, *MM* il mese e *DD* il giorno. L'intervallo supportato va da `1970-01-01` a`2262-04-11`.   *Esempio*:  <pre>1971-02-03</pre>  | 
|  `time`  |  Rappresenta l'ora del giorno in [UTC](https://en.wikipedia.org/wiki/Coordinated_Universal_Time). Il `time` tipo di dati è rappresentato nel modulo `HH.MM.SS.sssssssss.` Supporta la precisione in nanosecondi.   *Esempio*:  <pre>17:02:07.496000000</pre>  | 
|  `timestamp`  |  Rappresenta un'istanza temporale utilizzando l'ora di precisione in nanosecondi in UTC. `YYYY-MM-DD hh:mm:ss.sssssssss` La query supporta timestamp compresi tra. `1677-09-21 00:12:44.000000000` `2262-04-11 23:47:16.854775807`  | 
|  `interval`  |  Rappresenta un intervallo di tempo come stringa letterale`Xt`, composta da due parti, e. *X* *t*  *X*è un valore numerico maggiore o uguale a `0` ed *t* è un'unità di tempo come il secondo o l'ora. L'unità non è pluralizzata. L'unità di tempo *t* deve essere una delle seguenti stringhe letterali:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/supported-data-types.html)  *Esempi:*  <pre>17s</pre> <pre>12second</pre> <pre>21hour</pre> <pre>2d</pre>  | 
|  `timeseries[row(timestamp, T,...)]`  |  Rappresenta i valori di una misura registrata in un intervallo di tempo come `array` composta da `row` oggetti. Ciascuno `row` contiene uno `timestamp` o più valori di misura del tipo di dati*T*, dove *T* può essere uno qualsiasi di`bigint`, `boolean``double`, o`varchar`. Le righe sono ordinate in ordine crescente per. `timestamp` Il tipo di dati *della serie temporale* rappresenta i valori di una misura nel tempo.  | 
|  `unknown`  |  Rappresenta dati nulli.  | 

# Funzionalità integrata per le serie temporali
<a name="timeseries-specific-constructs"></a>

Timestream for LiveAnalytics offre funzionalità integrate di serie temporali che trattano i dati delle serie temporali come un concetto di prima classe.

La funzionalità integrata delle serie temporali può essere suddivisa in due categorie: visualizzazioni e funzioni.

Di seguito puoi leggere informazioni su ciascun costrutto.

**Topics**
+ [Visualizzazioni delle serie temporali](timeseries-specific-constructs.views.md)
+ [Funzioni delle serie temporali](timeseries-specific-constructs.functions.md)

# Visualizzazioni delle serie temporali
<a name="timeseries-specific-constructs.views"></a>

Timestream for LiveAnalytics supporta le seguenti funzioni per trasformare i dati nel tipo di dati: `timeseries`

**Topics**
+ [CREATE\$1TIME\$1SERIES](#timeseries-specific-constructs.views.CREATE_TIME_SERIES)
+ [UNNEST](#timeseries-specific-constructs.views.UNNEST)

## CREATE\$1TIME\$1SERIES
<a name="timeseries-specific-constructs.views.CREATE_TIME_SERIES"></a>

 **CREATE\$1TIME\$1SERIES** è una funzione di aggregazione che prende tutte le misurazioni non elaborate di una serie temporale (valori temporali e di misura) e restituisce un tipo di dati di serie temporali. La sintassi di questa funzione è la seguente: 

```
CREATE_TIME_SERIES(time, measure_value::<data_type>)
```

 where `<data_type>` è il tipo di dati del valore della misura e può essere uno tra bigint, boolean, double o varchar. Il secondo parametro non può essere nullo.

Considera l'utilizzo della CPU delle istanze EC2 memorizzate in una tabella denominata **metrics**, come illustrato di seguito:


| Orario | region | az | vpc | instance\$1id | measure\$1name | measure\$1value::double | 
| --- | --- | --- | --- | --- | --- | --- | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  Stati Uniti est-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef0  |  utilizzo della cpu\$1  |  35,0  | 
|  2019-12-04 19:00:01.000 000000  |  us-east-1  |  Stati Uniti est-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef0  |  utilizzo della cpu\$1  |  38.2  | 
|  2019-12-04 19:00:02,000 000000  |  us-east-1  |  Stati Uniti - est-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef0  |  utilizzo della cpu\$1  |  45,3  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  Stati Uniti est-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef1  |  cpu\$1utilization  |  54.1  | 
|  2019-12-04 19:00:01.000 000000  |  us-east-1  |  Stati Uniti est-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef1  |  cpu\$1utilization  |  42,5  | 
|  2019-12-04 19:00:02,000 000000  |  us-east-1  |  Stati Uniti - est-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef1  |  cpu\$1utilization  |  33.7  | 

Esecuzione della query:

```
SELECT region, az, vpc, instance_id, CREATE_TIME_SERIES(time, measure_value::double) as cpu_utilization FROM metrics
    WHERE measure_name=’cpu_utilization’
    GROUP BY region, az, vpc, instance_id
```

restituirà tutte le serie che hanno `cpu_utilization` come valore di misura. In questo caso, abbiamo due serie: 


| region | az | vpc | instance\$1id | cpu\$1utilization | 
| --- | --- | --- | --- | --- | 
|  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef0  |  [\$1ora: 2019-12-04 19:00:00.000 000000, valore\$1misura: :doppio: 35.0\$1, \$1ora: 2019-12-04 19:00:01.000 000000, valore\$1misura: :doppio: 38.2\$1, \$1ora: 2019-12-04 19:00:02.000 000000, valore\$1misura: :doppio: 45,3\$1]  | 
|  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef1  |  [\$1ora: 2019-12-04 19:00:00.000 000000, valore\$1misura: :doppio: 35.1\$1, \$1ora: 2019-12-04 19:00:01.000 000000, valore\$1misura: :doppio: 38,5\$1, \$1ora: 2019-12-04 19:00:02.000 000000, valore\$1misura: :doppio: 45,7\$1]  | 

## UNNEST
<a name="timeseries-specific-constructs.views.UNNEST"></a>

 `UNNEST`è una funzione di tabella `timeseries` che consente di trasformare i dati in un modello piatto. La sintassi è esposta di seguito: 

 `UNNEST``timeseries`trasforma a in due colonne, vale a dire `time` e`value`. Puoi anche usare alias con UNNEST come mostrato di seguito: 

```
UNNEST(timeseries) AS <alias_name> (time_alias, value_alias)
```

dove `<alias_name>` è l'alias per la tabella piatta, `time_alias` è l'alias per la `time` colonna ed `value_alias` è l'alias per la colonna. `value`

Ad esempio, considera lo scenario in cui alcune istanze EC2 del tuo parco istanze sono configurate per emettere metriche a intervalli di 5 secondi, altre emettono metriche a intervalli di 15 secondi e hai bisogno delle metriche medie per tutte le istanze con una granularità di 10 secondi nelle ultime 6 ore. **Per ottenere questi dati, trasformi le tue metriche nel modello di serie temporali utilizzando CREATE\$1TIME\$1SERIES.** È quindi possibile utilizzare **INTERPOLATE\$1LINEAR** per ottenere i valori mancanti con una granularità di 10 secondi. Successivamente, trasformi i dati in un modello piatto utilizzando **UNNEST**, quindi usi **AVG** per ottenere le metriche medie per tutte le istanze.

```
WITH interpolated_timeseries AS (
    SELECT region, az, vpc, instance_id,
        INTERPOLATE_LINEAR(
            CREATE_TIME_SERIES(time, measure_value::double),
                SEQUENCE(ago(6h), now(), 10s)) AS interpolated_cpu_utilization
    FROM timestreamdb.metrics 
    WHERE measure_name= ‘cpu_utilization’ AND time >= ago(6h)
    GROUP BY region, az, vpc, instance_id
)
SELECT region, az, vpc, instance_id, avg(t.cpu_util)
FROM interpolated_timeseries
CROSS JOIN UNNEST(interpolated_cpu_utilization) AS t (time, cpu_util)
GROUP BY region, az, vpc, instance_id
```

 **La query precedente dimostra l'uso di UNNEST con un alias.** **Di seguito è riportato un esempio della stessa query senza utilizzare un alias per UNNEST:** 

```
WITH interpolated_timeseries AS (
    SELECT region, az, vpc, instance_id,
        INTERPOLATE_LINEAR(
            CREATE_TIME_SERIES(time, measure_value::double),
                SEQUENCE(ago(6h), now(), 10s)) AS interpolated_cpu_utilization
    FROM timestreamdb.metrics 
    WHERE measure_name= ‘cpu_utilization’ AND time >= ago(6h)
    GROUP BY region, az, vpc, instance_id
)
SELECT region, az, vpc, instance_id, avg(value)
FROM interpolated_timeseries
CROSS JOIN UNNEST(interpolated_cpu_utilization)
GROUP BY region, az, vpc, instance_id
```

# Funzioni delle serie temporali
<a name="timeseries-specific-constructs.functions"></a>

Amazon Timestream LiveAnalytics for supporta funzioni di serie temporali, come derivati, integrali e correlazioni, oltre ad altre, per ricavare informazioni più approfondite dai dati delle serie temporali. Questa sezione fornisce informazioni sull'utilizzo di ciascuna di queste funzioni, oltre a query di esempio. Seleziona uno dei seguenti argomenti per saperne di più. 

**Topics**
+ [Funzioni di interpolazione](timeseries-specific-constructs.functions.interpolation.md)
+ [Funzioni derivate](timeseries-specific-constructs.functions.derivatives.md)
+ [Funzioni integrali](timeseries-specific-constructs.functions.integrals.md)
+ [Funzioni di correlazione](timeseries-specific-constructs.functions.correlation.md)
+ [Filtra e riduci le funzioni](timeseries-specific-constructs.functions.filter-reduce.md)

# Funzioni di interpolazione
<a name="timeseries-specific-constructs.functions.interpolation"></a>

Se nei dati delle serie temporali mancano valori per gli eventi in determinati momenti, puoi stimare i valori di tali eventi mancanti utilizzando l'interpolazione. Amazon Timestream supporta quattro varianti di interpolazione: interpolazione lineare, interpolazione spline cubica, interpolazione dell'ultima osservazione portata avanti (locf) e interpolazione costante. Questa sezione fornisce informazioni sull'utilizzo di Timestream per le funzioni di interpolazione, oltre a query di esempio. LiveAnalytics 



## Informazioni sull'utilizzo
<a name="w2aab7c59c13c13c11b7"></a>


| Funzione | Tipo di dati di output | Description | 
| --- | --- | --- | 
|  `interpolate_linear(timeseries, array[timestamp])`  |  serie temporali  |  [Compila i dati mancanti utilizzando l'interpolazione lineare.](https://wikipedia.org/wiki/Linear_interpolation)  | 
|  `interpolate_linear(timeseries, timestamp)`  |  virgola mobile a doppia precisione  |  [Compila i dati mancanti utilizzando l'interpolazione lineare.](https://wikipedia.org/wiki/Linear_interpolation)  | 
|  `interpolate_spline_cubic(timeseries, array[timestamp])`  |  serie temporali  |  Compila i dati mancanti utilizzando l'interpolazione spline [cubica](https://wikiversity.org/wiki/Cubic_Spline_Interpolation#:~:text=Cubic%20spline%20interpolation%20is%20a,Lagrange%20polynomial%20and%20Newton%20polynomial.).  | 
|  `interpolate_spline_cubic(timeseries, timestamp)`  |  virgola mobile a doppia precisione  |  [Compila i dati mancanti utilizzando l'interpolazione spline cubica.](https://wikiversity.org/wiki/Cubic_Spline_Interpolation#:~:text=Cubic%20spline%20interpolation%20is%20a,Lagrange%20polynomial%20and%20Newton%20polynomial.)  | 
|  `interpolate_locf(timeseries, array[timestamp])`  |  serie temporali  |  Compila i dati mancanti utilizzando l'ultimo valore campionato.  | 
|  `interpolate_locf(timeseries, timestamp)`  |  virgola mobile a doppia precisione  |  Compila i dati mancanti utilizzando l'ultimo valore campionato.  | 
|  `interpolate_fill(timeseries, array[timestamp], double)`  |  serie temporali  |  Compila i dati mancanti utilizzando un valore costante.  | 
|  `interpolate_fill(timeseries, timestamp, double)`  |  virgola mobile a doppia precisione  |  Compila i dati mancanti utilizzando un valore costante.  | 

## Esempi di query
<a name="w2aab7c59c13c13c11b9"></a>

**Example**  
Trova l'utilizzo medio della CPU registrato a intervalli di 30 secondi per uno specifico host EC2 nelle ultime 2 ore, inserendo i valori mancanti utilizzando l'interpolazione lineare:  

```
WITH binned_timeseries AS (
SELECT hostname, BIN(time, 30s) AS binned_timestamp, ROUND(AVG(measure_value::double), 2) AS avg_cpu_utilization
FROM "sampleDB".DevOps
WHERE measure_name = 'cpu_utilization'
    AND hostname = 'host-Hovjv'
    AND time > ago(2h)
GROUP BY hostname, BIN(time, 30s)
), interpolated_timeseries AS (
SELECT hostname,
    INTERPOLATE_LINEAR(
        CREATE_TIME_SERIES(binned_timestamp, avg_cpu_utilization),
            SEQUENCE(min(binned_timestamp), max(binned_timestamp), 15s)) AS interpolated_avg_cpu_utilization
FROM binned_timeseries
GROUP BY hostname
)
SELECT time, ROUND(value, 2) AS interpolated_cpu
FROM interpolated_timeseries
CROSS JOIN UNNEST(interpolated_avg_cpu_utilization)
```

**Example**  
Trova l'utilizzo medio della CPU eseguito a intervalli di 30 secondi per uno specifico host EC2 nelle ultime 2 ore, inserendo i valori mancanti utilizzando l'interpolazione basata sull'ultima osservazione riportata:  

```
WITH binned_timeseries AS (
SELECT hostname, BIN(time, 30s) AS binned_timestamp, ROUND(AVG(measure_value::double), 2) AS avg_cpu_utilization
FROM "sampleDB".DevOps
WHERE measure_name = 'cpu_utilization'
    AND hostname = 'host-Hovjv'
    AND time > ago(2h)
GROUP BY hostname, BIN(time, 30s)
), interpolated_timeseries AS (
SELECT hostname,
    INTERPOLATE_LOCF(
        CREATE_TIME_SERIES(binned_timestamp, avg_cpu_utilization),
            SEQUENCE(min(binned_timestamp), max(binned_timestamp), 15s)) AS interpolated_avg_cpu_utilization
FROM binned_timeseries
GROUP BY hostname
)
SELECT time, ROUND(value, 2) AS interpolated_cpu
FROM interpolated_timeseries
CROSS JOIN UNNEST(interpolated_avg_cpu_utilization)
```

# Funzioni derivate
<a name="timeseries-specific-constructs.functions.derivatives"></a>

I derivati vengono utilizzati per calcolare il tasso di variazione di una determinata metrica e possono essere utilizzati per rispondere in modo proattivo a un evento. Ad esempio, supponiamo di calcolare il derivato dell'utilizzo della CPU delle istanze EC2 negli ultimi 5 minuti e di notare un derivato positivo significativo. Questo può essere indicativo di una maggiore domanda per il tuo carico di lavoro, quindi potresti decidere di avviare più istanze EC2 per gestire meglio il tuo carico di lavoro. 

Amazon Timestream supporta due varianti di funzioni derivate. Questa sezione fornisce informazioni sull'utilizzo di Timestream per le funzioni LiveAnalytics derivate, oltre a query di esempio. 



## Informazioni sull'utilizzo
<a name="w2aab7c59c13c13c13b9"></a>


| Funzione | Tipo di dati di output | Description | 
| --- | --- | --- | 
|  `derivative_linear(timeseries, interval)`  |  serie temporali  |  Calcola la [derivata](https://wikipedia.org/wiki/Derivative) di ogni punto per il `timeseries` valore specificato. `interval`  | 
|  `non_negative_derivative_linear(timeseries, interval)`  |  serie temporali  |  Uguale a`derivative_linear(timeseries, interval)`, ma restituisce solo valori positivi.  | 

## Esempi di query
<a name="w2aab7c59c13c13c13c11"></a>

**Example**  
Calcola la velocità di variazione dell'utilizzo della CPU ogni 5 minuti nell'ultima ora:  

```
SELECT DERIVATIVE_LINEAR(CREATE_TIME_SERIES(time, measure_value::double), 5m) AS result 
FROM “sampleDB”.DevOps 
WHERE measure_name = 'cpu_utilization' 
AND hostname = 'host-Hovjv' and time > ago(1h) 
GROUP BY hostname, measure_name
```

**Example**  
Calcola il tasso di aumento degli errori generati da uno o più microservizi:  

```
WITH binned_view as (
    SELECT bin(time, 5m) as binned_timestamp, ROUND(AVG(measure_value::double), 2) as value            
    FROM “sampleDB”.DevOps  
    WHERE micro_service = 'jwt'  
    AND time > ago(1h) 
    AND measure_name = 'service_error'
    GROUP BY bin(time, 5m)
)
SELECT non_negative_derivative_linear(CREATE_TIME_SERIES(binned_timestamp, value), 1m) as rateOfErrorIncrease
FROM binned_view
```

# Funzioni integrali
<a name="timeseries-specific-constructs.functions.integrals"></a>

Puoi usare gli integrali per trovare l'area sotto la curva per unità di tempo per gli eventi delle serie temporali. Ad esempio, supponiamo di tenere traccia del volume di richieste ricevute dall'applicazione per unità di tempo. In questo scenario, puoi utilizzare la funzione integrale per determinare il volume totale di richieste servite per intervallo specificato in un periodo di tempo specifico.

Amazon Timestream supporta una variante di funzioni integrali. Questa sezione fornisce informazioni sull'utilizzo della funzione Timestream for LiveAnalytics Integral, oltre a query di esempio. 



## Informazioni sull'utilizzo
<a name="w2aab7c59c13c13c15b9"></a>


| Funzione | Tipo di dati di output | Description | 
| --- | --- | --- | 
|  `integral_trapezoidal(timeseries(double))` `integral_trapezoidal(timeseries(double), interval day to second)` `integral_trapezoidal(timeseries(bigint))` `integral_trapezoidal(timeseries(bigint), interval day to second)` `integral_trapezoidal(timeseries(integer), interval day to second)` `integral_trapezoidal(timeseries(integer))`  |  virgola mobile a doppia precisione  |  Approssima l'[integrale](https://wikipedia.org/wiki/Integral) secondo quanto specificato `interval day to second` per il modulo `timeseries` fornito, utilizzando la regola [trapezoidale](https://wikipedia.org/wiki/Trapezoidal_rule). Il parametro dell'intervallo dal giorno al secondo è facoltativo e l'impostazione predefinita è. `1s` Per ulteriori informazioni sugli intervalli, vedere. [Intervallo e durata](date-time-functions.md#date-time-functions-interval-duration)  | 

## Esempi di query
<a name="w2aab7c59c13c13c15c11"></a>

**Example**  
Calcola il volume totale di richieste servite ogni cinque minuti nell'ultima ora da un host specifico:  

```
SELECT INTEGRAL_TRAPEZOIDAL(CREATE_TIME_SERIES(time, measure_value::double), 5m) AS result FROM sample.DevOps 
WHERE measure_name = 'request' 
AND hostname = 'host-Hovjv' 
AND time > ago (1h) 
GROUP BY hostname, measure_name
```

# Funzioni di correlazione
<a name="timeseries-specific-constructs.functions.correlation"></a>

Considerate due serie temporali di lunghezza simile, le funzioni di correlazione forniscono un coefficiente di correlazione, che spiega l'andamento delle due serie temporali nel tempo. Il coefficiente di correlazione varia da a. `-1.0` `1.0` `-1.0`indica che le due serie temporali hanno una tendenza in direzioni opposte alla stessa velocità, mentre `1.0` indica che le due serie temporali tendono nella stessa direzione alla stessa velocità. Un valore di `0` indica l'assenza di correlazione tra le due serie temporali. Ad esempio, se il prezzo del petrolio aumenta e il prezzo delle azioni di una compagnia petrolifera aumenta, la tendenza all'aumento del prezzo del petrolio e all'aumento del prezzo della compagnia petrolifera avrà un coefficiente di correlazione positivo. Un coefficiente di correlazione positivo elevato indicherebbe che i due prezzi hanno un andamento simile. Analogamente, il coefficiente di correlazione tra i prezzi delle obbligazioni e i rendimenti obbligazionari è negativo, il che indica che questi due valori tendono nella direzione opposta nel tempo.

Amazon Timestream supporta due varianti di funzioni di correlazione. Questa sezione fornisce informazioni sull'utilizzo di Timestream per le funzioni di LiveAnalytics correlazione, oltre a query di esempio. 



## Informazioni sull'utilizzo
<a name="w2aab7c59c13c13c19c11"></a>


| Funzione | Tipo di dati di output | Description | 
| --- | --- | --- | 
|  `correlate_pearson(timeseries, timeseries)`  |  virgola mobile a doppia precisione  |  Calcola il [coefficiente di correlazione di Pearson](https://wikipedia.org/wiki/Pearson_correlation_coefficient) per i due. `timeseries` Le serie temporali devono avere gli stessi timestamp.  | 
|  `correlate_spearman(timeseries, timeseries)`  |  virgola mobile a doppia precisione  |  Calcola il coefficiente di [correlazione di Spearman](https://en.wikipedia.org/wiki/Spearman%27s_rank_correlation_coefficient) per i due. `timeseries` Le serie temporali devono avere gli stessi timestamp.  | 

## Esempi di query
<a name="w2aab7c59c13c13c19c13"></a>

**Example**  

```
WITH cte_1 AS (
    SELECT INTERPOLATE_LINEAR(
        CREATE_TIME_SERIES(time, measure_value::double), 
        SEQUENCE(min(time), max(time), 10m)) AS result 
    FROM sample.DevOps 
    WHERE measure_name = 'cpu_utilization' 
    AND hostname = 'host-Hovjv' AND time > ago(1h) 
    GROUP BY hostname, measure_name
), 
cte_2 AS (
    SELECT INTERPOLATE_LINEAR(
        CREATE_TIME_SERIES(time, measure_value::double), 
        SEQUENCE(min(time), max(time), 10m)) AS result 
    FROM sample.DevOps 
    WHERE measure_name = 'cpu_utilization' 
    AND hostname = 'host-Hovjv' AND time > ago(1h) 
    GROUP BY hostname, measure_name
) 
SELECT correlate_pearson(cte_1.result, cte_2.result) AS result 
FROM cte_1, cte_2
```

# Filtra e riduci le funzioni
<a name="timeseries-specific-constructs.functions.filter-reduce"></a>

Amazon Timestream supporta funzioni per l'esecuzione di filtri e la riduzione delle operazioni sui dati delle serie temporali. Questa sezione fornisce informazioni sull'utilizzo di Timestream per le funzioni di LiveAnalytics filtro e riduzione, oltre a query di esempio. 



## Informazioni sull'utilizzo
<a name="w2aab7c59c13c13c23b7"></a>


| Funzione | Tipo di dati di output | Description | 
| --- | --- | --- | 
|  `filter(timeseries(T), function(T, Boolean))`  |  serie temporali (T)  |  Costruisce una serie temporale da una serie temporale di input, utilizzando i valori per i quali il passato restituisce. `function` `true`  | 
|  `reduce(timeseries(T), initialState S, inputFunction(S, T, S), outputFunction(S, R))`  |  R  |  Restituisce un singolo valore, ridotto dalla serie temporale. `inputFunction`Verrà invocato su ogni elemento delle serie temporali in ordine. Oltre a prendere l'elemento corrente, InputFunction prende lo stato corrente (inizialmente`initialState`) e restituisce il nuovo stato. `outputFunction`Verrà invocato per trasformare lo stato finale nel valore del risultato. `outputFunction`Può essere una funzione di identità.  | 

## Esempi di query
<a name="w2aab7c59c13c13c23b9"></a>

**Example**  
Costruisci una serie temporale di utilizzo della CPU di un host e filtra i punti con misurazioni superiori a 70:  

```
WITH time_series_view AS (
    SELECT INTERPOLATE_LINEAR(
        CREATE_TIME_SERIES(time, ROUND(measure_value::double,2)), 
            SEQUENCE(ago(15m), ago(1m), 10s)) AS cpu_user
    FROM sample.DevOps
    WHERE hostname = 'host-Hovjv' and measure_name = 'cpu_utilization'
        AND time > ago(30m)
    GROUP BY hostname
)
SELECT FILTER(cpu_user, x -> x.value > 70.0) AS cpu_above_threshold
from time_series_view
```

**Example**  
Costruisci una serie temporale dell'utilizzo della CPU di un host e determina la somma al quadrato delle misurazioni:  

```
WITH time_series_view AS (
    SELECT INTERPOLATE_LINEAR(
        CREATE_TIME_SERIES(time, ROUND(measure_value::double,2)), 
            SEQUENCE(ago(15m), ago(1m), 10s)) AS cpu_user
    FROM sample.DevOps
    WHERE hostname = 'host-Hovjv' and measure_name = 'cpu_utilization'
        AND time > ago(30m)
    GROUP BY hostname
)
SELECT REDUCE(cpu_user,
    DOUBLE '0.0',
    (s, x) -> x.value * x.value + s,
    s -> s)
from time_series_view
```

**Example**  
Costruisci una serie temporale di utilizzo della CPU di un host e determina la frazione di campioni che supera la soglia della CPU:  

```
WITH time_series_view AS (
    SELECT INTERPOLATE_LINEAR(
        CREATE_TIME_SERIES(time, ROUND(measure_value::double,2)), 
            SEQUENCE(ago(15m), ago(1m), 10s)) AS cpu_user
    FROM sample.DevOps
    WHERE hostname = 'host-Hovjv' and measure_name = 'cpu_utilization'
        AND time > ago(30m)
    GROUP BY hostname
)
SELECT ROUND(
    REDUCE(cpu_user, 
      -- initial state 
      CAST(ROW(0, 0) AS ROW(count_high BIGINT, count_total BIGINT)),
      -- function to count the total points and points above a certain threshold
      (s, x) -> CAST(ROW(s.count_high + IF(x.value > 70.0, 1, 0), s.count_total + 1) AS ROW(count_high BIGINT, count_total BIGINT)),
      -- output function converting the counts to fraction above threshold
      s -> IF(s.count_total = 0, NULL, CAST(s.count_high AS DOUBLE) / s.count_total)), 
    4) AS fraction_cpu_above_threshold
from time_series_view
```

# Supporto per SQL
<a name="supported-sql-constructs"></a>

Timestream for LiveAnalytics supporta alcuni costrutti SQL comuni. Puoi leggere di più qui sotto.

**Topics**
+ [SELECT](supported-sql-constructs.SELECT.md)
+ [supporto per le subquery](supported-sql-constructs.subquery-support.md)
+ [Dichiarazioni SHOW](supported-sql-constructs.SHOW.md)
+ [DESCRIVI le dichiarazioni](supported-sql-constructs.DESCRIBE.md)
+ [UNLOAD](supported-sql-constructs.UNLOAD.md)

# SELECT
<a name="supported-sql-constructs.SELECT"></a>

Le istruzioni **SELECT** possono essere utilizzate per recuperare dati da una o più tabelle. **Il linguaggio di interrogazione di Timestream supporta la seguente sintassi per le istruzioni SELECT:**

```
[ WITH with_query [, ...] ]
            SELECT [ ALL | DISTINCT ] select_expr [, ...]
            [ function (expression) OVER (
            [ PARTITION BY partition_expr_list ]
            [ ORDER BY order_list ]
            [ frame_clause ] )
            [ FROM from_item [, ...] ]
            [ WHERE condition ]
            [ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ]
            [ HAVING condition]
            [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
            [ ORDER BY order_list ]
            [ LIMIT [ count | ALL ] ]
```

dove 
+ `function (expression)`[è una delle funzioni di finestra supportate.](window-functions.md)
+ `partition_expr_list`è:

  ```
  expression | column_name [, expr_list ]
  ```
+ `order_list`è:

  ```
  expression | column_name [ ASC | DESC ] 
  [ NULLS FIRST | NULLS LAST ]
  [, order_list ]
  ```
+ `frame_clause`è:

  ```
  ROWS | RANGE
  { UNBOUNDED PRECEDING | expression PRECEDING | CURRENT ROW } |
  {BETWEEN
  { UNBOUNDED PRECEDING | expression { PRECEDING | FOLLOWING } |
  CURRENT ROW}
  AND
  { UNBOUNDED FOLLOWING | expression { PRECEDING | FOLLOWING } |
  CURRENT ROW }}
  ```
+ `from_item`è uno dei:

  ```
  table_name [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
  from_item join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]
  ```
+ `join_type`è uno dei seguenti:

  ```
  [ INNER ] JOIN
  LEFT [ OUTER ] JOIN
  RIGHT [ OUTER ] JOIN
  FULL [ OUTER ] JOIN
  ```
+ `grouping_element`è uno dei seguenti:

  ```
  ()
  expression
  ```

# supporto per le subquery
<a name="supported-sql-constructs.subquery-support"></a>

 Timestream supporta sottoquery e predicati. `EXISTS` `IN` Il `EXISTS` predicato determina se una sottoquery restituisce delle righe. Il `IN` predicato determina se i valori prodotti dalla sottoquery corrispondono ai valori o all'espressione della clausola IN. Il linguaggio di interrogazione Timestream supporta le sottoquery correlate e di altro tipo. 

```
SELECT t.c1
FROM (VALUES 1, 2, 3, 4, 5) AS t(c1)
WHERE EXISTS
(SELECT t.c2
 FROM (VALUES 1, 2, 3) AS t(c2)
 WHERE t.c1= t.c2
)
ORDER BY t.c1
```


| c1 | 
| --- | 
|  1  | 
|  2  | 
|  3  | 

```
SELECT t.c1
FROM (VALUES 1, 2, 3, 4, 5) AS t(c1)
WHERE t.c1 IN
(SELECT t.c2
 FROM (VALUES 2, 3, 4) AS t(c2)
)
ORDER BY t.c1
```


| c1 | 
| --- | 
|  2  | 
|  3  | 
|  4  | 

# Dichiarazioni SHOW
<a name="supported-sql-constructs.SHOW"></a>

È possibile visualizzare tutti i database di un account utilizzando l'`SHOW DATABASES`estratto conto. La sintassi è esposta di seguito:

```
SHOW DATABASES [LIKE pattern]
```

dove la `LIKE` clausola può essere utilizzata per filtrare i nomi dei database.

È possibile visualizzare tutte le tabelle di un account utilizzando l'`SHOW TABLES`estratto conto. La sintassi è esposta di seguito:

```
SHOW TABLES [FROM database] [LIKE pattern]
```

dove la `FROM` clausola può essere utilizzata per filtrare i nomi dei database e la `LIKE` clausola può essere utilizzata per filtrare i nomi delle tabelle.

È possibile visualizzare tutte le misure di una tabella utilizzando l'`SHOW MEASURES`istruzione. La sintassi è esposta di seguito:

```
SHOW MEASURES FROM database.table [LIKE pattern]
```

dove la `FROM` clausola verrà utilizzata per specificare il nome del database e della tabella e la `LIKE` clausola può essere utilizzata per filtrare i nomi delle misure.

# DESCRIVI le dichiarazioni
<a name="supported-sql-constructs.DESCRIBE"></a>

È possibile visualizzare i metadati di una tabella utilizzando l'`DESCRIBE`istruzione. La sintassi è esposta di seguito:

```
DESCRIBE database.table
```

dove `table` contiene il nome della tabella. L'istruzione describe restituisce i nomi delle colonne e i tipi di dati per la tabella.

# UNLOAD
<a name="supported-sql-constructs.UNLOAD"></a>

Timestream for LiveAnalytics supporta un `UNLOAD` comando come estensione del relativo supporto SQL. I tipi di dati supportati da `UNLOAD` sono descritti in. [Tipi di dati supportati](supported-data-types.md) I `unknown` tipi `time` e non si applicano a`UNLOAD`.

```
UNLOAD (SELECT statement)
 TO 's3://bucket-name/folder'
 WITH ( option = expression [, ...] )
```

dove si trova l'opzione

```
{ partitioned_by = ARRAY[ col_name[,…] ] 
 | format = [ '{ CSV | PARQUET }' ] 
 | compression = [ '{ GZIP | NONE }' ]
 | encryption = [ '{ SSE_KMS | SSE_S3 }' ]
 | kms_key = '<string>'
 | field_delimiter ='<character>'
 | escaped_by = '<character>'
 | include_header = ['{true, false}']
 | max_file_size = '<value>'
}
```

Istruzione SELECT  
L'istruzione di query utilizzata per selezionare e recuperare i dati da uno o più Timestream per le tabelle. LiveAnalytics   

```
(SELECT column 1, column 2, column 3 from database.table
      where measure_name = "ABC" and timestamp between ago (1d) and now() )
```

Clausola TO  

```
TO 's3://bucket-name/folder'
```
or  

```
TO 's3://access-point-alias/folder'
```
La `TO` clausola dell'`UNLOAD`istruzione specifica la destinazione per l'output dei risultati della query. È necessario fornire il percorso completo, incluso il nome del bucket Amazon S3 o Amazon S3 con access-point-alias posizione della cartella su Amazon S3 dove Timestream for scrive gli oggetti del file di output. LiveAnalytics Il bucket S3 deve appartenere allo stesso account e nella stessa regione. Oltre al set di risultati della query, Timestream for LiveAnalytics scrive i file manifest e di metadati nella cartella di destinazione specificata. 

Clausola PARTITIONED\$1BY  

```
partitioned_by = ARRAY [col_name[,…] , (default: none)
```
La `partitioned_by` clausola viene utilizzata nelle query per raggruppare e analizzare i dati a livello granulare. Quando esporti i risultati della query nel bucket S3, puoi scegliere di partizionare i dati in base a una o più colonne nella query di selezione. Durante il partizionamento dei dati, i dati esportati vengono suddivisi in sottoinsiemi in base alla colonna della partizione e ogni sottoinsieme viene archiviato in una cartella separata. All'interno della cartella dei risultati che contiene i dati esportati, viene creata automaticamente una sottocartella. `folder/results/partition column = partition value/` Tuttavia, tieni presente che le colonne partizionate non sono incluse nel file di output.   
`partitioned_by`non è una clausola obbligatoria nella sintassi. Se si sceglie di esportare i dati senza alcun partizionamento, è possibile escludere la clausola nella sintassi.   

**Example**  
Supponendo che tu stia monitorando i dati clickstream del tuo sito Web e che tu abbia 5 canali di traffico, vale a dire,, e. `direct` `Social Media` `Organic Search` `Other` `Referral` Quando si esportano i dati, è possibile scegliere di partizionarli utilizzando la colonna. `Channel` All'interno della tua cartella dati`s3://bucketname/results`, avrai cinque cartelle ciascuna con il rispettivo nome del canale, ad esempio, `s3://bucketname/results/channel=Social Media/.` all'interno di questa cartella troverai i dati di tutti i clienti che sono arrivati sul tuo sito web attraverso il `Social Media` canale. Allo stesso modo, avrai altre cartelle per i canali rimanenti.
Dati esportati partizionati per colonna Channel  

![\[Folder structure showing channels: Direct, Organic search, Other, Referral, and Social media.\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/images/unload-results.png)


FORMAT  

```
format = [ '{ CSV | PARQUET }' , default: CSV
```
Le parole chiave per specificare il formato dei risultati della query scritti nel bucket S3. È possibile esportare i dati come valore separato da virgole (CSV) utilizzando una virgola (,) come delimitatore predefinito o nel formato Apache Parquet, un efficiente formato di archiviazione a colonne aperto per l'analisi. 

COMPRESSIONE  

```
compression = [ '{ GZIP | NONE }' ], default: GZIP
```
È possibile comprimere i dati esportati utilizzando l'algoritmo di compressione GZIP o decomprimerli specificando l'opzione. `NONE`

ENCRYPTION  

```
encryption = [ '{ SSE_KMS | SSE_S3 }' ], default: SSE_S3
```
I file di output su Amazon S3 vengono crittografati utilizzando l'opzione di crittografia selezionata. Oltre ai dati, anche i file manifest e i file di metadati vengono crittografati in base all'opzione di crittografia selezionata. Attualmente supportiamo la crittografia SSE\$1S3 e SSE\$1KMS. SSE\$1S3 è una crittografia lato server con Amazon S3 che crittografa i dati utilizzando la crittografia AES (Advanced Encryption Standard) a 256 bit. SSE\$1KMS è una crittografia lato server per crittografare i dati utilizzando chiavi gestite dal cliente.

KMS\$1KEY  

```
kms_key = '<string>'
```
KMS Key è una chiave definita dal cliente per crittografare i risultati delle query esportate. KMS Key è gestita in modo sicuro da AWS Key Management Service (AWS KMS) e utilizzata per crittografare i file di dati su Amazon S3.

FIELD\$1DELIMITER  

```
field_delimiter ='<character>' , default: (,)
```
Quando si esportano i dati in formato CSV, questo campo specifica un singolo carattere ASCII utilizzato per separare i campi nel file di output, ad esempio il carattere pipe (\$1), la virgola (,) o il tab (/t). Il delimitatore predefinito per i file CSV è una virgola. Se un valore nei dati contiene il delimitatore scelto, il delimitatore verrà citato tra virgolette. Ad esempio, se il valore dei dati contiene`Time,stream`, questo valore verrà citato come nei dati esportati. `"Time,stream"` Il carattere di virgoletta usato da Timestream per sono le LiveAnalytics virgolette doppie («).  
Evita di specificare il carattere di ritorno al carrello (ASCII 13`0D`, hex, text '\$1 r') o il carattere di interruzione di riga (ASCII 10, hex 0A, text'\$1n') come `FIELD_DELIMITER` se desideri includere le intestazioni nel CSV, poiché ciò impedirà a molti parser di analizzare correttamente le intestazioni nell'output CSV risultante.

ESCAPED\$1BY  

```
escaped_by = '<character>', default: (\)
```
Quando si esportano i dati in formato CSV, questo campo specifica il carattere che deve essere trattato come carattere di escape nel file di dati scritto nel bucket S3. L'escape avviene nei seguenti scenari:  

1. Se il valore stesso contiene il carattere di virgoletta («), verrà eliminato utilizzando un carattere di escape. Ad esempio, se il valore è`Time"stream`, dove (\$1) è il carattere di escape configurato, allora verrà escluso come. `Time\"stream` 

1. Se il valore contiene il carattere di escape configurato, verrà eliminato. Ad esempio, se il valore è`Time\stream`, allora verrà scappato come. `Time\\stream` 
Se l'output esportato contiene tipi di dati complessi come Arrays, Rows o Timeseries, verrà serializzato come stringa JSON. Di seguito è riportato un esempio.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/supported-sql-constructs.UNLOAD.html)

INCLUDE\$1HEADER  

```
include_header = 'true' , default: 'false'
```
Quando si esportano i dati in formato CSV, questo campo consente di includere i nomi delle colonne come prima riga dei file di dati CSV esportati.  
I valori accettati sono «true» e «false» e il valore predefinito è «false». Le opzioni di trasformazione del testo come `escaped_by` e `field_delimiter` si applicano anche alle intestazioni.  
Quando si includono le intestazioni, è importante non selezionare un carattere di ritorno (ASCII 13, hex 0D, testo '\$1 r') o un carattere di interruzione di riga (ASCII 10, hex 0A, text'\$1n') come carattere`FIELD_DELIMITER`, poiché ciò impedirà a molti parser di analizzare correttamente le intestazioni nell'output CSV risultante.

MAX\$1FILE\$1SIZE  

```
max_file_size = 'X[MB|GB]' , default: '78GB'
```
Questo campo specifica la dimensione massima dei file che l'`UNLOAD`istruzione crea in Amazon S3. L'`UNLOAD`istruzione può creare più file, ma la dimensione massima di ogni file scritto in Amazon S3 sarà approssimativamente quella specificata in questo campo.  
Il valore del campo deve essere compreso tra 16 MB e 78 GB, inclusi. È possibile specificarlo in numeri interi come `12GB` o in decimali come o. `0.5GB` `24.7MB` Il valore predefinito è 78 GB.  
La dimensione effettiva del file è approssimativa al momento della scrittura del file, pertanto la dimensione massima effettiva potrebbe non essere esattamente uguale al numero specificato.

# Operatori logici
<a name="logical-operators"></a>

Timestream for LiveAnalytics supporta i seguenti operatori logici.


| Operatore | Description | Esempio | 
| --- | --- | --- | 
|  AND  |  Vero se entrambi i valori sono veri  |  a E b  | 
|  O  |  Vero se uno dei due valori è vero  |  a OPPURE b  | 
|  NOT  |  Vero se il valore è falso  |  NON un  | 
+ Il risultato di un `AND` confronto può essere `NULL` se uno o entrambi i lati dell'espressione lo sono`NULL`. 
+ Se almeno un lato di un `AND` operatore è, `FALSE` l'espressione restituisce. `FALSE` 
+ Il risultato di un `OR` confronto può essere `NULL` se uno o entrambi i lati dell'espressione lo sono`NULL`. 
+ Se almeno un lato di un `OR` operatore è, `TRUE` l'espressione restituisce. `TRUE` 
+ Il complemento logico di `NULL` is`NULL`. 

La seguente tabella di verità mostra la gestione di `NULL` in `AND` e`OR`:


| A | B | A e b | A o b | 
| --- | --- | --- | --- | 
|  null  |  null  |  null  |  null  | 
|  false   |  null  |  false  |  null  | 
|  null  |  false  |  false  |  null  | 
|  true  |  null  |  null  |  true  | 
|  null  |  true  |  null  |  true  | 
|  false  |  false  |  false  |  false  | 
|  true  |  false  |  false  |  true  | 
|  false  |  true  |  false  |  true  | 
|  true  |  true  |  true  |  true  | 

La seguente tabella di verità mostra la gestione di NULL in NOT:


| A | Non un | 
| --- | --- | 
|  null  |  null  | 
|  true  |  false  | 
|  false  |  true  | 

# Operatori di confronto
<a name="comparison-operators"></a>

Timestream for LiveAnalytics supporta i seguenti operatori di confronto.


| Operatore | Description | 
| --- | --- | 
|  <  |  Minore di  | 
|  >  |  Maggiore di  | 
|  <=  |  Minore o uguale a  | 
|  >=  |  Maggiore o uguale a  | 
|  =  |  Uguale  | 
|  <>  |  Non uguale  | 
|  \$1=  |  Non uguale  | 

**Nota**  
L'`BETWEEN`operatore verifica se un valore rientra in un intervallo specificato. La sintassi è esposta di seguito:  

  ```
  BETWEEN min AND max
  ```
La presenza di `NULL` in un'`NOT BETWEEN`istruzione `BETWEEN` or comporterà la valutazione di`NULL`.
`IS NULL `e `IS NOT NULL` gli operatori verificano se un valore è nullo (non definito). L'utilizzo di `NULL` with `IS NULL` restituisce vero.
In SQL, un `NULL` valore indica un valore sconosciuto.

# Funzioni di confronto
<a name="comparison-functions"></a>

Timestream for LiveAnalytics supporta le seguenti funzioni di confronto.

**Topics**
+ [più grande ()](comparison-functions.greatest.md)
+ [almeno ()](comparison-functions.least.md)
+ [ALL (), ANY () e SOME ()](comparison-functions.all-any-some.md)

# più grande ()
<a name="comparison-functions.greatest"></a>

La funzione **greatest ()** restituisce il più grande dei valori forniti. Restituisce `NULL` se uno qualsiasi dei valori forniti lo è`NULL`. La sintassi è esposta di seguito.

```
greatest(value1, value2, ..., valueN) 
```

# almeno ()
<a name="comparison-functions.least"></a>

La funzione **least ()** restituisce il più piccolo dei valori forniti. Restituisce `NULL` se uno qualsiasi dei valori forniti lo è`NULL`. La sintassi è esposta di seguito.

```
least(value1, value2, ..., valueN) 
```

# ALL (), ANY () e SOME ()
<a name="comparison-functions.all-any-some"></a>

I `SOME` quantificatori`ALL`, `ANY` e possono essere utilizzati insieme agli operatori di confronto nel modo seguente.


| Expression | Significato | 
| --- | --- | 
|  A = TUTTI (...)  |  Restituisce vero quando A è uguale a tutti i valori.  | 
|  A <> ALL (...)  |  Restituisce vero quando A non corrisponde a nessun valore.  | 
|  A < TUTTI (...)  |  Restituisce vero quando A è inferiore al valore più piccolo.  | 
|  A = QUALSIASI (...)  |  Restituisce vero quando A è uguale a uno qualsiasi dei valori.   | 
|  A <> QUALSIASI (...)  |  Restituisce vero quando A non corrisponde a uno o più valori.  | 
|  A < QUALSIASI (...)  |  Restituisce vero quando A è inferiore al valore più grande.  | 

## Esempi e note di utilizzo
<a name="comparison-functions.all-any-some.examples-usage"></a>

**Nota**  
Quando si utilizza `ANY` o `ALL``SOME`, la parola chiave `VALUES` deve essere utilizzata se i valori di confronto sono un elenco di valori letterali. 

## Ad esempio: `ANY()`
<a name="w2aab7c59c21c11c11"></a>

Di seguito è riportato un esempio di istruzione `ANY()` in una query.

```
SELECT 11.7 = ANY (VALUES 12.0, 13.5, 11.7)
```

Di seguito è riportata una sintassi alternativa per la stessa operazione.

```
SELECT 11.7 = ANY (SELECT 12.0 UNION ALL SELECT 13.5 UNION ALL SELECT 11.7)
```

In questo caso, `ANY()` restituisce. `True`

## Ad esempio: `ALL()`
<a name="w2aab7c59c21c11c13"></a>

Di seguito è riportato un esempio di istruzione `ALL()` in una query.

```
SELECT 17 < ALL (VALUES 19, 20, 15);
```

Di seguito è riportata una sintassi alternativa per la stessa operazione.

```
SELECT 17 < ALL (SELECT 19 UNION ALL SELECT 20 UNION ALL SELECT 15);
```

In questo caso, `ALL()` restituisce. `False`

## Ad esempio: `SOME()`
<a name="w2aab7c59c21c11c15"></a>

Di seguito è riportato un esempio di istruzione `SOME()` in una query.

```
SELECT 50 >= SOME (VALUES 53, 77, 27);
```

Di seguito è riportata una sintassi alternativa per la stessa operazione.

```
SELECT 50 >= SOME (SELECT 53 UNION ALL SELECT 77 UNION ALL SELECT 27);
```

In questo caso, `SOME()` restituisce. `True`

# Espressioni condizionali
<a name="conditional-expressions"></a>

Timestream for LiveAnalytics supporta le seguenti espressioni condizionali.

**Topics**
+ [L'istruzione CASE](conditional-expressions.CASE.md)
+ [L'istruzione IF](conditional-expressions.IF.md)
+ [La dichiarazione COALESCE](conditional-expressions.COALESCE.md)
+ [L'istruzione NULLIF](conditional-expressions.NULLIF.md)
+ [L'istruzione TRY](conditional-expressions.TRY.md)

# L'istruzione CASE
<a name="conditional-expressions.CASE"></a>

L'istruzione **CASE** cerca ogni espressione di valore da sinistra a destra finché non ne trova una uguale`expression`. Se trova una corrispondenza, viene restituito il risultato per il valore corrispondente. Se non viene trovata alcuna corrispondenza, viene restituito il risultato della `ELSE` clausola se esiste; in caso contrario `null` viene restituito. La sintassi è esposta di seguito:

```
CASE expression
    WHEN value THEN result
    [ WHEN ... ]
    [ ELSE result ]
END
```

 **Timestream supporta anche la seguente sintassi per le istruzioni CASE.** In questa sintassi, il modulo «cercato» valuta ogni condizione booleana da sinistra a destra finché non ne è presente una e restituisce il risultato corrispondente. `true` Se non ci sono condizioni`true`, viene restituito il risultato della `ELSE` clausola se esiste; in caso contrario viene restituito. `null` Vedi sotto per la sintassi alternativa: 

```
CASE
    WHEN condition THEN result
    [ WHEN ... ]
    [ ELSE result ]
END
```

# L'istruzione IF
<a name="conditional-expressions.IF"></a>

L'istruzione **IF** valuta una condizione come vera o falsa e restituisce il valore appropriato. **Timestream supporta le seguenti due rappresentazioni sintattiche per IF:**

```
if(condition, true_value)
```

Questa sintassi valuta e restituisce `true_value` se la condizione è`true`; altrimenti viene restituita e non viene `null` valutata. `true_value`

```
if(condition, true_value, false_value)
```

Questa sintassi valuta e restituisce `true_value` se la condizione è`true`, altrimenti valuta e restituisce. `false_value`

## Esempi
<a name="conditional-expressions.IF.examples"></a>

```
SELECT
  if(true, 'example 1'),
  if(false, 'example 2'),
  if(true, 'example 3 true', 'example 3 false'),
  if(false, 'example 4 true', 'example 4 false')
```


| \$1col0 | \$1col1 | \$1col2 | \$1col3 | 
| --- | --- | --- | --- | 
|  `example 1`  |  `-` `null`  |  `example 3 true`  |  `example 4 false`  | 

# La dichiarazione COALESCE
<a name="conditional-expressions.COALESCE"></a>

 **COALESCE** restituisce il primo valore non nullo in un elenco di argomenti. La sintassi è esposta di seguito:

```
coalesce(value1, value2[,...])
```

# L'istruzione NULLIF
<a name="conditional-expressions.NULLIF"></a>

L'istruzione **IF** valuta una condizione come vera o falsa e restituisce il valore appropriato. **Timestream supporta le seguenti due rappresentazioni sintattiche per IF:**

**NULLIF restituisce null se** è uguale; altrimenti restituisce. `value1` `value2` `value1` La sintassi è esposta di seguito:

```
nullif(value1, value2)
```

# L'istruzione TRY
<a name="conditional-expressions.TRY"></a>

La funzione **TRY** valuta un'espressione e gestisce determinati tipi di errori `null` restituendoli. La sintassi è esposta di seguito:

```
try(expression)
```

# Funzioni di conversione
<a name="conversion-functions"></a>

Timestream for LiveAnalytics supporta le seguenti funzioni di conversione.

**Topics**
+ [cast()](#conversion-functions.cast)
+ [try\$1cast ()](#conversion-functions.try-cast)

## cast()
<a name="conversion-functions.cast"></a>

 La sintassi della funzione cast per trasmettere esplicitamente un valore come tipo è la seguente.

```
cast(value AS type)
```

## try\$1cast ()
<a name="conversion-functions.try-cast"></a>

Timestream for supporta LiveAnalytics anche la funzione try\$1cast che è simile a cast ma restituisce null se il cast fallisce. La sintassi è esposta di seguito.

```
try_cast(value AS type)
```

# Operatori matematici
<a name="mathematical-operators"></a>

Timestream for supporta i seguenti operatori matematici. LiveAnalytics 


| Operatore | Description | 
| --- | --- | 
|  \$1  |  Addizione  | 
|  -  |  Sottrazione  | 
|  \$1  |  Moltiplicazione  | 
|  /  |  Divisione (la divisione di numeri interi esegue il troncamento)  | 
|  %  |  Modulo (resto)  | 

# Funzioni matematiche
<a name="mathematical-functions"></a>

Timestream for LiveAnalytics supporta le seguenti funzioni matematiche.


| Funzione | Tipo di dati di output | Description | 
| --- | --- | --- | 
|  abs (x)  |  [uguale all'input]  |  Restituisce il valore assoluto di x.  | 
|  cbrt (x)  |  virgola mobile a doppia precisione  |  Restituisce la radice cubica di x.  | 
|  soffitto (x) o soffitto (x)  |  [uguale all'input]  |  Restituisce x arrotondato al numero intero più vicino.  | 
|  gradi (x)  |  virgola mobile a doppia precisione  |  Converte l'angolo x in radianti in gradi.  | 
|  e ()  |  virgola mobile a doppia precisione  |  Restituisce il numero costante di Eulero.  | 
|  exp (x)  |  virgola mobile a doppia precisione  |  Restituisce il numero di Eulero elevato alla potenza di x.  | 
|  pavimento (x)  |  [uguale all'input]  |  Restituisce x arrotondato per difetto al numero intero più vicino.  | 
|  from\$1base (stringa, radice)  |  bigint  |  Restituisce il valore di una stringa interpretata come un numero di radice di base.  | 
|  ln (x)  |  virgola mobile a doppia precisione  |  Restituisce il logaritmo naturale di x.  | 
|  log2 (x)  |  virgola mobile a doppia precisione  |  Restituisce il logaritmo in base 2 di x.  | 
|  log10 (x)  |  virgola mobile a doppia precisione  |  Restituisce il logaritmo in base 10 di x.  | 
|  modalità (n, m)   |  [uguale all'input]  |  Restituisce il modulo (resto) di n diviso per m.  | 
|  pi ()   |  virgola mobile a doppia precisione  |  Restituisce la costante Pi.  | 
|  pow (x, p) o power (x, p)  |  virgola mobile a doppia precisione  |  Restituisce x elevato alla potenza di p.  | 
|  radianti (x)  |  virgola mobile a doppia precisione  |  Converte l'angolo x in gradi in radianti.  | 
|  rand () o random ()  |  virgola mobile a doppia precisione  |  Restituisce un valore pseudo-casuale nell'intervallo 0,0 1,0.  | 
|  casuale (n)  |  [uguale all'input]  |  Restituisce un numero pseudo-casuale compreso tra 0 e n (esclusivo).  | 
|  rotondo (x)  |  [uguale all'input]  |  Restituisce x arrotondato al numero intero più vicino.  | 
|  rotondo (x, d)  |  [uguale all'input]  |  Restituisce x arrotondato a d cifre decimali.  | 
|  segno (x)  |  [uguale all'input]  |  Restituisce la funzione signum di x, ovvero: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/mathematical-functions.html) Per argomenti doppi, la funzione restituisce inoltre: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/timestream/latest/developerguide/mathematical-functions.html)  | 
|  sqrt (x)   |  virgola mobile a doppia precisione  |  Restituisce la radice quadrata di x.  | 
|  to\$1base (x, radix)   |  varchar  |  Restituisce la rappresentazione della radice di base di x.  | 
|  troncare (x)   |  virgola mobile a doppia precisione  |  Restituisce x arrotondato a un numero intero eliminando le cifre dopo il punto decimale.  | 
|  tacos (x)  |  virgola mobile a doppia precisione  |  Restituisce l'arcoseno di x.  | 
|  asino (x)   |  virgola mobile a doppia precisione  |  Restituisce l'arcoseno di x.  | 
|  atan (x)   |  virgola mobile a doppia precisione  |  Restituisce l'arcotangente di x.  | 
|  atan2 (y, x)  |  virgola mobile a doppia precisione  |  Restituisce l'arcotangente di y/x.  | 
|  cos (x)  |  virgola mobile a doppia precisione  |  Restituisce il coseno di x.  | 
|  cosh (x)  |  virgola mobile a doppia precisione  |  Restituisce il coseno iperbolico di x.  | 
|  peccato (x)   |  virgola mobile a doppia precisione  |  Restituisce il seno di x.  | 
|  tan (x)  |  virgola mobile a doppia precisione  |  Restituisce la tangente di x.  | 
|  tanh (x)  |  virgola mobile a doppia precisione  |  Restituisce la tangente iperbolica di x.  | 
|  infinito ()  |  virgola mobile a doppia precisione  |  Restituisce la costante che rappresenta l'infinito positivo.  | 
|  is\$1finite (x)  |  booleano  |  Determina se x è finito.  | 
|  is\$1infinite (x)  |  booleano  |  Determina se x è infinito.  | 
|  is\$1nan (x)  |  booleano  |  Determina se x è. not-a-number  | 
|  nano ()  |  virgola mobile a doppia precisione  |  Restituisce la costante che rappresenta not-a-number.  | 

# Operatori di stringa
<a name="string-operators"></a>

Timestream for LiveAnalytics supporta l'`||`operatore per concatenare una o più stringhe.

# Funzioni stringa
<a name="string-functions"></a>

**Nota**  
Si presume che il tipo di dati di input di queste funzioni sia varchar, se non diversamente specificato.


| Funzione | Tipo di dati di output | Description | 
| --- | --- | --- | 
|  chr (n)   |  varchar  |  Restituisce il punto di codice Unicode n come varchar.  | 
|  codepoint (x)   |  intero  |  Restituisce il punto di codice Unicode dell'unico carattere di str.  | 
|  concat (x1,..., xN)  |  varchar  |  Restituisce la concatenazione di x1, x2,..., xN.  | 
|  hamming\$1distance (x1, x2)   |  bigint  |  Restituisce la distanza di Hamming di x1 e x2, ovvero il numero di posizioni in cui i caratteri corrispondenti sono diversi. Nota che i due input varchar devono avere la stessa lunghezza.  | 
|  lunghezza (x)  |  bigint  |  Restituisce la lunghezza di x in caratteri.  | 
|  levenshtein\$1distance (x1, x2)   |  bigint  |  Restituisce la distanza di modifica di Levenshtein di x1 e x2, ovvero il numero minimo di modifiche a carattere singolo (inserimenti, eliminazioni o sostituzioni) necessarie per cambiare x1 in x2.  | 
|  inferiore (x)  |  varchar  |  Converte x in lettere minuscole.  | 
|  carico (x1, grande dimensione, x2)  |  varchar  |  Pad sinistro x1 per ridimensionare i caratteri con x2. Se la dimensione è inferiore alla lunghezza di x1, il risultato viene troncato in caratteri di dimensione. la dimensione non deve essere negativa e x2 non deve essere vuota.  | 
|  ltrim (x)  |  varchar  |  Rimuove gli spazi bianchi iniziali da x.  | 
|  sostituisci (x1, x2)  |  varchar  |  Rimuove tutte le istanze di x2 da x1.  | 
|  sostituisci (x1, x2, x3)  |  varchar  |  Sostituisce tutte le istanze di x2 con x3 in x1.  | 
|  Inverso (x)   |  varchar  |  Restituisce x con i caratteri in ordine inverso.  | 
|  rpad (x1, grande dimensione, x2)  |  varchar  |  Il tasto destro compatta x1 per ridimensionare i caratteri con x2. Se la dimensione è inferiore alla lunghezza di x1, il risultato viene troncato in caratteri di dimensione. la dimensione non deve essere negativa e x2 non deve essere vuota.  | 
|  rtrim (x)  |  varchar  |  Rimuove gli spazi bianchi finali da x.  | 
|  dividere (x1, x2)  |  array(varchar)  |  Divide x1 sul delimitatore x2 e restituisce un array.  | 
|  split (x1, x2, limite bigint)  |  array(varchar)  |  Divide x1 sul delimitatore x2 e restituisce un array. L'ultimo elemento dell'array contiene sempre tutto ciò che rimane nel limite x1. Il limite deve essere un numero positivo.  | 
|  split\$1part (x1, x2, bigint pos)   |  varchar  |  Divide x1 sul delimitatore x2 e restituisce il campo varchar in pos. Gli indici dei campi iniziano con 1. Se pos è maggiore del numero di campi, viene restituito null.  | 
|  strpos (x1, x2)   |  bigint  |  Restituisce la posizione iniziale della prima istanza di x2 in x1. Le posizioni iniziano con 1. Se non viene trovato, viene restituito 0.  | 
|  strpos (x1, x2, istanza bigint)   |  bigint  |  Restituisce la posizione dell'ennesima istanza di x2 in x1. L'istanza deve essere un numero positivo. Le posizioni iniziano con 1. Se non viene trovato, viene restituito 0.  | 
|  strrpos (x1, x2)   |  bigint  |  Restituisce la posizione iniziale dell'ultima istanza di x2 in x1. Le posizioni iniziano con 1. Se non viene trovato, viene restituito 0.  | 
|  strrpos (x1, x2, bigint instance)   |  bigint  |  Restituisce la posizione dell'ennesima istanza di x2 in x1 a partire dalla fine di x1. l'istanza deve essere un numero positivo. Le posizioni iniziano con 1. Se non viene trovato, viene restituito 0.  | 
|  posizione (x2 IN x1)   |  bigint  |  Restituisce la posizione iniziale della prima istanza di x2 in x1. Le posizioni iniziano con 1. Se non viene trovato, viene restituito 0.  | 
|  substr (x, bigint start)   |  varchar  |  Restituisce il resto di x dalla posizione iniziale di inizio. Le posizioni iniziano con 1. Una posizione iniziale negativa viene interpretata come relativa alla fine di x.  | 
|  substr (x, bigint start, bigint len)   |  varchar  |  Restituisce una sottostringa da x di lunghezza len dalla posizione iniziale start. Le posizioni iniziano con 1. Una posizione iniziale negativa viene interpretata come relativa alla fine di x.  | 
|  tagliare (x)   |  varchar  |  Rimuove gli spazi bianchi iniziali e finali da x.  | 
|  superiore (x)   |  varchar  |  Converte x in maiuscolo.  | 

# Operatori di matrice
<a name="array-operators"></a>

Timestream for LiveAnalytics supporta i seguenti operatori di array.


| Operatore | Description | 
| --- | --- | 
|  []  |  Accedi a un elemento di un array in cui il primo indice inizia da 1.  | 
|  \$1\$1  |  Concatena un array con un altro array o elemento dello stesso tipo.  | 

# Funzioni di array
<a name="array-functions"></a>

Timestream for LiveAnalytics supporta le seguenti funzioni di array.


| Funzione | Tipo di dati di output | Description | 
| --- | --- | --- | 
|  array\$1distinct (x)  |  array  |  Rimuove i valori duplicati dall'array x. <pre>SELECT array_distinct(ARRAY[1,2,2,3])</pre> Risultato di esempio: `[ 1,2,3 ]`  | 
|  array\$1intersect (x, y)  |  array  |  Restituisce un array degli elementi nell'intersezione di x e y, senza duplicati. <pre>SELECT array_intersect(ARRAY[1,2,3], ARRAY[3,4,5])</pre> Risultato di esempio: `[ 3 ]`  | 
|  array\$1union (x, y)  |  array  |  Restituisce un array degli elementi nell'unione di x e y, senza duplicati. <pre>SELECT array_union(ARRAY[1,2,3], ARRAY[3,4,5])</pre> Risultato di esempio: `[ 1,2,3,4,5 ]`  | 
|  array\$1except (x, y)  |  array  |  Restituisce una matrice di elementi in x ma non in y, senza duplicati. <pre>SELECT array_except(ARRAY[1,2,3], ARRAY[3,4,5])</pre> Risultato di esempio: `[ 1,2 ]`  | 
|  array\$1join (x, delimiter, null\$1replacement)   |  varchar  |  Concatena gli elementi dell'array specificato utilizzando il delimitatore e una stringa opzionale per sostituire i valori null. <pre>SELECT array_join(ARRAY[1,2,3], ';', '')</pre> Risultato di esempio: `1;2;3`  | 
|  array\$1max (x)  |  come gli elementi dell'array  |  Restituisce il valore massimo dell'array di input. <pre>SELECT array_max(ARRAY[1,2,3])</pre> Risultato di esempio: `3`  | 
|  array\$1min (x)  |  come gli elementi dell'array  |  Restituisce il valore minimo dell'array di input. <pre>SELECT array_min(ARRAY[1,2,3])</pre> Risultato di esempio: `1`  | 
|  array\$1position (x, element)  |  bigint  |  Restituisce la posizione della prima occorrenza dell'elemento nell'array x (o 0 se non viene trovata). <pre>SELECT array_position(ARRAY[3,4,5,9], 5)</pre> Risultato di esempio: `3`  | 
|  array\$1remove (x, element)  |  array  |  Rimuove tutti gli elementi che sono uguali all'elemento dall'array x. <pre>SELECT array_remove(ARRAY[3,4,5,9], 4)</pre> Risultato di esempio: `[ 3,5,9 ]`  | 
|  array\$1sort (x)  |  array  |  Ordina e restituisce l'array x. Gli elementi di x devono essere ordinabili. Gli elementi nulli verranno posizionati alla fine dell'array restituito. <pre>SELECT array_sort(ARRAY[6,8,2,9,3])</pre> Risultato di esempio: `[ 2,3,6,8,9 ]`  | 
|  arrays\$1overlap (x, y)   |  booleano  |  Verifica se gli array x e y hanno elementi non nulli in comune. Restituisce null se non ci sono elementi non nulli in comune ma entrambi gli array contengono null. <pre>SELECT arrays_overlap(ARRAY[6,8,2,9,3], ARRAY[6,8])</pre> Risultato di esempio: `true`  | 
|  cardinalità (x)  |  bigint  |  Restituisce la dimensione dell'array x. <pre>SELECT cardinality(ARRAY[6,8,2,9,3])</pre> Risultato di esempio: `5`  | 
|  concat (matrice1, matrice2,..., matriceN)  |  array  |  Concatena gli array array1, array2,..., arrayN. <pre>SELECT concat(ARRAY[6,8,2,9,3], ARRAY[11,32], ARRAY[6,8,2,0,14])</pre> Risultato di esempio: `[ 6,8,2,9,3,11,32,6,8,2,0,14 ]`  | 
|  element\$1at (array (E), indice)  |  E  |  Restituisce un elemento dell'array in un determinato indice. Se index < 0, element\$1at accede agli elementi dall'ultimo al primo. <pre>SELECT element_at(ARRAY[6,8,2,9,3], 1)</pre> Risultato di esempio: `6`  | 
|  repeat (elemento, conteggio)   |  array  |  Ripeti l'elemento per contare i tempi. <pre>SELECT repeat(1, 3)</pre> Risultato di esempio: `[ 1,1,1 ]`  | 
|  inversa (x)  |  array  |  Restituisce un array che ha l'ordine inverso dell'array x. <pre>SELECT reverse(ARRAY[6,8,2,9,3])</pre> Risultato di esempio: `[ 3,9,2,8,6 ]`  | 
|  sequenza (inizio, arresto)  |  matrice (bigint)  |  Genera una sequenza di numeri interi dall'inizio alla fine, incrementandola di 1 se start è minore o uguale a stop, altrimenti -1. <pre>SELECT sequence(3, 8)</pre> Risultato di esempio: `[ 3,4,5,6,7,8 ]`  | 
|  sequenza (inizio, arresto, fase)   |  matrice (bigint)  |  Genera una sequenza di numeri interi dall'inizio alla fine, incrementandola passo dopo passo. <pre>SELECT sequence(3, 15, 2)</pre> Risultato di esempio: `[ 3,5,7,9,11,13,15 ]`  | 
|  sequenza (inizio, arresto)   |  array (timestamp)  |  Genera una sequenza di timestamp dalla data di inizio alla data di fine, con un incremento di 1 giorno. <pre>SELECT sequence('2023-04-02 19:26:12.941000000', '2023-04-06 19:26:12.941000000', 1d)</pre> Risultato di esempio: `[ 2023-04-02 19:26:12.941000000,2023-04-03 19:26:12.941000000,2023-04-04 19:26:12.941000000,2023-04-05 19:26:12.941000000,2023-04-06 19:26:12.941000000 ]`  | 
|  sequenza (inizio, arresto, fase)   |  matrice (timestamp)  |  Genera una sequenza di timestamp dall'inizio alla fine, incrementandola passo dopo passo. Il tipo di dati del passaggio è intervallo. <pre>SELECT sequence('2023-04-02 19:26:12.941000000', '2023-04-10 19:26:12.941000000', 2d)</pre> Risultato di esempio: `[ 2023-04-02 19:26:12.941000000,2023-04-04 19:26:12.941000000,2023-04-06 19:26:12.941000000,2023-04-08 19:26:12.941000000,2023-04-10 19:26:12.941000000 ]`  | 
|  shuffle (x)  |  array  |  Genera una permutazione casuale dell'array dato x. <pre>SELECT shuffle(ARRAY[6,8,2,9,3])</pre> Risultato di esempio: `[ 6,3,2,9,8 ]`  | 
|  slice (x, start, length)  |  array  |  Array di sottoinsiemi x a partire dall'indice start (o dalla fine se start è negativo) con una lunghezza di lunghezza. <pre>SELECT slice(ARRAY[6,8,2,9,3], 1, 3)</pre> Risultato di esempio: `[ 6,8,2 ]`  | 
|  zip (array1, array2 [,...])  |  matrice (riga)  |  Unisce gli array dati, per elemento, in un unico array di righe. Se gli argomenti hanno una lunghezza non uniforme, i valori mancanti vengono riempiti con NULL. <pre>SELECT zip(ARRAY[6,8,2,9,3], ARRAY[15,24])</pre> Risultato di esempio: `[ ( 6, 15 ),( 8, 24 ),( 2, - ),( 9, - ),( 3, - ) ]`  | 

# Funzioni bit per bit
<a name="bitwise-functions"></a>

Timestream for LiveAnalytics supporta le seguenti funzioni bit per bit.


| Funzione | Tipo di dati di output | Description | 
| --- | --- | --- | 
| bit\$1count (bigint, bigint) | bigint (complemento a due) |  Restituisce il conteggio dei bit nel primo parametro bigint dove il secondo parametro è un numero intero con segno di bit come 8 o 64. <pre>SELECT bit_count(19, 8)</pre> Risultato di esempio: `3` <pre>SELECT bit_count(19, 2)</pre> Risultato di esempio: `Number must be representable with the bits specified. 19 can not be represented with 2 bits`   | 
| bitwise\$1and (bigint, bigint) | bigint (complemento a due) |  Restituisce l'AND bit per bit dei parametri bigint. <pre>SELECT bitwise_and(12, 7)</pre> Risultato di esempio: `4`  | 
| bitwise\$1not (bigint) | bigint (complemento a due) |  Restituisce il NOT bit per bit del parametro bigint. <pre>SELECT bitwise_not(12)</pre> Risultato di esempio: `-13`  | 
| bitwise\$1or (bigint, bigint) | bigint (complemento a due) |  Restituisce l'OR bit per bit dei parametri bigint. <pre>SELECT bitwise_or(12, 7)</pre> Risultato di esempio: `15`  | 
| bitwise\$1xor (bigint, bigint) | bigint (complemento a due) |  Restituisce lo XOR bit per bit dei parametri bigint. <pre>SELECT bitwise_xor(12, 7)</pre> Risultato di esempio: `11`  | 

# Funzioni di espressioni regolari
<a name="regex-functions"></a>

Le funzioni di espressione regolare in Timestream LiveAnalytics supportano la sintassi del [pattern Java.](http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html) Timestream for LiveAnalytics supporta le seguenti funzioni di espressione regolare.


| Funzione | Tipo di dati di output | Description | 
| --- | --- | --- | 
|  regexp\$1extract\$1all (stringa, modello)  |  array(varchar)  |  Restituisce la o le sottostringhe corrispondenti al modello di espressione regolare in string. <pre>SELECT regexp_extract_all('example expect complex', 'ex\w')</pre> Risultato di esempio: `[ exa,exp ]`  | 
|  regexp\$1extract\$1all (stringa, pattern, gruppo)  |  array(varchar)  |  [Trova tutte le occorrenze del modello di espressione regolare nella stringa e restituisce il gruppo numerico del gruppo di acquisizione.](http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#gnumber) <pre>SELECT regexp_extract_all('example expect complex', '(ex)(\w)', 2)</pre> Risultato di esempio: `[ a,p ]`  | 
|  regexp\$1extract (stringa, pattern)  |  varchar  |  Restituisce la prima sottostringa corrispondente al modello di espressione regolare in string. <pre>SELECT regexp_extract('example expect', 'ex\w')</pre> Risultato di esempio: `exa`  | 
|  regexp\$1extract (stringa, pattern, group)   |  varchar  |  Trova la prima occorrenza del modello di espressione regolare nella stringa e restituisce il gruppo numerico del gruppo di [acquisizione](http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#gnumber). <pre>SELECT regexp_extract('example expect', '(ex)(\w)', 2)</pre> Risultato di esempio: `a`  | 
|  regexp\$1like (stringa, pattern)   |  booleano  |  Valuta il modello di espressione regolare e determina se è contenuto all'interno di una stringa. Questa funzione è simile all'operatore LIKE, tranne per il fatto che il pattern deve essere contenuto solo all'interno di una stringa, anziché dover corrispondere a tutta la stringa. In altre parole, esegue un'operazione di contenimento anziché un'operazione di abbinamento. È possibile abbinare l'intera stringa ancorando il pattern utilizzando ^ e \$1. <pre>SELECT regexp_like('example', 'ex')</pre> Risultato di esempio: `true`  | 
|  regexp\$1replace (stringa, pattern)  |  varchar  |  Rimuove ogni istanza della sottostringa corrispondente al modello di espressione regolare dalla stringa. <pre>SELECT regexp_replace('example expect', 'expect')</pre> Risultato di esempio: `example`  | 
|  regexp\$1replace (stringa, pattern, sostituzione)   |  varchar  |  Sostituisce ogni istanza della sottostringa corrispondente al pattern regex nella stringa con una sostituzione. È possibile fare riferimento ai gruppi di acquisizione in sostituzione utilizzando \$1g per un gruppo numerato o \$1 \$1name\$1 per un gruppo denominato. Un simbolo del dollaro (\$1) può essere incluso nella sostituzione facendone evaporare con una barra rovesciata (\$1 \$1). <pre>SELECT regexp_replace('example expect', 'expect', 'surprise')</pre> Risultato di esempio: `example surprise`  | 
|  regexp\$1replace (stringa, pattern, funzione)   |  varchar  |  Sostituisce ogni istanza della sottostringa corrispondente al modello di espressione regolare nella stringa utilizzando la funzione. La funzione di [espressione lambda](https://prestodb.io/docs/current/functions/lambda.html) viene richiamata per ogni corrispondenza con i gruppi di acquisizione passati come array. L'acquisizione dei numeri di gruppo inizia da uno; non esiste un gruppo per l'intera corrispondenza (se necessario, racchiudi l'intera espressione tra parentesi). <pre>SELECT regexp_replace('example', '(\w)', x -> upper(x[1]))</pre> Risultato di esempio: `EXAMPLE`  | 
|  regexp\$1split (stringa, pattern)   |  array(varchar)  |  Divide la stringa usando il modello di espressione regolare e restituisce un array. Le stringhe vuote finali vengono conservate. <pre>SELECT regexp_split('example', 'x')</pre> Risultato di esempio: `[ e,ample ]`  | 

# Operatori data/ora
<a name="date-time-operators"></a>

**Nota**  
Timestream for non LiveAnalytics supporta valori temporali negativi. Qualsiasi operazione che genera un tempo negativo genera un errore.

Timestream for LiveAnalytics supporta le seguenti operazioni su `timestamps``dates`, e. `intervals`


| Operatore | Description | 
| --- | --- | 
|  \$1  |  Addizione  | 
|  -  |  Sottrazione  | 

**Topics**
+ [Operazioni](#date-time-operators-operations)
+ [Addizione](#date-time-operators-addition)
+ [Sottrazione](#date-time-operators-subtraction)

## Operazioni
<a name="date-time-operators-operations"></a>

Il tipo di risultato di un'operazione si basa sugli operandi. È `3s` possibile utilizzare valori letterali a intervalli come `1day` e.

```
SELECT date '2022-05-21' + interval '2' day
```

```
SELECT date '2022-05-21' + 2d
```

```
SELECT date '2022-05-21' + 2day
```

Esempio di risultato per ciascuno: `2022-05-23`

Le unità di intervallo includono`second`,`minute`,`hour`,`day`, `week``month`, e`year`. Ma in alcuni casi non tutte sono applicabili. Ad esempio, secondi, minuti e ore non possono essere aggiunti o sottratti da una data.

```
SELECT interval '4' year + interval '2' month
```

Risultato di esempio: `4-2`

```
SELECT typeof(interval '4' year + interval '2' month)
```

Risultato di esempio: `interval year to month`

Il tipo di risultato delle operazioni a intervalli può essere `'interval year to month'` o `'interval day to second'` dipende dagli operandi. Gli intervalli possono essere aggiunti o sottratti da e. `dates` `timestamps` Ma un `date` o `timestamp` non può essere aggiunto o sottratto da un o. `date` `timestamp` Per trovare intervalli o durate correlati a date o timestamp, vedere e funzioni correlate in. `date_diff` [Intervallo e durata](date-time-functions.md#date-time-functions-interval-duration)

## Addizione
<a name="date-time-operators-addition"></a>

**Example**  

```
SELECT date '2022-05-21' + interval '2' day
```
Risultato di esempio: `2022-05-23`

**Example**  

```
SELECT typeof(date '2022-05-21' + interval '2' day)
```
Risultato di esempio: `date`

**Example**  

```
SELECT interval '2' year + interval '4' month
```
Risultato di esempio: `2-4`

**Example**  

```
SELECT typeof(interval '2' year + interval '4' month)
```
Risultato di esempio: `interval year to month`

## Sottrazione
<a name="date-time-operators-subtraction"></a>

**Example**  

```
SELECT timestamp '2022-06-17 01:00' - interval '7' hour
```
Risultato di esempio: `2022-06-16 18:00:00.000000000`

**Example**  

```
SELECT typeof(timestamp '2022-06-17 01:00' - interval '7' hour)
```
Risultato di esempio: `timestamp`

**Example**  

```
SELECT interval '6' day - interval '4' hour
```
Risultato di esempio: `5 20:00:00.000000000`

**Example**  

```
SELECT typeof(interval '6' day - interval '4' hour)
```
Risultato di esempio: `interval day to second`

# Funzioni data/ora
<a name="date-time-functions"></a>

**Nota**  
Timestream for non LiveAnalytics supporta valori temporali negativi. Qualsiasi operazione che genera un tempo negativo genera un errore.

Timestream for LiveAnalytics utilizza il fuso orario UTC per data e ora. Timestream supporta le seguenti funzioni per data e ora.

**Topics**
+ [Generale e conversione](#date-time-functions-general)
+ [Intervallo e durata](#date-time-functions-interval-duration)
+ [Formattazione e analisi](#date-time-functions-formatting-parsing)
+ [Estrazione](#date-time-functions-extraction)

## Generale e conversione
<a name="date-time-functions-general"></a>

Timestream for LiveAnalytics supporta le seguenti funzioni generali e di conversione per data e ora.


| Funzione | Tipo di dati di output | Description | 
| --- | --- | --- | 
|  data\$1corrente  |  data  |  Restituisce la data corrente in UTC. Nessuna parentesi utilizzata. <pre>SELECT current_date</pre> Risultato di esempio: `2022-07-07`  Anche questa è una parola chiave riservata. Per un elenco di parole chiave riservate, vedere[Parole chiave riservate](ts-limits.md#limits.reserved).   | 
|  tempo\$1corrente  |  time  |  Restituisce l'ora corrente in UTC. Nessuna parentesi utilizzata. <pre>SELECT current_time</pre> Risultato di esempio: `17:41:52.827000000`  Anche questa è una parola chiave riservata. Per un elenco di parole chiave riservate, vedere[Parole chiave riservate](ts-limits.md#limits.reserved).   | 
|  current\$1timestamp o now ()  |  timestamp  |  Restituisce il timestamp corrente in UTC. <pre>SELECT current_timestamp</pre> Risultato di esempio: `2022-07-07 17:42:32.939000000`  Anche questa è una parola chiave riservata. Per un elenco di parole chiave riservate, vedere[Parole chiave riservate](ts-limits.md#limits.reserved).   | 
|  current\$1timezone ()  |  varchar Il valore sarà 'UTC.'  |  Timestream utilizza il fuso orario UTC per data e ora. <pre>SELECT current_timezone()</pre> Risultato di esempio: `UTC`  | 
|  data (varchar (x)), data (timestamp)  |  data  |  <pre>SELECT date(TIMESTAMP '2022-07-07 17:44:43.771000000')</pre> Risultato di esempio: `2022-07-07`  | 
|  last\$1day\$1of\$1month (timestamp), last\$1day\$1of\$1month (data)  |  data  |  <pre>SELECT last_day_of_month(TIMESTAMP '2022-07-07 17:44:43.771000000')</pre> Risultato di esempio: `2022-07-31`  | 
|  from\$1iso8601\$1timestamp (stringa)  |  timestamp  |  Analizza il timestamp ISO 8601 nel formato timestamp interno. <pre>SELECT from_iso8601_timestamp('2022-06-17T08:04:05.000000000+05:00')</pre> Risultato di esempio: `2022-06-17 03:04:05.000000000`  | 
|  from\$1iso8601\$1date (stringa)  |  data  |  Analizza la stringa di data ISO 8601 nel formato timestamp interno per l'UTC 00:00:00 della data specificata. <pre>SELECT from_iso8601_date('2022-07-17')</pre> Risultato di esempio: `2022-07-17`  | 
|  to\$1iso8601 (timestamp), to\$1iso8601 (data)  |  varchar  |  Restituisce una stringa in formato ISO 8601 per l'input. <pre>SELECT to_iso8601(from_iso8601_date('2022-06-17'))</pre> Risultato di esempio: `2022-06-17`  | 
|  from\$1milliseconds (bigint)  |  timestamp  |  <pre>SELECT from_milliseconds(1)</pre> Risultato di esempio: `1970-01-01 00:00:00.001000000`  | 
|  from\$1nanoseconds (bigint)  |  timestamp  |  <pre>select from_nanoseconds(300000001)</pre> Risultato di esempio: `1970-01-01 00:00:00.300000001`  | 
|  from\$1unixtime (double)  |  timestamp  |  Restituisce un timestamp che corrisponde all'unixtime fornito. <pre>SELECT from_unixtime(1)</pre> Risultato di esempio: `1970-01-01 00:00:01.000000000`  | 
|  ora locale  |  time  |  Restituisce l'ora corrente in UTC. Nessuna parentesi utilizzata. <pre>SELECT localtime</pre> Risultato di esempio: `17:58:22.654000000`  Anche questa è una parola chiave riservata. Per un elenco di parole chiave riservate, vedere[Parole chiave riservate](ts-limits.md#limits.reserved).   | 
|  timestamp locale  |  timestamp  |  Restituisce il timestamp corrente in UTC. Nessuna parentesi utilizzata. <pre>SELECT localtimestamp</pre> Risultato di esempio: `2022-07-07 17:59:04.368000000`  Anche questa è una parola chiave riservata. Per un elenco di parole chiave riservate, vedere[Parole chiave riservate](ts-limits.md#limits.reserved).   | 
|  to\$1milliseconds (intervallo da giorno a secondo), to\$1milliseconds (timestamp)  |  bigint  |  <pre>SELECT to_milliseconds(INTERVAL '2' DAY + INTERVAL '3' HOUR)</pre> Risultato di esempio: `183600000` <pre>SELECT to_milliseconds(TIMESTAMP '2022-06-17 17:44:43.771000000')</pre> Risultato di esempio: `1655487883771`  | 
|  to\$1nanoseconds (intervallo da giorno a secondo), to\$1nanoseconds (timestamp)  |  bigint  |  <pre>SELECT to_nanoseconds(INTERVAL '2' DAY + INTERVAL '3' HOUR)</pre> Risultato di esempio: `183600000000000` <pre>SELECT to_nanoseconds(TIMESTAMP '2022-06-17 17:44:43.771000678')</pre> Risultato di esempio: `1655487883771000678`  | 
|  to\$1unixtime (timestamp)  |  virgola mobile a doppia precisione  |  Restituisce unixtime per il timestamp fornito. <pre>SELECT to_unixtime('2022-06-17 17:44:43.771000000')</pre> Risultato di esempio: `1.6554878837710001E9`  | 
|  date\$1trunc (unità, timestamp)  |  timestamp  |  Restituisce il timestamp troncato in unità, dove l'unità è uno dei [secondo, minuto, ora, giorno, settimana, mese, trimestre o anno]. <pre>SELECT date_trunc('minute', TIMESTAMP '2022-06-17 17:44:43.771000000')</pre> Risultato di esempio: `2022-06-17 17:44:00.000000000`  | 

## Intervallo e durata
<a name="date-time-functions-interval-duration"></a>

Timestream for LiveAnalytics supporta le seguenti funzioni di intervallo e durata per data e ora.


| Funzione | Tipo di dati di output | Description | 
| --- | --- | --- | 
|  date\$1add (unit, bigint, date), date\$1add (unit, bigint, time), date\$1add (varchar (x), bigint, timestamp)  |  timestamp  |  Aggiunge un insieme di unità, dove l'unità è una tra [secondo, minuto, ora, giorno, settimana, mese, trimestre o anno]. <pre>SELECT date_add('hour', 9, TIMESTAMP '2022-06-17 00:00:00')</pre> Risultato di esempio: `2022-06-17 09:00:00.000000000`  | 
|  date\$1diff (unità, data, data), date\$1diff (unità, ora, ora), date\$1diff (unità, timestamp, timestamp)  |  bigint  |  Restituisce una differenza, dove l'unità è uno dei [secondo, minuto, ora, giorno, settimana, mese, trimestre o anno]. <pre>SELECT date_diff('day', DATE '2020-03-01', DATE '2020-03-02')</pre> Risultato di esempio: `1`  | 
|  parse\$1duration (stringa)  |  intervallo  |  Analizza la stringa di input per restituire un equivalente. `interval` <pre>SELECT parse_duration('42.8ms')</pre> Risultato di esempio: `0 00:00:00.042800000` <pre>SELECT typeof(parse_duration('42.8ms'))</pre> Risultato di esempio: `interval day to second`  | 
| bin (timestamp, intervallo) | timestamp |  Arrotonda il valore intero del `timestamp` parametro al multiplo più vicino del valore intero del `interval` parametro. Il significato di questo valore restituito potrebbe non essere ovvio. Viene calcolato utilizzando l'aritmetica dei numeri interi prima dividendo il numero intero del timestamp per il numero intero dell'intervallo e quindi moltiplicando il risultato per il numero intero dell'intervallo. Tenendo presente che un timestamp specifica un punto UTC come un numero di frazioni di secondo trascorse dall'epoca POSIX (1 gennaio 1970), il valore restituito raramente si allinea alle unità del calendario. Ad esempio, se si specifica un intervallo di 30 giorni, tutti i giorni trascorsi dall'epoca vengono divisi in incrementi di 30 giorni e viene restituito l'inizio dell'incremento di 30 giorni più recente, che non ha alcuna relazione con i mesi del calendario. Ecco alcuni esempi: <pre>bin(TIMESTAMP '2022-06-17 10:15:20', 5m)     ==> 2022-06-17 10:15:00.000000000<br />bin(TIMESTAMP '2022-06-17 10:15:20', 1d)     ==> 2022-06-17 00:00:00.000000000<br />bin(TIMESTAMP '2022-06-17 10:15:20', 10day)  ==> 2022-06-17 00:00:00.000000000<br />bin(TIMESTAMP '2022-06-17 10:15:20', 30day)  ==> 2022-05-28 00:00:00.000000000</pre>  | 
|  fa (intervallo)  |  timestamp  |  Restituisce il valore corrispondente a `interval` current\$1timestamp. <pre>SELECT ago(1d)</pre> Risultato di esempio: `2022-07-06 21:08:53.245000000`  | 
|  valori letterali a intervalli come 1h, 1d e 30m  |  intervallo  |  I valori letterali a intervalli sono utili per parse\$1duration (string). Ad esempio, `1d` è equivalente a `parse_duration('1d')`. Ciò consente l'uso dei valori letterali ovunque venga utilizzato un intervallo. Ad esempio `ago(1d)` e `bin(<timestamp>, 1m)`.  | 

Alcuni valori letterali a intervalli fungono da abbreviazione di parse\$1duration. Ad esempio,,`parse_duration('1day')`, e ogni ritorno in cui `1day` si `parse_duration('1d')` trova il tipo`1d`. `1 00:00:00.000000000` `interval day to second` Lo spazio è consentito nel formato fornito a`parse_duration`. Ad esempio, restituisce `parse_duration('1day')` anche`00:00:00.000000000`. Ma non `1 day` è un intervallo letterale.

Le unità relative a `interval day to second` sono ns, nanosecond, us, microsecond, ms, millisecond, s, second, m, minute, h, hour, d e day.

C'è anche. `interval year to month` Le unità relative all'intervallo da un anno all'altro sono y, anno e mese. Ad esempio, `SELECT 1year` restituisce`1-0`. `SELECT 12month`restituisce anche`1-0`. `SELECT 8month`ritorna`0-8`.

Sebbene l'unità di `quarter` sia disponibile anche per alcune funzioni come `date_trunc` e`date_add`, non `quarter` è disponibile come parte di un intervallo letterale.

## Formattazione e analisi
<a name="date-time-functions-formatting-parsing"></a>

Timestream for LiveAnalytics supporta le seguenti funzioni di formattazione e analisi per data e ora.


| Funzione | Tipo di dati di output | Description | 
| --- | --- | --- | 
|  date\$1format (timestamp, varchar (x))  |  varchar  |  [Per ulteriori informazioni sugli specificatori di formato usati da questa funzione, vedere \$1 https://trino.io/docs/current/functions/datetime.html mysql-date-functions](https://trino.io/docs/current/functions/datetime.html#mysql-date-functions) <pre>SELECT date_format(TIMESTAMP '2019-10-20 10:20:20', '%Y-%m-%d %H:%i:%s')</pre> Risultato di esempio: `2019-10-20 10:20:20`  | 
|  date\$1parse (varchar (x), varchar (y))  |  timestamp  |  [Per ulteriori informazioni sugli specificatori di formato usati da questa funzione, vedere \$1 https://trino.io/docs/current/functions/datetime.html mysql-date-functions](https://trino.io/docs/current/functions/datetime.html#mysql-date-functions) <pre>SELECT date_parse('2019-10-20 10:20:20', '%Y-%m-%d %H:%i:%s')</pre> Risultato di esempio: `2019-10-20 10:20:20.000000000`  | 
|  format\$1datetime (timestamp, varchar (x))  |  varchar  |  [Per ulteriori informazioni sulla stringa di formato utilizzata da questa funzione, vedere http://joda-time.sourceforge. net/apidocs/org/joda/time/format/DateTimeFormat.html](http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html) <pre>SELECT format_datetime(parse_datetime('1968-01-13 12', 'yyyy-MM-dd HH'), 'yyyy-MM-dd HH')</pre> Risultato di esempio: `1968-01-13 12`  | 
|  parse\$1datetime (varchar (x), varchar (y))  |  timestamp  |  [Per ulteriori informazioni sulla stringa di formato utilizzata da questa funzione, vedere http://joda-time.sourceforge. net/apidocs/org/joda/time/format/DateTimeFormat.html](http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html) <pre>SELECT parse_datetime('2019-12-29 10:10 PST', 'uuuu-LL-dd HH:mm z')</pre> Risultato di esempio: `2019-12-29 18:10:00.000000000`  | 

## Estrazione
<a name="date-time-functions-extraction"></a>

Timestream for LiveAnalytics supporta le seguenti funzioni di estrazione per data e ora. La funzione di estrazione è la base per le restanti funzioni di praticità.


| Funzione | Tipo di dati di output | Description | 
| --- | --- | --- | 
|  estratto  |  bigint  |  Estrae un campo da un timestamp, dove il campo è uno dei [YEAR, QUARTER, MONTH, WEEK, DAY\$1OF\$1WEEK, DOW, DAY\$1OF\$1YEAR, DOY, YEAR\$1OF\$1WEEK, YOW, HOUR, MINUTE o SECOND]. <pre>SELECT extract(YEAR FROM '2019-10-12 23:10:34.000000000')</pre> Risultato di esempio: `2019`  | 
|  giorno (timestamp), giorno (data), giorno (intervallo da giorno a secondo)  |  bigint  |  <pre>SELECT day('2019-10-12 23:10:34.000000000')</pre> Risultato di esempio: `12`  | 
|  day\$1of\$1month (timestamp), day\$1of\$1month (data), day\$1of\$1month (intervallo da giorno a secondo)  |  bigint  |  <pre>SELECT day_of_month('2019-10-12 23:10:34.000000000')</pre> Risultato di esempio: `12`  | 
|  day\$1of\$1week (timestamp), day\$1of\$1week (data)  |  bigint  |  <pre>SELECT day_of_week('2019-10-12 23:10:34.000000000')</pre> Risultato di esempio: `6`  | 
|  day\$1of\$1year (timestamp), day\$1of\$1year (data)  |  bigint  |  <pre>SELECT day_of_year('2019-10-12 23:10:34.000000000')</pre> Risultato di esempio: `285`  | 
|  dow (timestamp), dow (data)  |  bigint  |  Alias per day\$1of\$1week  | 
|  doy (timestamp), doy (data)  |  bigint  |  Alias per day\$1of\$1year  | 
|  ora (timestamp), ora (ora), ora (intervallo da giorno a secondo)  |  bigint  |  <pre>SELECT hour('2019-10-12 23:10:34.000000000')</pre> Risultato di esempio: `23`  | 
|  millisecondo (timestamp), millisecondo (ora), millisecondo (intervallo da giorno a secondo)  |  bigint  |  <pre>SELECT millisecond('2019-10-12 23:10:34.000000000')</pre> Risultato di esempio: `0`  | 
|  minuto (timestamp), minuto (ora), minuto (intervallo da giorno a secondo)  |  bigint  |  <pre>SELECT minute('2019-10-12 23:10:34.000000000')</pre> Risultato di esempio: `10`  | 
|  mese (timestamp), mese (data), mese (intervallo da anno a mese)  |  bigint  |  <pre>SELECT month('2019-10-12 23:10:34.000000000')</pre> Risultato di esempio: `10`  | 
|  nanosecondo (timestamp), nanosecondo (ora), nanosecondo (intervallo da giorno a secondo)  |  bigint  |  <pre>SELECT nanosecond(current_timestamp)</pre> Risultato di esempio: `162000000`  | 
|  trimestre (timestamp), trimestre (data)  |  bigint  |  <pre>SELECT quarter('2019-10-12 23:10:34.000000000')</pre> Risultato di esempio: `4`  | 
|  secondo (timestamp), secondo (ora), secondo (intervallo da giorno a secondo)  |  bigint  |  <pre>SELECT second('2019-10-12 23:10:34.000000000')</pre> Risultato di esempio: `34`  | 
|  settimana (timestamp), settimana (data)  |  bigint  |  <pre>SELECT week('2019-10-12 23:10:34.000000000')</pre> Risultato di esempio: `41`  | 
|  settimana\$1del\$1anno (timestamp), settimana\$1del\$1anno (data)  |  bigint  |  Alias per settimana  | 
|  anno (timestamp), anno (data), anno (intervallo da anno a mese)  |  bigint  |  <pre>SELECT year('2019-10-12 23:10:34.000000000')</pre> Risultato di esempio: `2019`  | 
|  anno\$1di\$1settimana (timestamp), anno\$1del\$1settimana (data)  |  bigint  |  <pre>SELECT year_of_week('2019-10-12 23:10:34.000000000')</pre> Risultato di esempio: `2019`  | 
|  yow (timestamp), yow (data)  |  bigint  |  Alias per year\$1of\$1week  | 

# Funzioni di aggregazione
<a name="aggregate-functions"></a>

Timestream for supporta le seguenti funzioni aggregate. LiveAnalytics 


| Funzione | Tipo di dati di output | Description | 
| --- | --- | --- | 
|  arbitrario (x)  |  [uguale all'input]  |  Restituisce un valore arbitrario non nullo di x, se ne esiste uno. <pre>SELECT arbitrary(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Risultato di esempio: `1`  | 
|  array\$1agg (x)  |  array< [uguale all'input]  |  Restituisce un array creato dagli elementi x di input. <pre>SELECT array_agg(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Risultato di esempio: `[ 1,2,3,4 ]`  | 
|  avg (x)  |  virgola mobile a doppia precisione  |  Restituisce la media (media aritmetica) di tutti i valori di input. <pre>SELECT avg(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Risultato di esempio: `2.5`  | 
|  bool\$1and (boolean) ogni (boolean)   |  booleano  |  Restituisce TRUE se ogni valore di input è VERO, altrimenti FALSO. <pre>SELECT bool_and(t.c) FROM (VALUES true, true, false, true) AS t(c)</pre> Risultato di esempio: `false`  | 
|  bool\$1or (booleano)  |  booleano  |  Restituisce TRUE se un valore di input è VERO, altrimenti FALSO. <pre>SELECT bool_or(t.c) FROM (VALUES true, true, false, true) AS t(c)</pre> Risultato di esempio: `true`  | 
|  conteggio (\$1) conteggio (x)  |  bigint  |  count (\$1) restituisce il numero di righe di input. count (x) restituisce il numero di valori di input non nulli. <pre>SELECT count(t.c) FROM (VALUES true, true, false, true) AS t(c)</pre> Risultato di esempio: `4`  | 
|  count\$1if (x)   |  bigint  |  Restituisce il numero di valori di input TRUE.  <pre>SELECT count_if(t.c) FROM (VALUES true, true, false, true) AS t(c)</pre> Risultato di esempio: `3`  | 
|  geometric\$1mean (x)  |  virgola mobile a doppia precisione  |  Restituisce la media geometrica di tutti i valori di input. <pre>SELECT geometric_mean(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Risultato di esempio: `2.213363839400643`  | 
|  max\$1by (x, y)   |  [uguale a x]  |  Restituisce il valore di x associato al valore massimo di y su tutti i valori di input. <pre>SELECT max_by(t.c1, t.c2) FROM (VALUES (('a', 1)), (('b', 2)), (('c', 3)), (('d', 4))) AS t(c1, c2)</pre> Risultato di esempio: `d`  | 
|  max\$1by (x, y, n)   |  matrice< [same as x] >  |  Restituisce n valori di x associati al valore n più grande di tutti i valori di input di y in ordine decrescente di y. <pre>SELECT max_by(t.c1, t.c2, 2) FROM (VALUES (('a', 1)), (('b', 2)), (('c', 3)), (('d', 4))) AS t(c1, c2)</pre> Risultato di esempio: `[ d,c ]`  | 
|  min\$1by (x, y)  |  [uguale a x]  |  Restituisce il valore di x associato al valore minimo di y su tutti i valori di input. <pre>SELECT min_by(t.c1, t.c2) FROM (VALUES (('a', 1)), (('b', 2)), (('c', 3)), (('d', 4))) AS t(c1, c2)</pre> Risultato di esempio: `a`  | 
|  min\$1by (x, y, n)  |  matrice< [same as x] >  |  Restituisce n valori di x associati al valore n più piccolo di tutti i valori di input di y in ordine crescente di y. <pre>SELECT min_by(t.c1, t.c2, 2) FROM (VALUES (('a', 1)), (('b', 2)), (('c', 3)), (('d', 4))) AS t(c1, c2)</pre> Risultato di esempio: `[ a,b ]`  | 
|  max (x)  |  [uguale all'input]  |  Restituisce il valore massimo di tutti i valori di input. <pre>SELECT max(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Risultato di esempio: `4`  | 
|  max (x, n)  |  matrice< [same as x] >  |  Restituisce n valori più grandi di tutti i valori di input di x. <pre>SELECT max(t.c, 2) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Risultato di esempio: `[ 4,3 ]`  | 
|  min (x)  |  [uguale all'input]  |  Restituisce il valore minimo di tutti i valori di input. <pre>SELECT min(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Risultato di esempio: `1`  | 
|  min (x, n)  |  matrice< [same as x] >  |  Restituisce n valori più piccoli di tutti i valori di input di x. <pre>SELECT min(t.c, 2) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Risultato di esempio: `[ 1,2 ]`  | 
|  somma (x)   |  [uguale all'input]  |  Restituisce la somma di tutti i valori di input. <pre>SELECT sum(t.c) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Risultato di esempio: `10`  | 
|  bitwise\$1and\$1agg (x)  |  bigint  |  Restituisce l'AND bit per bit di tutti i valori di input nella rappresentazione del complemento a 2 secondi. <pre>SELECT bitwise_and_agg(t.c) FROM (VALUES 1, -3) AS t(c)</pre> Risultato di esempio: `1`  | 
|  bitwise\$1or\$1agg (x)  |  bigint  |  Restituisce l'OR bit per bit di tutti i valori di input nella rappresentazione del complemento a 2 secondi. <pre>SELECT bitwise_or_agg(t.c) FROM (VALUES 1, -3) AS t(c)</pre> Risultato di esempio: `-3`  | 
|  approx\$1distinct (x)   |  bigint  |  Restituisce il numero approssimativo di valori di input distinti. Questa funzione fornisce un'approssimazione del conteggio (DISTINCT x). Viene restituito zero se tutti i valori di input sono nulli. Questa funzione dovrebbe produrre un errore standard del 2,3%, che è la deviazione standard della distribuzione degli errori (approssimativamente normale) su tutti i set possibili. Non garantisce un limite massimo dell'errore per alcun set di input specifico. <pre>SELECT approx_distinct(t.c) FROM (VALUES 1, 2, 3, 4, 8) AS t(c)</pre> Risultato di esempio: `5`  | 
|  approx\$1distinct (x, e)  |  bigint  |  Restituisce il numero approssimativo di valori di input distinti. Questa funzione fornisce un'approssimazione del conteggio (DISTINCT x). Viene restituito zero se tutti i valori di input sono nulli. Questa funzione dovrebbe produrre un errore standard non superiore a e, che è la deviazione standard della distribuzione degli errori (approssimativamente normale) su tutti i set possibili. Non garantisce un limite massimo dell'errore per alcun set di input specifico. L'attuale implementazione di questa funzione richiede che e sia compreso nell'intervallo [0,0040625, 0,26000]. <pre>SELECT approx_distinct(t.c, 0.2) FROM (VALUES 1, 2, 3, 4, 8) AS t(c)</pre> Risultato di esempio: `5`  | 
|  approx\$1percentile (x, percentile)   |  [uguale a x]  |  Restituisce il percentile approssimativo per tutti i valori di input di x alla percentuale specificata. Il valore della percentuale deve essere compreso tra zero e uno e deve essere costante per tutte le righe di input. <pre>SELECT approx_percentile(t.c, 0.4) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Risultato di esempio: `2`  | 
|  approx\$1percentile (x, percentages)   |  matrice< [same as x] >  |  Restituisce il percentile approssimativo per tutti i valori di input di x per ciascuna delle percentuali specificate. Ogni elemento dell'array delle percentuali deve essere compreso tra zero e uno e l'array deve essere costante per tutte le righe di input. <pre>SELECT approx_percentile(t.c, ARRAY[0.1, 0.8, 0.8]) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Risultato di esempio: `[ 1,4,4 ]`  | 
|  approx\$1percentile (x, w, percentage)   |  [uguale a x]  |  Restituisce il percentile pesato approssimativo per tutti i valori di input di x utilizzando il peso per articolo w alla percentuale p. Il peso deve essere un valore intero di almeno uno. È effettivamente un conteggio delle repliche per il valore x nel set di percentili. Il valore di p deve essere compreso tra zero e uno e deve essere costante per tutte le righe di input. <pre>SELECT approx_percentile(t.c, 1, 0.1) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Risultato di esempio: `1`  | 
|  approx\$1percentile (x, w, percentuali)   |  matrice< [same as x] >  |  Restituisce il percentile pesato approssimativo per tutti i valori di input di x utilizzando il peso per articolo w in ciascuna delle percentuali specificate nell'array. Il peso deve essere un valore intero di almeno uno. È effettivamente un conteggio delle repliche per il valore x nel set di percentili. Ogni elemento dell'array deve essere compreso tra zero e uno e l'array deve essere costante per tutte le righe di input. <pre>SELECT approx_percentile(t.c, 1, ARRAY[0.1, 0.8, 0.8]) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Risultato di esempio: `[ 1,4,4 ]`  | 
|  approx\$1percentile (x, w, percentuale, precisione)  |  [uguale a x]  |  Restituisce il percentile pesato approssimativo per tutti i valori di input di x utilizzando il peso per articolo w alla percentuale p, con un errore di precisione massimo. Il peso deve essere un valore intero di almeno uno. È effettivamente un conteggio delle repliche per il valore x nel set di percentili. Il valore di p deve essere compreso tra zero e uno e deve essere costante per tutte le righe di input. La precisione deve essere un valore maggiore di zero e minore di uno e deve essere costante per tutte le righe di input. <pre>SELECT approx_percentile(t.c, 1, 0.1, 0.5) FROM (VALUES 1, 2, 3, 4) AS t(c)</pre> Risultato di esempio: `1`  | 
|  corr (y, x)  |  virgola mobile a doppia precisione  |  Restituisce il coefficiente di correlazione dei valori di input. <pre>SELECT corr(t.c1, t.c2) FROM (VALUES ((1, 1)), ((2, 2)), ((3, 3)), ((4, 4))) AS t(c1, c2)</pre> Risultato di esempio: `1.0`  | 
|  covar\$1pop (y, x)  |  virgola mobile a doppia precisione  |  Restituisce la covarianza della popolazione dei valori di input. <pre>SELECT covar_pop(t.c1, t.c2) FROM (VALUES ((1, 1)), ((2, 2)), ((3, 3)), ((4, 4))) AS t(c1, c2)</pre> Risultato di esempio: `1.25`  | 
|  covar\$1samp (y, x)   |  virgola mobile a doppia precisione  |  Restituisce la covarianza campionaria dei valori di input. <pre>SELECT covar_samp(t.c1, t.c2) FROM (VALUES ((1, 1)), ((2, 2)), ((3, 3)), ((4, 4))) AS t(c1, c2)</pre> Risultato di esempio: `1.6666666666666667`  | 
|  regr\$1intercept (y, x)  |  virgola mobile a doppia precisione  |  Restituisce l'intercetta di regressione lineare dei valori di ingresso. y è il valore dipendente. x è il valore indipendente. <pre>SELECT regr_intercept(t.c1, t.c2) FROM (VALUES ((1, 1)), ((2, 2)), ((3, 3)), ((4, 4))) AS t(c1, c2)</pre> Risultato di esempio: `0.0`  | 
|  regr\$1slope (y, x)  |  virgola mobile a doppia precisione  |  Restituisce la pendenza di regressione lineare dei valori di ingresso. y è il valore dipendente. x è il valore indipendente. <pre>SELECT regr_slope(t.c1, t.c2) FROM (VALUES ((1, 1)), ((2, 2)), ((3, 3)), ((4, 4))) AS t(c1, c2)</pre> Risultato di esempio: `1.0`  | 
|  asimmetria (x)  |  virgola mobile a doppia precisione  |  Restituisce l'asimmetria di tutti i valori di input. <pre>SELECT skewness(t.c1) FROM (VALUES 1, 2, 3, 4, 8) AS t(c1)</pre> Risultato di esempio: `0.8978957037987335`  | 
|  stddev\$1pop (x)  |  virgola mobile a doppia precisione  |  Restituisce la deviazione standard della popolazione di tutti i valori di input. <pre>SELECT stddev_pop(t.c1) FROM (VALUES 1, 2, 3, 4, 8) AS t(c1)</pre> Risultato di esempio: `2.4166091947189146`  | 
|  stddev\$1samp (x) stddev (x)  |  virgola mobile a doppia precisione  |  Restituisce la deviazione standard del campione di tutti i valori di input. <pre>SELECT stddev_samp(t.c1) FROM (VALUES 1, 2, 3, 4, 8) AS t(c1)</pre> Risultato di esempio: `2.701851217221259`  | 
|  var\$1pop (x)   |  virgola mobile a doppia precisione  |  Restituisce la varianza della popolazione di tutti i valori di input. <pre>SELECT var_pop(t.c1) FROM (VALUES 1, 2, 3, 4, 8) AS t(c1)</pre> Risultato di esempio: `5.840000000000001`  | 
|  var\$1samp (x) varianza (x)   |  virgola mobile a doppia precisione  |  Restituisce la varianza campionaria di tutti i valori di input. <pre>SELECT var_samp(t.c1) FROM (VALUES 1, 2, 3, 4, 8) AS t(c1)</pre> Risultato di esempio: `7.300000000000001`  | 

# Funzioni finestra
<a name="window-functions"></a>

Le funzioni della finestra eseguono calcoli tra le righe del risultato della query. Vengono eseguite dopo la clausola HAVING ma prima della clausola ORDER BY. L'invocazione di una funzione window richiede una sintassi speciale che utilizza la clausola OVER per specificare la finestra. Una finestra ha tre componenti:
+ La specifica della partizione, che separa le righe di input in partizioni diverse. Questo è analogo al modo in cui la clausola GROUP BY separa le righe in diversi gruppi per le funzioni aggregate.
+ La specifica di ordinamento, che determina l'ordine in cui le righe di input verranno elaborate dalla funzione finestra.
+ La cornice della finestra, che specifica una finestra scorrevole di righe che devono essere elaborate dalla funzione per una determinata riga. Se il frame non è specificato, il valore predefinito è RANGE UNBOUNDED PRECEDING, che è lo stesso di RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Questo frame contiene tutte le righe dall'inizio della partizione fino all'ultimo peer della riga corrente.

Tutte le funzioni aggregate possono essere utilizzate come funzioni di finestra aggiungendo la clausola OVER. La funzione di aggregazione viene calcolata per ogni riga sulle righe all'interno della cornice della finestra della riga corrente. Oltre alle funzioni aggregate, Timestream for LiveAnalytics supporta le seguenti funzioni di classificazione e valore.


| Funzione | Tipo di dati di output | Description | 
| --- | --- | --- | 
|  cume\$1dist ()  |  bigint  |  Restituisce la distribuzione cumulativa di un valore in un gruppo di valori. Il risultato è il numero di righe che precedono o coincidono con la riga nella partizione della finestra diviso per il numero totale di righe nella partizione della finestra. Pertanto, tutti i valori di parità presenti nell'ordinamento verranno restituiti allo stesso valore di distribuzione.  | 
|  dense\$1rank ()  |  bigint  |  Restituisce il rango di un valore in un gruppo di valori. È simile a rank (), tranne per il fatto che i valori di parità non producono spazi vuoti nella sequenza.  | 
|  intile (n)  |  bigint  |  Divide le righe per ogni partizione di finestra in n bucket che vanno da 1 a un massimo n. I valori del bucket differiranno al massimo di 1. Se il numero di righe nella partizione non si divide equamente nel numero di bucket, i valori rimanenti vengono distribuiti uno per bucket, a partire dal primo bucket.  | 
|  percent\$1rank ()  |  virgola mobile a doppia precisione  |  Restituisce la classificazione percentuale di un valore in un gruppo di valori. Il risultato è (r - 1)/(n - 1) dove r è il rango () della riga e n è il numero totale di righe nella partizione della finestra.  | 
|  rango ()  |  bigint  |  Restituisce il rango di un valore in un gruppo di valori. Il rango è uno più il numero di righe che precedono la riga che non sono uguali alla riga. Pertanto, i valori di parità nell'ordine produrranno lacune nella sequenza. La classificazione viene eseguita per ogni partizione di finestra.  | 
|  numero\$1riga ()  |  bigint  |  Restituisce un numero sequenziale univoco per ogni riga, a partire da uno, in base all'ordine delle righe all'interno della partizione della finestra.  | 
|  primo\$1valore (x)  |  [uguale all'input]  |  Restituisce il primo valore della finestra. Questa funzione è limitata alla cornice della finestra. La funzione accetta un'espressione o un obiettivo come parametro.  | 
|  last\$1value (x)  |  [uguale all'input]  |  Restituisce l'ultimo valore della finestra. Questa funzione è limitata alla cornice della finestra. La funzione accetta un'espressione o un obiettivo come parametro.  | 
|  nth\$1value (x, offset)  |  [uguale all'input]  |  Restituisce il valore all'offset specificato dall'inizio della finestra. Gli offset partono da 1. L'offset può essere qualsiasi espressione scalare. Se l'offset è nullo o maggiore del numero di valori nella finestra, viene restituito null. È un errore che l'offset sia zero o negativo. La funzione accetta un'espressione o un obiettivo come primo parametro.  | 
|  lead (x [, offset [, default\$1value]])  |  [uguale all'input]  |  Restituisce il valore nelle righe di offset dopo la riga corrente nella finestra. Gli offset iniziano da 0, che è la riga corrente. L'offset può essere qualsiasi espressione scalare. L'offset predefinito è 1. Se l'offset è nullo o maggiore della finestra, viene restituito il valore default\$1value o, se non è specificato, viene restituito null. La funzione accetta un'espressione o un obiettivo come primo parametro.  | 
|  lag (x [, offset [, valore\$1predefinito]])  |  [uguale all'input]  |  Restituisce il valore nelle righe di offset prima della riga corrente nella finestra Offsets start at 0, che è la riga corrente. L'offset può essere qualsiasi espressione scalare. L'offset predefinito è 1. Se l'offset è nullo o maggiore della finestra, viene restituito il valore default\$1value o, se non è specificato, viene restituito null. La funzione accetta un'espressione o un obiettivo come primo parametro.  | 

# Query di esempio
<a name="sample-queries"></a>

Questa sezione include esempi di casi d'uso del linguaggio di interrogazione LiveAnalytics di Timestream for.

**Topics**
+ [Interrogazioni semplici](sample-queries.basic-scenarios.md)
+ [Interrogazioni con funzioni di serie temporali](sample-queries.devops-scenarios.md)
+ [Interrogazioni con funzioni aggregate](sample-queries.iot-scenarios.md)

# Interrogazioni semplici
<a name="sample-queries.basic-scenarios"></a>

Di seguito vengono ottenuti i 10 punti dati aggiunti più di recente per una tabella.

```
SELECT * FROM <database_name>.<table_name>
ORDER BY time DESC
LIMIT 10
```

Di seguito vengono ottenuti i 5 punti dati più vecchi per una misura specifica.

```
SELECT * FROM <database_name>.<table_name>
WHERE measure_name = '<measure_name>'
ORDER BY time ASC
LIMIT 5
```

Quanto segue funziona con timestamp di granularità in nanosecondi.

```
SELECT now() AS time_now
, now() - (INTERVAL '12' HOUR) AS twelve_hour_earlier -- Compatibility with ANSI SQL 
, now() - 12h AS also_twelve_hour_earlier -- Convenient time interval literals
, ago(12h) AS twelve_hours_ago -- More convenience with time functionality
, bin(now(), 10m) AS time_binned -- Convenient time binning support
, ago(50ns) AS fifty_ns_ago -- Nanosecond support
, now() + (1h + 50ns) AS hour_fifty_ns_future
```

I valori di misura per i record con più misure sono identificati dal nome della colonna. I valori di misura per i record a misura singola sono identificati da`measure_value::<data_type>`, dove `<data_type>` è uno di`double`, `bigint``boolean`, o `varchar` come descritto in. [Tipi di dati supportati](supported-data-types.md) Per ulteriori informazioni su come vengono modellati i valori di misura, consulta [Tabella singola e tabelle multiple.](https://docs.aws.amazon.com/timestream/latest/developerguide/data-modeling.html#data-modeling-multiVsinglerecords)

Di seguito vengono recuperati i valori per una misura richiamata `speed` da record con più misure con un di. `measure_name` `IoTMulti-stats`

```
SELECT speed FROM <database_name>.<table_name> where measure_name = 'IoTMulti-stats'
```

Quanto segue recupera `double` i valori dai record a misura singola con un di. `measure_name` `load`

```
SELECT measure_value::double FROM <database_name>.<table_name> WHERE measure_name = 'load'
```

# Interrogazioni con funzioni di serie temporali
<a name="sample-queries.devops-scenarios"></a>

**Topics**
+ [Set di dati e interrogazioni di esempio](#sample-queries.devops-scenarios.example)

## Set di dati e interrogazioni di esempio
<a name="sample-queries.devops-scenarios.example"></a>

È possibile utilizzare Timestream per LiveAnalytics comprendere e migliorare le prestazioni e la disponibilità dei servizi e delle applicazioni. Di seguito è riportato un esempio di tabella e delle query di esempio eseguite su tale tabella. 

La tabella `ec2_metrics` memorizza i dati di telemetria, come l'utilizzo della CPU e altre metriche delle istanze EC2. È possibile visualizzare la tabella riportata di seguito.


| Orario | region | az | Hostname (Nome host) | measure\$1name | measure\$1value::double | measure\$1value::bigint | 
| --- | --- | --- | --- | --- | --- | --- | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1a  |  front-end 01  |  cpu\$1utilization  |  35.1  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1a  |  front-end 01  |  memory\$1utilization  |  5.3  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1a  |  front-end 01  |  network\$1bytes\$1in  |  null  |  1.500  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1a  |  front-end 01  |  network\$1bytes\$1out  |  null  |  6.700  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1b  |  front-end 02  |  cpu\$1utilization  |  38,5  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1b  |  front-end 02  |  memory\$1utilization  |  58,4  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1b  |  front-end 02  |  network\$1bytes\$1in  |  null  |  23.000  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1b  |  front-end 02  |  network\$1bytes\$1out  |  null  |  12.000  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1c  |  front-end 03  |  cpu\$1utilization  |  45.0  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1c  |  front-end 03  |  memory\$1utilization  |  65,8  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1c  |  front-end 03  |  network\$1bytes\$1in  |  null  |  15.000  | 
|  2019-12-04 19:00:00.000 000000  |  us-east-1  |  us-east-1c  |  front-end 03  |  network\$1bytes\$1out  |  null  |  836.000  | 
|  2019-12-04 19:00:05.000 000000  |  us-east-1  |  us-east-1a  |  front-end 01  |  cpu\$1utilization  |  55.2  |  null  | 
|  2019-12-04 19:00:05.000 000000  |  us-east-1  |  us-east-1a  |  front-end 01  |  memory\$1utilization  |  75.0  |  null  | 
|  2019-12-04 19:00:05.000 000000  |  us-east-1  |  us-east-1a  |  front-end 01  |  network\$1bytes\$1in  |  null  |  1.245  | 
|  2019-12-04 19:00:05.000 000000  |  us-east-1  |  us-east-1a  |  front-end 01  |  network\$1bytes\$1out  |  null  |  68.432  | 
|  2019-12-04 19:00:08000 000000  |  us-east-1  |  us-east-1b  |  front-end 02  |  cpu\$1utilization  |  65,6  |  null  | 
|  2019-12-04 19:00:08000 000000  |  us-east-1  |  us-east-1b  |  front-end 02  |  memory\$1utilization  |  85,3  |  null  | 
|  2019-12-04 19:00:08000 000000  |  us-east-1  |  us-east-1b  |  front-end 02  |  network\$1bytes\$1in  |  null  |  1.245  | 
|  2019-12-04 19:00:08000 000000  |  us-east-1  |  us-east-1b  |  front-end 02  |  network\$1bytes\$1out  |  null  |  68.432  | 
|  2019-12-04 19:00:20000 000000  |  us-east-1  |  us-east-1c  |  front-end 03  |  cpu\$1utilization  |  12.1  |  null  | 
|  2019-12-04 19:00:20000 000000  |  us-east-1  |  us-east-1c  |  front-end 03  |  memory\$1utilization  |  32,0  |  null  | 
|  2019-12-04 19:00:20000 000000  |  us-east-1  |  us-east-1c  |  front-end 03  |  network\$1bytes\$1in  |  null  |  1.400  | 
|  2019-12-04 19:00:20000 000000  |  us-east-1  |  us-east-1c  |  front-end 03  |  network\$1bytes\$1out  |  null  |  345  | 
|  2019-12-04 19:00:10.000 000000  |  us-east-1  |  us-east-1a  |  front-end 01  |  cpu\$1utilization  |  15.3  |  null  | 
|  2019-12-04 19:00:10.000 000000  |  us-east-1  |  us-east-1a  |  front-end 01  |  memory\$1utilization  |  35,4  |  null  | 
|  2019-12-04 19:00:10.000 000000  |  us-east-1  |  us-east-1a  |  front-end 01  |  network\$1bytes\$1in  |  null  |  23  | 
|  2019-12-04 19:00:10.000 000000  |  us-east-1  |  us-east-1a  |  front-end 01  |  network\$1bytes\$1out  |  null  |  0  | 
|  2019-12-04 19:00:16.000 000000  |  us-east-1  |  us-east-1b  |  front-end 02  |  cpu\$1utilization  |  44.0  |  null  | 
|  2019-12-04 19:00:16.000 000000  |  us-east-1  |  us-east-1b  |  front-end 02  |  memory\$1utilization  |  64.2  |  null  | 
|  2019-12-04 19:00:16000 000000  |  us-east-1  |  us-east-1b  |  front-end 02  |  network\$1bytes\$1in  |  null  |  1.450  | 
|  2019-12-04 19:00:16000 000000  |  us-east-1  |  us-east-1b  |  front-end 02  |  network\$1bytes\$1out  |  null  |  200  | 
|  2019-12-04 19:00:40.000 000000  |  us-east-1  |  us-east-1c  |  front-end 03  |  cpu\$1utilization  |  6.4  |  null  | 
|  2019-12-04 19:00:40,000 000000  |  us-east-1  |  us-east-1c  |  front-end 03  |  memory\$1utilization  |  86,3  |  null  | 
|  2019-12-04 19:00:40,000 000000  |  us-east-1  |  us-east-1c  |  front-end 03  |  network\$1bytes\$1in  |  null  |  300  | 
|  2019-12-04 19:00:40.000 000000  |  us-east-1  |  us-east-1c  |  front-end 03  |  network\$1bytes\$1out  |  null  |  423  | 

Trova l'utilizzo medio della CPU p90, p95 e p99 per uno specifico host EC2 nelle ultime 2 ore:

```
SELECT region, az, hostname, BIN(time, 15s) AS binned_timestamp,
    ROUND(AVG(measure_value::double), 2) AS avg_cpu_utilization,
    ROUND(APPROX_PERCENTILE(measure_value::double, 0.9), 2) AS p90_cpu_utilization,
    ROUND(APPROX_PERCENTILE(measure_value::double, 0.95), 2) AS p95_cpu_utilization,
    ROUND(APPROX_PERCENTILE(measure_value::double, 0.99), 2) AS p99_cpu_utilization
FROM "sampleDB".DevOps
WHERE measure_name = 'cpu_utilization'
    AND hostname = 'host-Hovjv'
    AND time > ago(2h)
GROUP BY region, hostname, az, BIN(time, 15s)
ORDER BY binned_timestamp ASC
```

Identifica gli host EC2 con un utilizzo della CPU superiore del 10% o più rispetto all'utilizzo medio della CPU dell'intera flotta nelle ultime 2 ore:

```
WITH avg_fleet_utilization AS (
    SELECT COUNT(DISTINCT hostname) AS total_host_count, AVG(measure_value::double) AS fleet_avg_cpu_utilization
    FROM "sampleDB".DevOps
    WHERE measure_name = 'cpu_utilization'
        AND time > ago(2h)
), avg_per_host_cpu AS (
    SELECT region, az, hostname, AVG(measure_value::double) AS avg_cpu_utilization
    FROM "sampleDB".DevOps
    WHERE measure_name = 'cpu_utilization'
        AND time > ago(2h)
    GROUP BY region, az, hostname
)
SELECT region, az, hostname, avg_cpu_utilization, fleet_avg_cpu_utilization
FROM avg_fleet_utilization, avg_per_host_cpu
WHERE avg_cpu_utilization > 1.1 * fleet_avg_cpu_utilization
ORDER BY avg_cpu_utilization DESC
```

Trova l'utilizzo medio della CPU suddiviso a intervalli di 30 secondi per uno specifico host EC2 nelle ultime 2 ore:

```
SELECT BIN(time, 30s) AS binned_timestamp, ROUND(AVG(measure_value::double), 2) AS avg_cpu_utilization
FROM "sampleDB".DevOps
WHERE measure_name = 'cpu_utilization'
    AND hostname = 'host-Hovjv'
    AND time > ago(2h)
GROUP BY hostname, BIN(time, 30s)
ORDER BY binned_timestamp ASC
```

Trova l'utilizzo medio della CPU eseguito a intervalli di 30 secondi per uno specifico host EC2 nelle ultime 2 ore, inserendo i valori mancanti utilizzando l'interpolazione lineare:

```
WITH binned_timeseries AS (
    SELECT hostname, BIN(time, 30s) AS binned_timestamp, ROUND(AVG(measure_value::double), 2) AS avg_cpu_utilization
    FROM "sampleDB".DevOps
    WHERE measure_name = 'cpu_utilization'
        AND hostname = 'host-Hovjv'
        AND time > ago(2h)
    GROUP BY hostname, BIN(time, 30s)
), interpolated_timeseries AS (
    SELECT hostname,
        INTERPOLATE_LINEAR(
            CREATE_TIME_SERIES(binned_timestamp, avg_cpu_utilization),
                SEQUENCE(min(binned_timestamp), max(binned_timestamp), 15s)) AS interpolated_avg_cpu_utilization
    FROM binned_timeseries
    GROUP BY hostname
)
SELECT time, ROUND(value, 2) AS interpolated_cpu
FROM interpolated_timeseries
CROSS JOIN UNNEST(interpolated_avg_cpu_utilization)
```

Trova l'utilizzo medio della CPU eseguito a intervalli di 30 secondi per uno specifico host EC2 nelle ultime 2 ore, inserendo i valori mancanti utilizzando l'interpolazione basata sull'ultima osservazione riportata:

```
WITH binned_timeseries AS (
    SELECT hostname, BIN(time, 30s) AS binned_timestamp, ROUND(AVG(measure_value::double), 2) AS avg_cpu_utilization
    FROM "sampleDB".DevOps
    WHERE measure_name = 'cpu_utilization'
        AND hostname = 'host-Hovjv'
        AND time > ago(2h)
    GROUP BY hostname, BIN(time, 30s)
), interpolated_timeseries AS (
    SELECT hostname,
        INTERPOLATE_LOCF(
            CREATE_TIME_SERIES(binned_timestamp, avg_cpu_utilization),
                SEQUENCE(min(binned_timestamp), max(binned_timestamp), 15s)) AS interpolated_avg_cpu_utilization
    FROM binned_timeseries
    GROUP BY hostname
)
SELECT time, ROUND(value, 2) AS interpolated_cpu
FROM interpolated_timeseries
CROSS JOIN UNNEST(interpolated_avg_cpu_utilization)
```

# Interrogazioni con funzioni aggregate
<a name="sample-queries.iot-scenarios"></a>

Di seguito è riportato un esempio di set di dati di esempio di scenario IoT per illustrare le query con funzioni aggregate.

**Topics**
+ [Dati di esempio](#sample-queries.iot-scenarios.example-data)
+ [Query di esempio](#sample-queries.iot-scenarios.example-queries)

## Dati di esempio
<a name="sample-queries.iot-scenarios.example-data"></a>

Timestream consente di archiviare e analizzare i dati dei sensori IoT come la posizione, il consumo di carburante, la velocità e la capacità di carico di una o più flotte di camion per consentire una gestione efficace della flotta. Di seguito sono riportati lo schema e alcuni dati di una tabella iot\$1trucks che memorizza dati di telemetria come posizione, consumo di carburante, velocità e capacità di carico dei camion.


| Orario | truck\$1id | Make | Modello | Parco istanze | capacità\$1carburante | capacità\$1di carico | measure\$1name | measure\$1value::double | measure\$1value::varchar | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
|  2019-12-04 19:00:00.000 000000  |  123456781  |  GMC  |  Astro  |  Alpha (Afa)  |  100  |  500  |  fuel\$1reading  |  65,2  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  123456781  |  GMC  |  Astro  |  Alpha (Afa)  |  100  |  500  |  caricare  |  400,0  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  123456781  |  GMC  |  Astro  |  Alpha (Afa)  |  100  |  500  |  speed  |  90,2  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  123456781  |  GMC  |  Astro  |  Alpha (Afa)  |  100  |  500  |  location  |  null  |  47,6062 NM, 122.321 W  | 
|  2019-12-04 19:00:00.000 000000  |  123456782  |  Kenworth  |  W900  |  Alpha (Afa)  |  150  |  1000  |  lettura del carburante  |  10.1  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  123456782  |  Kenworth  |  W900  |  Alpha (Afa)  |  150  |  1000  |  caricare  |  950,3  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  123456782  |  Kenworth  |  W900  |  Alpha (Afa)  |  150  |  1000  |  speed  |  50,8  |  null  | 
|  2019-12-04 19:00:00.000 000000  |  123456782  |  Kenworth  |  W900  |  Alpha (Afa)  |  150  |  1000  |  location  |  null  |  40.7128 gradi N, 74.0060 gradi W  | 

## Query di esempio
<a name="sample-queries.iot-scenarios.example-queries"></a>

Ottieni un elenco di tutti gli attributi e i valori dei sensori monitorati per ogni camion della flotta.

```
SELECT
    truck_id,
    fleet,
    fuel_capacity,
    model,
    load_capacity,
    make,
    measure_name
FROM "sampleDB".IoT
GROUP BY truck_id, fleet, fuel_capacity, model, load_capacity, make, measure_name
```

Ottieni i dati più recenti relativi al carburante di ogni camion della flotta nelle ultime 24 ore.

```
WITH latest_recorded_time AS (
    SELECT
        truck_id,
        max(time) as latest_time
    FROM "sampleDB".IoT
    WHERE measure_name = 'fuel-reading'
    AND time >= ago(24h)
    GROUP BY truck_id
)
SELECT
    b.truck_id,
    b.fleet,
    b.make,
    b.model,
    b.time,
    b.measure_value::double as last_reported_fuel_reading
FROM
latest_recorded_time a INNER JOIN "sampleDB".IoT b
ON a.truck_id = b.truck_id AND b.time = a.latest_time
WHERE b.measure_name = 'fuel-reading'
AND b.time > ago(24h)
ORDER BY b.truck_id
```

Identifica i camion che hanno utilizzato poco carburante (meno del 10%) nelle ultime 48 ore:

```
WITH low_fuel_trucks AS (
    SELECT time, truck_id, fleet, make, model, (measure_value::double/cast(fuel_capacity as double)*100) AS fuel_pct
    FROM "sampleDB".IoT
    WHERE time >= ago(48h)
    AND (measure_value::double/cast(fuel_capacity as double)*100) < 10
    AND measure_name = 'fuel-reading'
),
other_trucks AS (
SELECT time, truck_id, (measure_value::double/cast(fuel_capacity as double)*100) as remaining_fuel
    FROM "sampleDB".IoT
    WHERE time >= ago(48h)
    AND truck_id IN (SELECT truck_id FROM low_fuel_trucks)
    AND (measure_value::double/cast(fuel_capacity as double)*100) >= 10
    AND measure_name = 'fuel-reading'
),
trucks_that_refuelled AS (
    SELECT a.truck_id
    FROM low_fuel_trucks a JOIN other_trucks b
    ON a.truck_id = b.truck_id AND b.time >= a.time
)
SELECT DISTINCT truck_id, fleet, make, model, fuel_pct
FROM low_fuel_trucks
WHERE truck_id NOT IN (
    SELECT truck_id FROM trucks_that_refuelled
)
```

Calcola il carico medio e la velocità massima di ogni camion nell'ultima settimana:

```
SELECT
    bin(time, 1d) as binned_time,
    fleet,
    truck_id,
    make,
    model,
    AVG(
        CASE WHEN measure_name = 'load' THEN measure_value::double ELSE NULL END
    ) AS avg_load_tons,
    MAX(
        CASE WHEN measure_name = 'speed' THEN measure_value::double ELSE NULL END
    ) AS max_speed_mph
FROM "sampleDB".IoT
WHERE time >= ago(7d)
AND measure_name IN ('load', 'speed')
GROUP BY fleet, truck_id, make, model, bin(time, 1d)
ORDER BY truck_id
```

Calcola l'efficienza di carico di ogni camion nell'ultima settimana:

```
WITH average_load_per_truck AS (
    SELECT
        truck_id,
        avg(measure_value::double)  AS avg_load
    FROM "sampleDB".IoT
    WHERE measure_name = 'load'
    AND time >= ago(7d)
    GROUP BY truck_id, fleet, load_capacity, make, model
),
truck_load_efficiency AS (
    SELECT
        a.truck_id,
        fleet,
        load_capacity,
        make,
        model,
        avg_load,
        measure_value::double,
        time,
        (measure_value::double*100)/avg_load as load_efficiency -- , approx_percentile(avg_load_pct, DOUBLE '0.9')
    FROM "sampleDB".IoT a JOIN average_load_per_truck b
    ON a.truck_id = b.truck_id
    WHERE a.measure_name = 'load'
)
SELECT
    truck_id,
    time,
    load_efficiency
FROM truck_load_efficiency
ORDER BY truck_id, time
```

# Guida di riferimento alle API
<a name="API_Reference"></a>

Questa sezione contiene la documentazione di riferimento delle API per Amazon Timestream. 

Timestream ne ha due APIs: Query e Write.
+ L'**API Write** consente di eseguire operazioni come la creazione di tabelle, l'etichettatura delle risorse e la scrittura di record su Timestream.
+ L'**API Query** consente di eseguire operazioni di interrogazione.

**Nota**  
Entrambi APIs includono l' DescribeEndpoints azione. *Sia per Query che per Write, l' DescribeEndpoints azione è identica.*

Di seguito puoi leggere ulteriori informazioni su ciascuna API, insieme ai tipi di dati, agli errori e ai parametri comuni.

**Nota**  
Per i codici di errore comuni a tutti i AWS servizi, consulta la [sezione AWS Support](https://docs.aws.amazon.com/awssupport/latest/APIReference/CommonErrors.html). 

**Topics**
+ [Operazioni](API_Operations.md)
+ [Tipi di dati](API_Types.md)
+ [Tipi di errore comuni](CommonErrors.md)
+ [Parametri comuni](CommonParameters.md)

# Operazioni
<a name="API_Operations"></a>

Le seguenti azioni sono supportate da Amazon Timestream Write:
+  [CreateBatchLoadTask](API_CreateBatchLoadTask.md) 
+  [CreateDatabase](API_CreateDatabase.md) 
+  [CreateTable](API_CreateTable.md) 
+  [DeleteDatabase](API_DeleteDatabase.md) 
+  [DeleteTable](API_DeleteTable.md) 
+  [DescribeBatchLoadTask](API_DescribeBatchLoadTask.md) 
+  [DescribeDatabase](API_DescribeDatabase.md) 
+  [DescribeEndpoints](API_DescribeEndpoints.md) 
+  [DescribeTable](API_DescribeTable.md) 
+  [ListBatchLoadTasks](API_ListBatchLoadTasks.md) 
+  [ListDatabases](API_ListDatabases.md) 
+  [ListTables](API_ListTables.md) 
+  [ListTagsForResource](API_ListTagsForResource.md) 
+  [ResumeBatchLoadTask](API_ResumeBatchLoadTask.md) 
+  [TagResource](API_TagResource.md) 
+  [UntagResource](API_UntagResource.md) 
+  [UpdateDatabase](API_UpdateDatabase.md) 
+  [UpdateTable](API_UpdateTable.md) 
+  [WriteRecords](API_WriteRecords.md) 

Le seguenti azioni sono supportate da Amazon Timestream Query:
+  [CancelQuery](API_query_CancelQuery.md) 
+  [CreateScheduledQuery](API_query_CreateScheduledQuery.md) 
+  [DeleteScheduledQuery](API_query_DeleteScheduledQuery.md) 
+  [DescribeAccountSettings](API_query_DescribeAccountSettings.md) 
+  [DescribeEndpoints](API_query_DescribeEndpoints.md) 
+  [DescribeScheduledQuery](API_query_DescribeScheduledQuery.md) 
+  [ExecuteScheduledQuery](API_query_ExecuteScheduledQuery.md) 
+  [ListScheduledQueries](API_query_ListScheduledQueries.md) 
+  [ListTagsForResource](API_query_ListTagsForResource.md) 
+  [PrepareQuery](API_query_PrepareQuery.md) 
+  [Query](API_query_Query.md) 
+  [TagResource](API_query_TagResource.md) 
+  [UntagResource](API_query_UntagResource.md) 
+  [UpdateAccountSettings](API_query_UpdateAccountSettings.md) 
+  [UpdateScheduledQuery](API_query_UpdateScheduledQuery.md) 

# Amazon Timestream Write
<a name="API_Operations_Amazon_Timestream_Write"></a>

Le seguenti azioni sono supportate da Amazon Timestream Write:
+  [CreateBatchLoadTask](API_CreateBatchLoadTask.md) 
+  [CreateDatabase](API_CreateDatabase.md) 
+  [CreateTable](API_CreateTable.md) 
+  [DeleteDatabase](API_DeleteDatabase.md) 
+  [DeleteTable](API_DeleteTable.md) 
+  [DescribeBatchLoadTask](API_DescribeBatchLoadTask.md) 
+  [DescribeDatabase](API_DescribeDatabase.md) 
+  [DescribeEndpoints](API_DescribeEndpoints.md) 
+  [DescribeTable](API_DescribeTable.md) 
+  [ListBatchLoadTasks](API_ListBatchLoadTasks.md) 
+  [ListDatabases](API_ListDatabases.md) 
+  [ListTables](API_ListTables.md) 
+  [ListTagsForResource](API_ListTagsForResource.md) 
+  [ResumeBatchLoadTask](API_ResumeBatchLoadTask.md) 
+  [TagResource](API_TagResource.md) 
+  [UntagResource](API_UntagResource.md) 
+  [UpdateDatabase](API_UpdateDatabase.md) 
+  [UpdateTable](API_UpdateTable.md) 
+  [WriteRecords](API_WriteRecords.md) 

# CreateBatchLoadTask
<a name="API_CreateBatchLoadTask"></a>

Crea una nuova attività di caricamento batch Timestream. Un'attività di caricamento in batch elabora i dati da un'origine CSV in una posizione S3 e li scrive in una tabella Timestream. Una mappatura dall'origine alla destinazione è definita in un'attività di caricamento in batch. Gli errori e gli eventi vengono scritti in un report in una posizione S3. Per il report, se la AWS KMS chiave non è specificata, il report verrà crittografato con una chiave gestita S3, se `SSE_S3` possibile. Altrimenti viene generato un errore. Per ulteriori informazioni, consulta le [AWS chiavi gestite da](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) . [Si applicano le quote di servizio](https://docs.aws.amazon.com/timestream/latest/developerguide/ts-limits.html). Per i dettagli, vedi [esempio di codice](https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.create-batch-load.html).

## Sintassi della richiesta
<a name="API_CreateBatchLoadTask_RequestSyntax"></a>

```
{
   "ClientToken": "string",
   "DataModelConfiguration": { 
      "DataModel": { 
         "DimensionMappings": [ 
            { 
               "DestinationColumn": "string",
               "SourceColumn": "string"
            }
         ],
         "MeasureNameColumn": "string",
         "MixedMeasureMappings": [ 
            { 
               "MeasureName": "string",
               "MeasureValueType": "string",
               "MultiMeasureAttributeMappings": [ 
                  { 
                     "MeasureValueType": "string",
                     "SourceColumn": "string",
                     "TargetMultiMeasureAttributeName": "string"
                  }
               ],
               "SourceColumn": "string",
               "TargetMeasureName": "string"
            }
         ],
         "MultiMeasureMappings": { 
            "MultiMeasureAttributeMappings": [ 
               { 
                  "MeasureValueType": "string",
                  "SourceColumn": "string",
                  "TargetMultiMeasureAttributeName": "string"
               }
            ],
            "TargetMultiMeasureName": "string"
         },
         "TimeColumn": "string",
         "TimeUnit": "string"
      },
      "DataModelS3Configuration": { 
         "BucketName": "string",
         "ObjectKey": "string"
      }
   },
   "DataSourceConfiguration": { 
      "CsvConfiguration": { 
         "ColumnSeparator": "string",
         "EscapeChar": "string",
         "NullValue": "string",
         "QuoteChar": "string",
         "TrimWhiteSpace": boolean
      },
      "DataFormat": "string",
      "DataSourceS3Configuration": { 
         "BucketName": "string",
         "ObjectKeyPrefix": "string"
      }
   },
   "RecordVersion": number,
   "ReportConfiguration": { 
      "ReportS3Configuration": { 
         "BucketName": "string",
         "EncryptionOption": "string",
         "KmsKeyId": "string",
         "ObjectKeyPrefix": "string"
      }
   },
   "TargetDatabaseName": "string",
   "TargetTableName": "string"
}
```

## Parametri della richiesta
<a name="API_CreateBatchLoadTask_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [ClientToken](#API_CreateBatchLoadTask_RequestSyntax) **   <a name="timestream-CreateBatchLoadTask-request-ClientToken"></a>
  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 64 caratteri.  
Obbligatorio: no

 ** [DataModelConfiguration](#API_CreateBatchLoadTask_RequestSyntax) **   <a name="timestream-CreateBatchLoadTask-request-DataModelConfiguration"></a>
  
Tipo: oggetto [DataModelConfiguration](API_DataModelConfiguration.md)  
Obbligatorio: no

 ** [DataSourceConfiguration](#API_CreateBatchLoadTask_RequestSyntax) **   <a name="timestream-CreateBatchLoadTask-request-DataSourceConfiguration"></a>
Definisce i dettagli di configurazione sull'origine dati per un'attività di caricamento in batch.  
Tipo: oggetto [DataSourceConfiguration](API_DataSourceConfiguration.md)  
Obbligatorio: sì

 ** [RecordVersion](#API_CreateBatchLoadTask_RequestSyntax) **   <a name="timestream-CreateBatchLoadTask-request-RecordVersion"></a>
  
Tipo: long  
Obbligatorio: no

 ** [ReportConfiguration](#API_CreateBatchLoadTask_RequestSyntax) **   <a name="timestream-CreateBatchLoadTask-request-ReportConfiguration"></a>
Configurazione del report per un'attività di caricamento in batch. Contiene dettagli sulla posizione in cui vengono archiviate le segnalazioni di errori.  
Tipo: oggetto [ReportConfiguration](API_ReportConfiguration.md)  
Obbligatorio: sì

 ** [TargetDatabaseName](#API_CreateBatchLoadTask_RequestSyntax) **   <a name="timestream-CreateBatchLoadTask-request-TargetDatabaseName"></a>
Database Target Timestream per un'attività di caricamento in batch.  
Tipo: stringa  
Modello: `[a-zA-Z0-9_.-]+`   
Obbligatorio: sì

 ** [TargetTableName](#API_CreateBatchLoadTask_RequestSyntax) **   <a name="timestream-CreateBatchLoadTask-request-TargetTableName"></a>
Tabella Target Timestream per un'attività di caricamento in batch.  
Tipo: stringa  
Modello: `[a-zA-Z0-9_.-]+`   
Obbligatorio: sì

## Sintassi della risposta
<a name="API_CreateBatchLoadTask_ResponseSyntax"></a>

```
{
   "TaskId": "string"
}
```

## Elementi di risposta
<a name="API_CreateBatchLoadTask_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [TaskId](#API_CreateBatchLoadTask_ResponseSyntax) **   <a name="timestream-CreateBatchLoadTask-response-TaskId"></a>
L'ID dell'operazione di caricamento in batch.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 32 caratteri.  
Modello: `[A-Z0-9]+` 

## Errori
<a name="API_CreateBatchLoadTask_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non sei autorizzato a eseguire questa azione.  
Codice di stato HTTP: 400

 ** ConflictException **   
Timestream non è stato in grado di elaborare questa richiesta perché contiene risorse già esistenti.  
Codice di stato HTTP: 400

 ** InternalServerException **   
 Timestream non è stato in grado di elaborare completamente questa richiesta a causa di un errore interno del server.  
Codice di stato HTTP: 500

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
L'operazione ha tentato di accedere a una risorsa inesistente. La risorsa potrebbe non essere specificata correttamente o il suo stato potrebbe non essere ATTIVO.  
Codice di stato HTTP: 400

 ** ServiceQuotaExceededException **   
 La quota di risorse dell'istanza è stata superata per questo account.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_CreateBatchLoadTask_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/CreateBatchLoadTask) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/CreateBatchLoadTask) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/CreateBatchLoadTask) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/CreateBatchLoadTask) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/CreateBatchLoadTask) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/CreateBatchLoadTask) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/CreateBatchLoadTask) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/CreateBatchLoadTask) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/CreateBatchLoadTask) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/CreateBatchLoadTask) 

# CreateDatabase
<a name="API_CreateDatabase"></a>

Crea un nuovo database Timestream. Se la AWS KMS chiave non è specificata, il database verrà crittografato con una AWS KMS chiave gestita Timestream situata nel tuo account. Per ulteriori informazioni, consulta le [AWS chiavi gestite da](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) . [Si applicano le quote di servizio](https://docs.aws.amazon.com/timestream/latest/developerguide/ts-limits.html). Per i dettagli, consulta l'esempio di [codice.](https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.create-db.html) 

## Sintassi della richiesta
<a name="API_CreateDatabase_RequestSyntax"></a>

```
{
   "DatabaseName": "string",
   "KmsKeyId": "string",
   "Tags": [ 
      { 
         "Key": "string",
         "Value": "string"
      }
   ]
}
```

## Parametri della richiesta
<a name="API_CreateDatabase_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [DatabaseName](#API_CreateDatabase_RequestSyntax) **   <a name="timestream-CreateDatabase-request-DatabaseName"></a>
Nome del database Timestream.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 256 caratteri.  
Modello: `[a-zA-Z0-9_.-]+`   
Obbligatorio: sì

 ** [KmsKeyId](#API_CreateDatabase_RequestSyntax) **   <a name="timestream-CreateDatabase-request-KmsKeyId"></a>
La AWS KMS chiave per il database. Se la AWS KMS chiave non è specificata, il database verrà crittografato con una AWS KMS chiave gestita da Timestream situata nel tuo account. Per ulteriori informazioni, consulta le [AWS chiavi gestite da](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) .  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Obbligatorio: no

 ** [Tags](#API_CreateDatabase_RequestSyntax) **   <a name="timestream-CreateDatabase-request-Tags"></a>
 Un elenco di coppie chiave-valore per etichettare la tabella.   
Tipo: matrice di oggetti [Tag](API_Tag.md)  
Membri dell'array: numero minimo di 0 elementi. Numero massimo di 200 elementi.  
Obbligatorio: no

## Sintassi della risposta
<a name="API_CreateDatabase_ResponseSyntax"></a>

```
{
   "Database": { 
      "Arn": "string",
      "CreationTime": number,
      "DatabaseName": "string",
      "KmsKeyId": "string",
      "LastUpdatedTime": number,
      "TableCount": number
   }
}
```

## Elementi di risposta
<a name="API_CreateDatabase_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [Database](#API_CreateDatabase_ResponseSyntax) **   <a name="timestream-CreateDatabase-response-Database"></a>
Il database Timestream appena creato.  
Tipo: oggetto [Database](API_Database.md)

## Errori
<a name="API_CreateDatabase_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non sei autorizzato a eseguire questa azione.  
Codice di stato HTTP: 400

 ** ConflictException **   
Timestream non è stato in grado di elaborare questa richiesta perché contiene risorse già esistenti.  
Codice di stato HTTP: 400

 ** InternalServerException **   
 Timestream non è stato in grado di elaborare completamente questa richiesta a causa di un errore interno del server.  
Codice di stato HTTP: 500

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** ServiceQuotaExceededException **   
 La quota di risorse dell'istanza è stata superata per questo account.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_CreateDatabase_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/CreateDatabase) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/CreateDatabase) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/CreateDatabase) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/CreateDatabase) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/CreateDatabase) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/CreateDatabase) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/CreateDatabase) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/CreateDatabase) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/CreateDatabase) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/CreateDatabase) 

# CreateTable
<a name="API_CreateTable"></a>

Aggiunge una nuova tabella a un database esistente nel tuo account. In un Account AWS, i nomi delle tabelle devono essere almeno univoci all'interno di ogni regione se si trovano nello stesso database. Potresti avere nomi di tabella identici nella stessa regione se le tabelle si trovano in database separati. Durante la creazione della tabella, è necessario specificare il nome della tabella, il nome del database e le proprietà di conservazione. [Si applicano le quote di servizio](https://docs.aws.amazon.com/timestream/latest/developerguide/ts-limits.html). Consulta l'[esempio di codice](https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.create-table.html) per i dettagli. 

## Sintassi della richiesta
<a name="API_CreateTable_RequestSyntax"></a>

```
{
   "DatabaseName": "string",
   "MagneticStoreWriteProperties": { 
      "EnableMagneticStoreWrites": boolean,
      "MagneticStoreRejectedDataLocation": { 
         "S3Configuration": { 
            "BucketName": "string",
            "EncryptionOption": "string",
            "KmsKeyId": "string",
            "ObjectKeyPrefix": "string"
         }
      }
   },
   "RetentionProperties": { 
      "MagneticStoreRetentionPeriodInDays": number,
      "MemoryStoreRetentionPeriodInHours": number
   },
   "Schema": { 
      "CompositePartitionKey": [ 
         { 
            "EnforcementInRecord": "string",
            "Name": "string",
            "Type": "string"
         }
      ]
   },
   "TableName": "string",
   "Tags": [ 
      { 
         "Key": "string",
         "Value": "string"
      }
   ]
}
```

## Parametri della richiesta
<a name="API_CreateTable_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [DatabaseName](#API_CreateTable_RequestSyntax) **   <a name="timestream-CreateTable-request-DatabaseName"></a>
Nome del database Timestream.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 256 caratteri.  
Modello: `[a-zA-Z0-9_.-]+`   
Obbligatorio: sì

 ** [MagneticStoreWriteProperties](#API_CreateTable_RequestSyntax) **   <a name="timestream-CreateTable-request-MagneticStoreWriteProperties"></a>
Contiene le proprietà da impostare nella tabella quando si abilitano le scritture dello store magnetico.  
Tipo: oggetto [MagneticStoreWriteProperties](API_MagneticStoreWriteProperties.md)  
Obbligatorio: no

 ** [RetentionProperties](#API_CreateTable_RequestSyntax) **   <a name="timestream-CreateTable-request-RetentionProperties"></a>
La durata per la quale i dati delle serie temporali devono essere archiviati nell'archivio di memoria e nell'archivio magnetico.  
Tipo: oggetto [RetentionProperties](API_RetentionProperties.md)  
Obbligatorio: no

 ** [Schema](#API_CreateTable_RequestSyntax) **   <a name="timestream-CreateTable-request-Schema"></a>
 Lo schema della tabella.   
Tipo: oggetto [Schema](API_Schema.md)  
Obbligatorio: no

 ** [TableName](#API_CreateTable_RequestSyntax) **   <a name="timestream-CreateTable-request-TableName"></a>
Nome della tabella Timestream.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 256 caratteri.  
Modello: `[a-zA-Z0-9_.-]+`   
Obbligatorio: sì

 ** [Tags](#API_CreateTable_RequestSyntax) **   <a name="timestream-CreateTable-request-Tags"></a>
 Un elenco di coppie chiave-valore per etichettare la tabella.   
Tipo: matrice di oggetti [Tag](API_Tag.md)  
Membri dell'array: numero minimo di 0 elementi. Numero massimo di 200 elementi.  
Obbligatorio: no

## Sintassi della risposta
<a name="API_CreateTable_ResponseSyntax"></a>

```
{
   "Table": { 
      "Arn": "string",
      "CreationTime": number,
      "DatabaseName": "string",
      "LastUpdatedTime": number,
      "MagneticStoreWriteProperties": { 
         "EnableMagneticStoreWrites": boolean,
         "MagneticStoreRejectedDataLocation": { 
            "S3Configuration": { 
               "BucketName": "string",
               "EncryptionOption": "string",
               "KmsKeyId": "string",
               "ObjectKeyPrefix": "string"
            }
         }
      },
      "RetentionProperties": { 
         "MagneticStoreRetentionPeriodInDays": number,
         "MemoryStoreRetentionPeriodInHours": number
      },
      "Schema": { 
         "CompositePartitionKey": [ 
            { 
               "EnforcementInRecord": "string",
               "Name": "string",
               "Type": "string"
            }
         ]
      },
      "TableName": "string",
      "TableStatus": "string"
   }
}
```

## Elementi di risposta
<a name="API_CreateTable_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [Table](#API_CreateTable_ResponseSyntax) **   <a name="timestream-CreateTable-response-Table"></a>
La tabella Timestream appena creata.  
Tipo: oggetto [Table](API_Table.md)

## Errori
<a name="API_CreateTable_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non sei autorizzato a eseguire questa azione.  
Codice di stato HTTP: 400

 ** ConflictException **   
Timestream non è stato in grado di elaborare questa richiesta perché contiene risorse già esistenti.  
Codice di stato HTTP: 400

 ** InternalServerException **   
 Timestream non è stato in grado di elaborare completamente questa richiesta a causa di un errore interno del server.  
Codice di stato HTTP: 500

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
L'operazione ha tentato di accedere a una risorsa inesistente. La risorsa potrebbe non essere specificata correttamente o il suo stato potrebbe non essere ATTIVO.  
Codice di stato HTTP: 400

 ** ServiceQuotaExceededException **   
 La quota di risorse dell'istanza è stata superata per questo account.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_CreateTable_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/CreateTable) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/CreateTable) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/CreateTable) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/CreateTable) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/CreateTable) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/CreateTable) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/CreateTable) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/CreateTable) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/CreateTable) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/CreateTable) 

# DeleteDatabase
<a name="API_DeleteDatabase"></a>

Elimina un determinato database Timestream. *Si tratta di un'operazione irreversibile. Dopo l'eliminazione di un database, i dati delle serie temporali dalle relative tabelle non possono essere recuperati.* 

**Nota**  
Tutte le tabelle del database devono essere prima eliminate, altrimenti verrà ValidationException generato un errore.   
A causa della natura dei tentativi distribuiti, l'operazione può restituire un risultato positivo o un. ResourceNotFoundException I clienti dovrebbero considerarli equivalenti.

Consulta l'[esempio di codice](https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.delete-db.html) per i dettagli.

## Sintassi della richiesta
<a name="API_DeleteDatabase_RequestSyntax"></a>

```
{
   "DatabaseName": "string"
}
```

## Parametri della richiesta
<a name="API_DeleteDatabase_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [DatabaseName](#API_DeleteDatabase_RequestSyntax) **   <a name="timestream-DeleteDatabase-request-DatabaseName"></a>
Il nome del database Timestream da eliminare.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 256 caratteri.  
Obbligatorio: sì

## Elementi di risposta
<a name="API_DeleteDatabase_ResponseElements"></a>

Se l'operazione riesce, il servizio invia una risposta HTTP 200 con un corpo HTTP vuoto.

## Errori
<a name="API_DeleteDatabase_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non sei autorizzato a eseguire questa azione.  
Codice di stato HTTP: 400

 ** InternalServerException **   
 Timestream non è stato in grado di elaborare completamente questa richiesta a causa di un errore interno del server.  
Codice di stato HTTP: 500

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
L'operazione ha tentato di accedere a una risorsa inesistente. La risorsa potrebbe non essere specificata correttamente o il suo stato potrebbe non essere ATTIVO.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_DeleteDatabase_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/DeleteDatabase) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/DeleteDatabase) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/DeleteDatabase) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/DeleteDatabase) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/DeleteDatabase) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/DeleteDatabase) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/DeleteDatabase) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/DeleteDatabase) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/DeleteDatabase) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/DeleteDatabase) 

# DeleteTable
<a name="API_DeleteTable"></a>

Elimina una determinata tabella Timestream. Si tratta di un'operazione irreversibile. Dopo l'eliminazione di una tabella del database Timestream, i dati delle serie temporali memorizzati nella tabella non possono essere recuperati. 

**Nota**  
A causa della natura dei tentativi distribuiti, l'operazione può restituire un risultato positivo o un. ResourceNotFoundException I clienti dovrebbero considerarli equivalenti.

Consulta l'[esempio di codice](https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.delete-table.html) per i dettagli.

## Sintassi della richiesta
<a name="API_DeleteTable_RequestSyntax"></a>

```
{
   "DatabaseName": "string",
   "TableName": "string"
}
```

## Parametri della richiesta
<a name="API_DeleteTable_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [DatabaseName](#API_DeleteTable_RequestSyntax) **   <a name="timestream-DeleteTable-request-DatabaseName"></a>
Il nome del database in cui deve essere eliminato il database Timestream.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 256 caratteri.  
Obbligatorio: sì

 ** [TableName](#API_DeleteTable_RequestSyntax) **   <a name="timestream-DeleteTable-request-TableName"></a>
Il nome della tabella Timestream da eliminare.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 256 caratteri.  
Obbligatorio: sì

## Elementi di risposta
<a name="API_DeleteTable_ResponseElements"></a>

Se l'operazione riesce, il servizio invia una risposta HTTP 200 con un corpo HTTP vuoto.

## Errori
<a name="API_DeleteTable_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non sei autorizzato a eseguire questa azione.  
Codice di stato HTTP: 400

 ** InternalServerException **   
 Timestream non è stato in grado di elaborare completamente questa richiesta a causa di un errore interno del server.  
Codice di stato HTTP: 500

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
L'operazione ha tentato di accedere a una risorsa inesistente. La risorsa potrebbe non essere specificata correttamente o il suo stato potrebbe non essere ATTIVO.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_DeleteTable_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/DeleteTable) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/DeleteTable) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/DeleteTable) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/DeleteTable) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/DeleteTable) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/DeleteTable) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/DeleteTable) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/DeleteTable) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/DeleteTable) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/DeleteTable) 

# DescribeBatchLoadTask
<a name="API_DescribeBatchLoadTask"></a>

Restituisce informazioni sull'attività di caricamento in batch, tra cui configurazioni, mappature, avanzamento e altri dettagli. [Si applicano le quote di servizio](https://docs.aws.amazon.com/timestream/latest/developerguide/ts-limits.html). Consulta l'[esempio di codice](https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.describe-batch-load.html) per i dettagli.

## Sintassi della richiesta
<a name="API_DescribeBatchLoadTask_RequestSyntax"></a>

```
{
   "TaskId": "string"
}
```

## Parametri della richiesta
<a name="API_DescribeBatchLoadTask_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [TaskId](#API_DescribeBatchLoadTask_RequestSyntax) **   <a name="timestream-DescribeBatchLoadTask-request-TaskId"></a>
L'ID dell'operazione di caricamento in batch.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 32 caratteri.  
Modello: `[A-Z0-9]+`   
Obbligatorio: sì

## Sintassi della risposta
<a name="API_DescribeBatchLoadTask_ResponseSyntax"></a>

```
{
   "BatchLoadTaskDescription": { 
      "CreationTime": number,
      "DataModelConfiguration": { 
         "DataModel": { 
            "DimensionMappings": [ 
               { 
                  "DestinationColumn": "string",
                  "SourceColumn": "string"
               }
            ],
            "MeasureNameColumn": "string",
            "MixedMeasureMappings": [ 
               { 
                  "MeasureName": "string",
                  "MeasureValueType": "string",
                  "MultiMeasureAttributeMappings": [ 
                     { 
                        "MeasureValueType": "string",
                        "SourceColumn": "string",
                        "TargetMultiMeasureAttributeName": "string"
                     }
                  ],
                  "SourceColumn": "string",
                  "TargetMeasureName": "string"
               }
            ],
            "MultiMeasureMappings": { 
               "MultiMeasureAttributeMappings": [ 
                  { 
                     "MeasureValueType": "string",
                     "SourceColumn": "string",
                     "TargetMultiMeasureAttributeName": "string"
                  }
               ],
               "TargetMultiMeasureName": "string"
            },
            "TimeColumn": "string",
            "TimeUnit": "string"
         },
         "DataModelS3Configuration": { 
            "BucketName": "string",
            "ObjectKey": "string"
         }
      },
      "DataSourceConfiguration": { 
         "CsvConfiguration": { 
            "ColumnSeparator": "string",
            "EscapeChar": "string",
            "NullValue": "string",
            "QuoteChar": "string",
            "TrimWhiteSpace": boolean
         },
         "DataFormat": "string",
         "DataSourceS3Configuration": { 
            "BucketName": "string",
            "ObjectKeyPrefix": "string"
         }
      },
      "ErrorMessage": "string",
      "LastUpdatedTime": number,
      "ProgressReport": { 
         "BytesMetered": number,
         "FileFailures": number,
         "ParseFailures": number,
         "RecordIngestionFailures": number,
         "RecordsIngested": number,
         "RecordsProcessed": number
      },
      "RecordVersion": number,
      "ReportConfiguration": { 
         "ReportS3Configuration": { 
            "BucketName": "string",
            "EncryptionOption": "string",
            "KmsKeyId": "string",
            "ObjectKeyPrefix": "string"
         }
      },
      "ResumableUntil": number,
      "TargetDatabaseName": "string",
      "TargetTableName": "string",
      "TaskId": "string",
      "TaskStatus": "string"
   }
}
```

## Elementi di risposta
<a name="API_DescribeBatchLoadTask_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [BatchLoadTaskDescription](#API_DescribeBatchLoadTask_ResponseSyntax) **   <a name="timestream-DescribeBatchLoadTask-response-BatchLoadTaskDescription"></a>
Descrizione dell'operazione di caricamento in batch.  
Tipo: oggetto [BatchLoadTaskDescription](API_BatchLoadTaskDescription.md)

## Errori
<a name="API_DescribeBatchLoadTask_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non sei autorizzato a eseguire questa azione.  
Codice di stato HTTP: 400

 ** InternalServerException **   
 Timestream non è stato in grado di elaborare completamente questa richiesta a causa di un errore interno del server.  
Codice di stato HTTP: 500

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
L'operazione ha tentato di accedere a una risorsa inesistente. La risorsa potrebbe non essere specificata correttamente o il suo stato potrebbe non essere ATTIVO.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_DescribeBatchLoadTask_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/DescribeBatchLoadTask) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/DescribeBatchLoadTask) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/DescribeBatchLoadTask) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/DescribeBatchLoadTask) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/DescribeBatchLoadTask) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/DescribeBatchLoadTask) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/DescribeBatchLoadTask) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/DescribeBatchLoadTask) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/DescribeBatchLoadTask) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/DescribeBatchLoadTask) 

# DescribeDatabase
<a name="API_DescribeDatabase"></a>

Restituisce informazioni sul database, incluso il nome del database, l'ora di creazione del database e il numero totale di tabelle trovate all'interno del database. [Si applicano le quote di servizio](https://docs.aws.amazon.com/timestream/latest/developerguide/ts-limits.html). Consulta l'[esempio di codice](https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.describe-db.html) per i dettagli.

## Sintassi della richiesta
<a name="API_DescribeDatabase_RequestSyntax"></a>

```
{
   "DatabaseName": "string"
}
```

## Parametri della richiesta
<a name="API_DescribeDatabase_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [DatabaseName](#API_DescribeDatabase_RequestSyntax) **   <a name="timestream-DescribeDatabase-request-DatabaseName"></a>
Nome del database Timestream.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 256 caratteri.  
Obbligatorio: sì

## Sintassi della risposta
<a name="API_DescribeDatabase_ResponseSyntax"></a>

```
{
   "Database": { 
      "Arn": "string",
      "CreationTime": number,
      "DatabaseName": "string",
      "KmsKeyId": "string",
      "LastUpdatedTime": number,
      "TableCount": number
   }
}
```

## Elementi di risposta
<a name="API_DescribeDatabase_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [Database](#API_DescribeDatabase_ResponseSyntax) **   <a name="timestream-DescribeDatabase-response-Database"></a>
Nome della tabella Timestream.  
Tipo: oggetto [Database](API_Database.md)

## Errori
<a name="API_DescribeDatabase_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non sei autorizzato a eseguire questa azione.  
Codice di stato HTTP: 400

 ** InternalServerException **   
 Timestream non è stato in grado di elaborare completamente questa richiesta a causa di un errore interno del server.  
Codice di stato HTTP: 500

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
L'operazione ha tentato di accedere a una risorsa inesistente. La risorsa potrebbe non essere specificata correttamente o il suo stato potrebbe non essere ATTIVO.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_DescribeDatabase_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/DescribeDatabase) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/DescribeDatabase) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/DescribeDatabase) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/DescribeDatabase) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/DescribeDatabase) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/DescribeDatabase) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/DescribeDatabase) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/DescribeDatabase) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/DescribeDatabase) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/DescribeDatabase) 

# DescribeEndpoints
<a name="API_DescribeEndpoints"></a>

Restituisce un elenco di endpoint disponibili su cui effettuare chiamate API Timestream. Questa operazione API è disponibile sia tramite Write che Query. APIs

Poiché i Timestream SDKs sono progettati per funzionare in modo trasparente con l'architettura del servizio, inclusa la gestione e la mappatura degli endpoint del servizio, *non è consigliabile utilizzare questa operazione API a meno che*:
+ Stai utilizzando [endpoint VPC ()AWS PrivateLink](https://docs.aws.amazon.com/timestream/latest/developerguide/VPCEndpoints) con Timestream 
+ L'applicazione utilizza un linguaggio di programmazione che non supporta ancora l'SDK
+ È necessario un controllo migliore sull'implementazione lato client

Per informazioni dettagliate su come e quando utilizzare e implementare DescribeEndpoints, consulta [The Endpoint](https://docs.aws.amazon.com/timestream/latest/developerguide/Using.API.html#Using-API.endpoint-discovery) Discovery Pattern.

## Sintassi della risposta
<a name="API_DescribeEndpoints_ResponseSyntax"></a>

```
{
   "Endpoints": [ 
      { 
         "Address": "string",
         "CachePeriodInMinutes": number
      }
   ]
}
```

## Elementi di risposta
<a name="API_DescribeEndpoints_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [Endpoints](#API_DescribeEndpoints_ResponseSyntax) **   <a name="timestream-DescribeEndpoints-response-Endpoints"></a>
Un `Endpoints` oggetto viene restituito quando viene effettuata una `DescribeEndpoints` richiesta.  
Tipo: matrice di oggetti [Endpoint](API_Endpoint.md)

## Errori
<a name="API_DescribeEndpoints_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** InternalServerException **   
 Timestream non è stato in grado di elaborare completamente questa richiesta a causa di un errore interno del server.  
Codice di stato HTTP: 500

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_DescribeEndpoints_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/DescribeEndpoints) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/DescribeEndpoints) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/DescribeEndpoints) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/DescribeEndpoints) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/DescribeEndpoints) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/DescribeEndpoints) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/DescribeEndpoints) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/DescribeEndpoints) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/DescribeEndpoints) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/DescribeEndpoints) 

# DescribeTable
<a name="API_DescribeTable"></a>

Restituisce informazioni sulla tabella, inclusi il nome della tabella, il nome del database, la durata di conservazione dell'archivio di memoria e dell'archivio magnetico. [Si applicano le quote di servizio](https://docs.aws.amazon.com/timestream/latest/developerguide/ts-limits.html). Consulta l'[esempio di codice](https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.describe-table.html) per i dettagli. 

## Sintassi della richiesta
<a name="API_DescribeTable_RequestSyntax"></a>

```
{
   "DatabaseName": "string",
   "TableName": "string"
}
```

## Parametri della richiesta
<a name="API_DescribeTable_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [DatabaseName](#API_DescribeTable_RequestSyntax) **   <a name="timestream-DescribeTable-request-DatabaseName"></a>
Nome del database Timestream.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 256 caratteri.  
Obbligatorio: sì

 ** [TableName](#API_DescribeTable_RequestSyntax) **   <a name="timestream-DescribeTable-request-TableName"></a>
Nome della tabella Timestream.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 256 caratteri.  
Obbligatorio: sì

## Sintassi della risposta
<a name="API_DescribeTable_ResponseSyntax"></a>

```
{
   "Table": { 
      "Arn": "string",
      "CreationTime": number,
      "DatabaseName": "string",
      "LastUpdatedTime": number,
      "MagneticStoreWriteProperties": { 
         "EnableMagneticStoreWrites": boolean,
         "MagneticStoreRejectedDataLocation": { 
            "S3Configuration": { 
               "BucketName": "string",
               "EncryptionOption": "string",
               "KmsKeyId": "string",
               "ObjectKeyPrefix": "string"
            }
         }
      },
      "RetentionProperties": { 
         "MagneticStoreRetentionPeriodInDays": number,
         "MemoryStoreRetentionPeriodInHours": number
      },
      "Schema": { 
         "CompositePartitionKey": [ 
            { 
               "EnforcementInRecord": "string",
               "Name": "string",
               "Type": "string"
            }
         ]
      },
      "TableName": "string",
      "TableStatus": "string"
   }
}
```

## Elementi di risposta
<a name="API_DescribeTable_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [Table](#API_DescribeTable_ResponseSyntax) **   <a name="timestream-DescribeTable-response-Table"></a>
La tabella Timestream.  
Tipo: oggetto [Table](API_Table.md)

## Errori
<a name="API_DescribeTable_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non sei autorizzato a eseguire questa azione.  
Codice di stato HTTP: 400

 ** InternalServerException **   
 Timestream non è stato in grado di elaborare completamente questa richiesta a causa di un errore interno del server.  
Codice di stato HTTP: 500

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
L'operazione ha tentato di accedere a una risorsa inesistente. La risorsa potrebbe non essere specificata correttamente o il suo stato potrebbe non essere ATTIVO.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_DescribeTable_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/DescribeTable) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/DescribeTable) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/DescribeTable) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/DescribeTable) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/DescribeTable) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/DescribeTable) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/DescribeTable) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/DescribeTable) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/DescribeTable) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/DescribeTable) 

# ListBatchLoadTasks
<a name="API_ListBatchLoadTasks"></a>

Fornisce un elenco delle attività di caricamento in batch, insieme al nome, allo stato, alla data di ripresa dell'attività e ad altri dettagli. Consulta l'[esempio di codice](https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.list-batch-load-tasks.html) per i dettagli.

## Sintassi della richiesta
<a name="API_ListBatchLoadTasks_RequestSyntax"></a>

```
{
   "MaxResults": number,
   "NextToken": "string",
   "TaskStatus": "string"
}
```

## Parametri della richiesta
<a name="API_ListBatchLoadTasks_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [MaxResults](#API_ListBatchLoadTasks_RequestSyntax) **   <a name="timestream-ListBatchLoadTasks-request-MaxResults"></a>
Il numero totale di elementi da restituire nell'output. Se il numero totale di elementi disponibili è superiore al valore specificato, nell'output NextToken viene fornito un. Per riprendere l'impaginazione, fornite il NextToken valore come argomento di una successiva chiamata all'API.  
Tipo: numero intero  
Intervallo valido: valore minimo di 1. valore massimo pari a 100.  
Obbligatorio: no

 ** [NextToken](#API_ListBatchLoadTasks_RequestSyntax) **   <a name="timestream-ListBatchLoadTasks-request-NextToken"></a>
Token per specificare dove iniziare l'impaginazione. Questo è il risultato di una risposta precedentemente NextToken troncata.  
▬Tipo: stringa  
Obbligatorio: no

 ** [TaskStatus](#API_ListBatchLoadTasks_RequestSyntax) **   <a name="timestream-ListBatchLoadTasks-request-TaskStatus"></a>
Stato dell'operazione di caricamento in batch.  
Tipo: String  
Valori validi: `CREATED | IN_PROGRESS | FAILED | SUCCEEDED | PROGRESS_STOPPED | PENDING_RESUME`   
Campo obbligatorio: no

## Sintassi della risposta
<a name="API_ListBatchLoadTasks_ResponseSyntax"></a>

```
{
   "BatchLoadTasks": [ 
      { 
         "CreationTime": number,
         "DatabaseName": "string",
         "LastUpdatedTime": number,
         "ResumableUntil": number,
         "TableName": "string",
         "TaskId": "string",
         "TaskStatus": "string"
      }
   ],
   "NextToken": "string"
}
```

## Elementi di risposta
<a name="API_ListBatchLoadTasks_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [BatchLoadTasks](#API_ListBatchLoadTasks_ResponseSyntax) **   <a name="timestream-ListBatchLoadTasks-response-BatchLoadTasks"></a>
Un elenco di dettagli dell'attività di caricamento in batch.  
Tipo: matrice di oggetti [BatchLoadTask](API_BatchLoadTask.md)

 ** [NextToken](#API_ListBatchLoadTasks_ResponseSyntax) **   <a name="timestream-ListBatchLoadTasks-response-NextToken"></a>
Token per specificare dove iniziare l'impaginazione. Fornisci il successivo ListBatchLoadTasksRequest.  
Tipo: String

## Errori
<a name="API_ListBatchLoadTasks_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non sei autorizzato a eseguire questa azione.  
Codice di stato HTTP: 400

 ** InternalServerException **   
 Timestream non è stato in grado di elaborare completamente questa richiesta a causa di un errore interno del server.  
Codice di stato HTTP: 500

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_ListBatchLoadTasks_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/ListBatchLoadTasks) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/ListBatchLoadTasks) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/ListBatchLoadTasks) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/ListBatchLoadTasks) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/ListBatchLoadTasks) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/ListBatchLoadTasks) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/ListBatchLoadTasks) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/ListBatchLoadTasks) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/ListBatchLoadTasks) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/ListBatchLoadTasks) 

# ListDatabases
<a name="API_ListDatabases"></a>

Restituisce un elenco dei tuoi database Timestream. [Si applicano le quote di servizio](https://docs.aws.amazon.com/timestream/latest/developerguide/ts-limits.html). Consulta l'[esempio di codice](https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.list-db.html) per i dettagli. 

## Sintassi della richiesta
<a name="API_ListDatabases_RequestSyntax"></a>

```
{
   "MaxResults": number,
   "NextToken": "string"
}
```

## Parametri della richiesta
<a name="API_ListDatabases_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [MaxResults](#API_ListDatabases_RequestSyntax) **   <a name="timestream-ListDatabases-request-MaxResults"></a>
Il numero totale di elementi da restituire nell'output. Se il numero totale di articoli disponibili è superiore al valore specificato, nell'output NextToken viene fornito a. Per riprendere l'impaginazione, fornite il NextToken valore come argomento di una successiva chiamata all'API.  
Tipo: numero intero  
Intervallo valido: valore minimo di 1. Valore massimo di 20.  
Obbligatorio: no

 ** [NextToken](#API_ListDatabases_RequestSyntax) **   <a name="timestream-ListDatabases-request-NextToken"></a>
Il token di impaginazione. Per riprendere l'impaginazione, fornite il NextToken valore come argomento di una successiva chiamata all'API.  
▬Tipo: stringa  
Obbligatorio: no

## Sintassi della risposta
<a name="API_ListDatabases_ResponseSyntax"></a>

```
{
   "Databases": [ 
      { 
         "Arn": "string",
         "CreationTime": number,
         "DatabaseName": "string",
         "KmsKeyId": "string",
         "LastUpdatedTime": number,
         "TableCount": number
      }
   ],
   "NextToken": "string"
}
```

## Elementi di risposta
<a name="API_ListDatabases_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [Databases](#API_ListDatabases_ResponseSyntax) **   <a name="timestream-ListDatabases-response-Databases"></a>
Un elenco di nomi di database.  
Tipo: matrice di oggetti [Database](API_Database.md)

 ** [NextToken](#API_ListDatabases_ResponseSyntax) **   <a name="timestream-ListDatabases-response-NextToken"></a>
Il token di impaginazione. Questo parametro viene restituito quando la risposta viene troncata.  
Tipo: String

## Errori
<a name="API_ListDatabases_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non sei autorizzato a eseguire questa azione.  
Codice di stato HTTP: 400

 ** InternalServerException **   
 Timestream non è stato in grado di elaborare completamente questa richiesta a causa di un errore interno del server.  
Codice di stato HTTP: 500

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_ListDatabases_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/ListDatabases) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/ListDatabases) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/ListDatabases) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/ListDatabases) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/ListDatabases) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/ListDatabases) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/ListDatabases) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/ListDatabases) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/ListDatabases) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/ListDatabases) 

# ListTables
<a name="API_ListTables"></a>

Fornisce un elenco di tabelle, insieme al nome, allo stato e alle proprietà di conservazione di ciascuna tabella. Consulta l'[esempio di codice](https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.list-table.html) per i dettagli. 

## Sintassi della richiesta
<a name="API_ListTables_RequestSyntax"></a>

```
{
   "DatabaseName": "string",
   "MaxResults": number,
   "NextToken": "string"
}
```

## Parametri della richiesta
<a name="API_ListTables_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [DatabaseName](#API_ListTables_RequestSyntax) **   <a name="timestream-ListTables-request-DatabaseName"></a>
Nome del database Timestream.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 256 caratteri.  
Obbligatorio: no

 ** [MaxResults](#API_ListTables_RequestSyntax) **   <a name="timestream-ListTables-request-MaxResults"></a>
Il numero totale di elementi da restituire nell'output. Se il numero totale di elementi disponibili è superiore al valore specificato, nell'output NextToken viene fornito un. Per riprendere l'impaginazione, fornite il NextToken valore come argomento di una successiva chiamata all'API.  
Tipo: numero intero  
Intervallo valido: valore minimo di 1. Valore massimo di 20.  
Obbligatorio: no

 ** [NextToken](#API_ListTables_RequestSyntax) **   <a name="timestream-ListTables-request-NextToken"></a>
Il token di impaginazione. Per riprendere l'impaginazione, fornite il NextToken valore come argomento di una successiva chiamata all'API.  
▬Tipo: stringa  
Obbligatorio: no

## Sintassi della risposta
<a name="API_ListTables_ResponseSyntax"></a>

```
{
   "NextToken": "string",
   "Tables": [ 
      { 
         "Arn": "string",
         "CreationTime": number,
         "DatabaseName": "string",
         "LastUpdatedTime": number,
         "MagneticStoreWriteProperties": { 
            "EnableMagneticStoreWrites": boolean,
            "MagneticStoreRejectedDataLocation": { 
               "S3Configuration": { 
                  "BucketName": "string",
                  "EncryptionOption": "string",
                  "KmsKeyId": "string",
                  "ObjectKeyPrefix": "string"
               }
            }
         },
         "RetentionProperties": { 
            "MagneticStoreRetentionPeriodInDays": number,
            "MemoryStoreRetentionPeriodInHours": number
         },
         "Schema": { 
            "CompositePartitionKey": [ 
               { 
                  "EnforcementInRecord": "string",
                  "Name": "string",
                  "Type": "string"
               }
            ]
         },
         "TableName": "string",
         "TableStatus": "string"
      }
   ]
}
```

## Elementi di risposta
<a name="API_ListTables_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [NextToken](#API_ListTables_ResponseSyntax) **   <a name="timestream-ListTables-response-NextToken"></a>
Token per specificare dove iniziare l'impaginazione. Questo è il risultato di una risposta precedentemente NextToken troncata.  
Tipo: String

 ** [Tables](#API_ListTables_ResponseSyntax) **   <a name="timestream-ListTables-response-Tables"></a>
Un elenco di tabelle.  
Tipo: matrice di oggetti [Table](API_Table.md)

## Errori
<a name="API_ListTables_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non sei autorizzato a eseguire questa azione.  
Codice di stato HTTP: 400

 ** InternalServerException **   
 Timestream non è stato in grado di elaborare completamente questa richiesta a causa di un errore interno del server.  
Codice di stato HTTP: 500

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
L'operazione ha cercato di accedere a una risorsa inesistente. La risorsa potrebbe non essere specificata correttamente o il suo stato potrebbe non essere ATTIVO.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_ListTables_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/ListTables) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/ListTables) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/ListTables) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/ListTables) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/ListTables) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/ListTables) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/ListTables) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/ListTables) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/ListTables) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/ListTables) 

# ListTagsForResource
<a name="API_ListTagsForResource"></a>

 Elenca tutti i tag su una risorsa Timestream. 

## Sintassi della richiesta
<a name="API_ListTagsForResource_RequestSyntax"></a>

```
{
   "ResourceARN": "string"
}
```

## Parametri della richiesta
<a name="API_ListTagsForResource_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [ResourceARN](#API_ListTagsForResource_RequestSyntax) **   <a name="timestream-ListTagsForResource-request-ResourceARN"></a>
 La risorsa Timestream con i tag da elencare. Questo valore è un Amazon Resource Name (ARN).   
Tipo: String  
Limitazioni di lunghezza: lunghezza minima pari a 1. Lunghezza massima di 1011.  
Obbligatorio: sì

## Sintassi della risposta
<a name="API_ListTagsForResource_ResponseSyntax"></a>

```
{
   "Tags": [ 
      { 
         "Key": "string",
         "Value": "string"
      }
   ]
}
```

## Elementi di risposta
<a name="API_ListTagsForResource_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [Tags](#API_ListTagsForResource_ResponseSyntax) **   <a name="timestream-ListTagsForResource-response-Tags"></a>
 I tag attualmente associati alla risorsa Timestream.   
Tipo: matrice di oggetti [Tag](API_Tag.md)  
Membri dell'array: numero minimo di 0 elementi. Numero massimo di 200 elementi.

## Errori
<a name="API_ListTagsForResource_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
L'operazione ha tentato di accedere a una risorsa inesistente. La risorsa potrebbe non essere specificata correttamente o il suo stato potrebbe non essere ATTIVO.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o con formato errato.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_ListTagsForResource_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/ListTagsForResource) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/ListTagsForResource) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/ListTagsForResource) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/ListTagsForResource) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/ListTagsForResource) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/ListTagsForResource) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/ListTagsForResource) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/ListTagsForResource) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/ListTagsForResource) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/ListTagsForResource) 

# ResumeBatchLoadTask
<a name="API_ResumeBatchLoadTask"></a>

 

## Sintassi della richiesta
<a name="API_ResumeBatchLoadTask_RequestSyntax"></a>

```
{
   "TaskId": "string"
}
```

## Parametri della richiesta
<a name="API_ResumeBatchLoadTask_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [TaskId](#API_ResumeBatchLoadTask_RequestSyntax) **   <a name="timestream-ResumeBatchLoadTask-request-TaskId"></a>
L'ID dell'operazione di caricamento batch da riprendere.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 32 caratteri.  
Modello: `[A-Z0-9]+`   
Obbligatorio: sì

## Elementi di risposta
<a name="API_ResumeBatchLoadTask_ResponseElements"></a>

Se l'operazione riesce, il servizio invia una risposta HTTP 200 con un corpo HTTP vuoto.

## Errori
<a name="API_ResumeBatchLoadTask_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non sei autorizzato a eseguire questa azione.  
Codice di stato HTTP: 400

 ** InternalServerException **   
 Timestream non è stato in grado di elaborare completamente questa richiesta a causa di un errore interno del server.  
Codice di stato HTTP: 500

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
L'operazione ha tentato di accedere a una risorsa inesistente. La risorsa potrebbe non essere specificata correttamente o il suo stato potrebbe non essere ATTIVO.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_ResumeBatchLoadTask_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/ResumeBatchLoadTask) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/ResumeBatchLoadTask) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/ResumeBatchLoadTask) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/ResumeBatchLoadTask) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/ResumeBatchLoadTask) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/ResumeBatchLoadTask) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/ResumeBatchLoadTask) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/ResumeBatchLoadTask) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/ResumeBatchLoadTask) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/ResumeBatchLoadTask) 

# TagResource
<a name="API_TagResource"></a>

 Associa un set di tag a una risorsa Timestream. È quindi possibile attivare questi tag definiti dall'utente in modo che vengano visualizzati nella console di Billing and Cost Management per il monitoraggio dell'allocazione dei costi. 

## Sintassi della richiesta
<a name="API_TagResource_RequestSyntax"></a>

```
{
   "ResourceARN": "string",
   "Tags": [ 
      { 
         "Key": "string",
         "Value": "string"
      }
   ]
}
```

## Parametri della richiesta
<a name="API_TagResource_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [ResourceARN](#API_TagResource_RequestSyntax) **   <a name="timestream-TagResource-request-ResourceARN"></a>
 Identifica la risorsa Timestream a cui aggiungere i tag. Questo valore è un Amazon Resource Name (ARN).   
Tipo: String  
Limitazioni di lunghezza: lunghezza minima pari a 1. Lunghezza massima di 1011.  
Obbligatorio: sì

 ** [Tags](#API_TagResource_RequestSyntax) **   <a name="timestream-TagResource-request-Tags"></a>
 I tag da assegnare alla risorsa Timestream.   
Tipo: matrice di oggetti [Tag](API_Tag.md)  
Membri dell'array: numero minimo di 0 elementi. Numero massimo di 200 elementi.  
Obbligatorio: sì

## Elementi di risposta
<a name="API_TagResource_ResponseElements"></a>

Se l'operazione riesce, il servizio invia una risposta HTTP 200 con un corpo HTTP vuoto.

## Errori
<a name="API_TagResource_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
L'operazione ha tentato di accedere a una risorsa inesistente. La risorsa potrebbe non essere specificata correttamente o il suo stato potrebbe non essere ATTIVO.  
Codice di stato HTTP: 400

 ** ServiceQuotaExceededException **   
 La quota di risorse dell'istanza è stata superata per questo account.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_TagResource_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/TagResource) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/TagResource) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/TagResource) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/TagResource) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/TagResource) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/TagResource) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/TagResource) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/TagResource) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/TagResource) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/TagResource) 

# UntagResource
<a name="API_UntagResource"></a>

 Rimuove l'associazione di tag da una risorsa Timestream. 

## Sintassi della richiesta
<a name="API_UntagResource_RequestSyntax"></a>

```
{
   "ResourceARN": "string",
   "TagKeys": [ "string" ]
}
```

## Parametri della richiesta
<a name="API_UntagResource_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [ResourceARN](#API_UntagResource_RequestSyntax) **   <a name="timestream-UntagResource-request-ResourceARN"></a>
 La risorsa Timestream da cui verranno rimossi i tag. Questo valore è un Amazon Resource Name (ARN).   
Tipo: String  
Limitazioni di lunghezza: lunghezza minima pari a 1. Lunghezza massima di 1011.  
Obbligatorio: sì

 ** [TagKeys](#API_UntagResource_RequestSyntax) **   <a name="timestream-UntagResource-request-TagKeys"></a>
 Un elenco di tag e chiavi. I tag esistenti della risorsa le cui chiavi sono membri di questo elenco verranno rimossi dalla risorsa Timestream.   
Tipo: array di stringhe  
Membri dell'array: numero minimo di 0 elementi. Numero massimo di 200 elementi.  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 128 caratteri.  
Obbligatorio: sì

## Elementi di risposta
<a name="API_UntagResource_ResponseElements"></a>

Se l'operazione riesce, il servizio invia una risposta HTTP 200 con un corpo HTTP vuoto.

## Errori
<a name="API_UntagResource_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
L'operazione ha tentato di accedere a una risorsa inesistente. La risorsa potrebbe non essere specificata correttamente o il suo stato potrebbe non essere ATTIVO.  
Codice di stato HTTP: 400

 ** ServiceQuotaExceededException **   
 La quota di risorse dell'istanza è stata superata per questo account.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_UntagResource_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/UntagResource) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/UntagResource) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/UntagResource) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/UntagResource) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/UntagResource) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/UntagResource) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/UntagResource) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/UntagResource) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/UntagResource) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/UntagResource) 

# UpdateDatabase
<a name="API_UpdateDatabase"></a>

 Modifica la AWS KMS chiave per un database esistente. Durante l'aggiornamento del database, è necessario specificare il nome del database e l'identificatore della nuova AWS KMS chiave da utilizzare ()`KmsKeyId`. Se ci sono `UpdateDatabase` richieste simultanee, vince il primo scrittore. 

Consulta l'[esempio di codice](https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.update-db.html) per i dettagli.

## Sintassi della richiesta
<a name="API_UpdateDatabase_RequestSyntax"></a>

```
{
   "DatabaseName": "string",
   "KmsKeyId": "string"
}
```

## Parametri della richiesta
<a name="API_UpdateDatabase_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [DatabaseName](#API_UpdateDatabase_RequestSyntax) **   <a name="timestream-UpdateDatabase-request-DatabaseName"></a>
 Nome del database.   
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 256 caratteri.  
Obbligatorio: sì

 ** [KmsKeyId](#API_UpdateDatabase_RequestSyntax) **   <a name="timestream-UpdateDatabase-request-KmsKeyId"></a>
 L'identificatore della nuova AWS KMS chiave (`KmsKeyId`) da utilizzare per crittografare i dati memorizzati nel database. Se il `KmsKeyId` valore attualmente registrato nel database è lo stesso indicato `KmsKeyId` nella richiesta, non ci sarà alcun aggiornamento.   
È possibile specificare l'`KmsKeyId`utilizzo di uno dei seguenti:  
+ ID chiave: `1234abcd-12ab-34cd-56ef-1234567890ab` 
+ ARN chiave: `arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab` 
+ Nome alias: `alias/ExampleAlias` 
+ ARN alias: `arn:aws:kms:us-east-1:111122223333:alias/ExampleAlias` 
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Obbligatorio: sì

## Sintassi della risposta
<a name="API_UpdateDatabase_ResponseSyntax"></a>

```
{
   "Database": { 
      "Arn": "string",
      "CreationTime": number,
      "DatabaseName": "string",
      "KmsKeyId": "string",
      "LastUpdatedTime": number,
      "TableCount": number
   }
}
```

## Elementi di risposta
<a name="API_UpdateDatabase_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [Database](#API_UpdateDatabase_ResponseSyntax) **   <a name="timestream-UpdateDatabase-response-Database"></a>
Un contenitore di primo livello per una tabella. I database e le tabelle sono i concetti di gestione fondamentali in Amazon Timestream. Tutte le tabelle di un database sono crittografate con la stessa AWS KMS chiave.  
Tipo: oggetto [Database](API_Database.md)

## Errori
<a name="API_UpdateDatabase_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non sei autorizzato a eseguire questa azione.  
Codice di stato HTTP: 400

 ** InternalServerException **   
 Timestream non è stato in grado di elaborare completamente questa richiesta a causa di un errore interno del server.  
Codice di stato HTTP: 500

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
L'operazione ha cercato di accedere a una risorsa inesistente. La risorsa potrebbe non essere specificata correttamente o il suo stato potrebbe non essere ATTIVO.  
Codice di stato HTTP: 400

 ** ServiceQuotaExceededException **   
 La quota di risorse dell'istanza è stata superata per questo account.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_UpdateDatabase_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/UpdateDatabase) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/UpdateDatabase) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/UpdateDatabase) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/UpdateDatabase) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/UpdateDatabase) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/UpdateDatabase) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/UpdateDatabase) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/UpdateDatabase) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/UpdateDatabase) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/UpdateDatabase) 

# UpdateTable
<a name="API_UpdateTable"></a>

Modifica la durata di conservazione dell'archivio di memoria e dell'archivio magnetico per la tabella Timestream. Si noti che la modifica della durata di conservazione ha effetto immediato. Ad esempio, se il periodo di conservazione dell'archivio di memoria è stato inizialmente impostato su 2 ore e poi modificato su 24 ore, l'archivio di memoria sarà in grado di contenere 24 ore di dati, ma verrà popolato con 24 ore di dati 22 ore dopo la modifica. Timestream non recupera i dati dall'archivio magnetico per popolare l'archivio di memoria. 

Consulta l'[esempio di codice](https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.update-table.html) per i dettagli.

## Sintassi della richiesta
<a name="API_UpdateTable_RequestSyntax"></a>

```
{
   "DatabaseName": "string",
   "MagneticStoreWriteProperties": { 
      "EnableMagneticStoreWrites": boolean,
      "MagneticStoreRejectedDataLocation": { 
         "S3Configuration": { 
            "BucketName": "string",
            "EncryptionOption": "string",
            "KmsKeyId": "string",
            "ObjectKeyPrefix": "string"
         }
      }
   },
   "RetentionProperties": { 
      "MagneticStoreRetentionPeriodInDays": number,
      "MemoryStoreRetentionPeriodInHours": number
   },
   "Schema": { 
      "CompositePartitionKey": [ 
         { 
            "EnforcementInRecord": "string",
            "Name": "string",
            "Type": "string"
         }
      ]
   },
   "TableName": "string"
}
```

## Parametri della richiesta
<a name="API_UpdateTable_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [DatabaseName](#API_UpdateTable_RequestSyntax) **   <a name="timestream-UpdateTable-request-DatabaseName"></a>
Nome del database Timestream.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 256 caratteri.  
Obbligatorio: sì

 ** [MagneticStoreWriteProperties](#API_UpdateTable_RequestSyntax) **   <a name="timestream-UpdateTable-request-MagneticStoreWriteProperties"></a>
Contiene le proprietà da impostare nella tabella quando si abilitano le scritture dello store magnetico.  
Tipo: oggetto [MagneticStoreWriteProperties](API_MagneticStoreWriteProperties.md)  
Obbligatorio: no

 ** [RetentionProperties](#API_UpdateTable_RequestSyntax) **   <a name="timestream-UpdateTable-request-RetentionProperties"></a>
La durata di conservazione dell'archivio di memoria e dell'archivio magnetico.  
Tipo: oggetto [RetentionProperties](API_RetentionProperties.md)  
Obbligatorio: no

 ** [Schema](#API_UpdateTable_RequestSyntax) **   <a name="timestream-UpdateTable-request-Schema"></a>
 Lo schema della tabella.   
Tipo: oggetto [Schema](API_Schema.md)  
Obbligatorio: no

 ** [TableName](#API_UpdateTable_RequestSyntax) **   <a name="timestream-UpdateTable-request-TableName"></a>
Nome della tabella Timestream.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 256 caratteri.  
Obbligatorio: sì

## Sintassi della risposta
<a name="API_UpdateTable_ResponseSyntax"></a>

```
{
   "Table": { 
      "Arn": "string",
      "CreationTime": number,
      "DatabaseName": "string",
      "LastUpdatedTime": number,
      "MagneticStoreWriteProperties": { 
         "EnableMagneticStoreWrites": boolean,
         "MagneticStoreRejectedDataLocation": { 
            "S3Configuration": { 
               "BucketName": "string",
               "EncryptionOption": "string",
               "KmsKeyId": "string",
               "ObjectKeyPrefix": "string"
            }
         }
      },
      "RetentionProperties": { 
         "MagneticStoreRetentionPeriodInDays": number,
         "MemoryStoreRetentionPeriodInHours": number
      },
      "Schema": { 
         "CompositePartitionKey": [ 
            { 
               "EnforcementInRecord": "string",
               "Name": "string",
               "Type": "string"
            }
         ]
      },
      "TableName": "string",
      "TableStatus": "string"
   }
}
```

## Elementi di risposta
<a name="API_UpdateTable_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [Table](#API_UpdateTable_ResponseSyntax) **   <a name="timestream-UpdateTable-response-Table"></a>
La tabella Timestream aggiornata.  
Tipo: oggetto [Table](API_Table.md)

## Errori
<a name="API_UpdateTable_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non sei autorizzato a eseguire questa azione.  
Codice di stato HTTP: 400

 ** InternalServerException **   
 Timestream non è stato in grado di elaborare completamente questa richiesta a causa di un errore interno del server.  
Codice di stato HTTP: 500

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
L'operazione ha cercato di accedere a una risorsa inesistente. La risorsa potrebbe non essere specificata correttamente o il suo stato potrebbe non essere ATTIVO.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_UpdateTable_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/UpdateTable) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/UpdateTable) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/UpdateTable) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/UpdateTable) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/UpdateTable) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/UpdateTable) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/UpdateTable) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/UpdateTable) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/UpdateTable) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/UpdateTable) 

# WriteRecords
<a name="API_WriteRecords"></a>

Consente di scrivere i dati delle serie temporali in Timestream. È possibile specificare un singolo punto dati o un batch di punti dati da inserire nel sistema. Timestream ti offre uno schema flessibile che rileva automaticamente i nomi delle colonne e i tipi di dati per le tue tabelle Timestream in base ai nomi delle dimensioni e ai tipi di dati dei punti dati specificati quando richiami le scritture nel database. 

Timestream supporta la semantica di lettura con eventuale coerenza. Ciò significa che quando si interrogano i dati immediatamente dopo aver scritto un batch di dati in Timestream, i risultati della query potrebbero non riflettere i risultati di un'operazione di scrittura completata di recente. I risultati possono includere anche alcuni dati obsoleti. Se si ripete la richiesta di interrogazione dopo un breve periodo, i risultati dovrebbero restituire i dati più recenti. [Si applicano le quote di servizio](https://docs.aws.amazon.com/timestream/latest/developerguide/ts-limits.html). 

Consulta l'[esempio di codice](https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.write.html) per i dettagli.

 **Sconvolge** 

È possibile utilizzare il `Version` parametro in una `WriteRecords` richiesta di aggiornamento dei punti dati. Timestream tiene traccia di un numero di versione per ogni record. `Version`il valore predefinito è `1` quando non è specificato per il record nella richiesta. Timestream aggiorna il valore di misura di un record esistente insieme al suo `Version` quando riceve una richiesta di scrittura con un `Version` numero più alto per quel record. Quando riceve una richiesta di aggiornamento in cui il valore di misura è uguale a quello del record esistente, Timestream si aggiorna comunque`Version`, se è maggiore del valore esistente di. `Version` È possibile aggiornare un punto dati tutte le volte che si desidera, purché il valore di aumenti `Version` continuamente. 

 Ad esempio, supponete di scrivere un nuovo record senza indicarlo `Version` nella richiesta. Timestream memorizza questo record e lo imposta su. `Version` `1` Supponiamo ora di provare ad aggiornare questo record con una `WriteRecords` richiesta dello stesso record con un valore di misura diverso ma, come in precedenza, di non fornire. `Version` In questo caso, Timestream rifiuterà questo aggiornamento con un `RejectedRecordsException` poiché la versione del record aggiornato non è maggiore del valore esistente di Version. 

Tuttavia, se dovessi inviare nuovamente la richiesta di aggiornamento con `Version` set to`2`, Timestream riuscirà ad aggiornare il valore del record e verrebbe impostato su. `Version` `2` Supponiamo quindi di aver inviato una `WriteRecords` richiesta con lo stesso record e un valore di misura identico, ma impostata su. `Version` `3` In questo caso, Timestream si aggiornerebbe solo a. `Version` `3` Eventuali ulteriori aggiornamenti dovrebbero inviare un numero di versione maggiore di`3`, oppure le richieste di aggiornamento riceverebbero un. `RejectedRecordsException` 

## Sintassi della richiesta
<a name="API_WriteRecords_RequestSyntax"></a>

```
{
   "CommonAttributes": { 
      "Dimensions": [ 
         { 
            "DimensionValueType": "string",
            "Name": "string",
            "Value": "string"
         }
      ],
      "MeasureName": "string",
      "MeasureValue": "string",
      "MeasureValues": [ 
         { 
            "Name": "string",
            "Type": "string",
            "Value": "string"
         }
      ],
      "MeasureValueType": "string",
      "Time": "string",
      "TimeUnit": "string",
      "Version": number
   },
   "DatabaseName": "string",
   "Records": [ 
      { 
         "Dimensions": [ 
            { 
               "DimensionValueType": "string",
               "Name": "string",
               "Value": "string"
            }
         ],
         "MeasureName": "string",
         "MeasureValue": "string",
         "MeasureValues": [ 
            { 
               "Name": "string",
               "Type": "string",
               "Value": "string"
            }
         ],
         "MeasureValueType": "string",
         "Time": "string",
         "TimeUnit": "string",
         "Version": number
      }
   ],
   "TableName": "string"
}
```

## Parametri della richiesta
<a name="API_WriteRecords_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [CommonAttributes](#API_WriteRecords_RequestSyntax) **   <a name="timestream-WriteRecords-request-CommonAttributes"></a>
Un record che contiene gli attributi comuni di misura, dimensione, ora e versione condivisi tra tutti i record della richiesta. Gli attributi di misura e dimensione specificati verranno uniti agli attributi di misura e dimensione nell'oggetto records quando i dati vengono scritti in Timestream. Le dimensioni non possono sovrapporsi o verrà generato un`ValidationException`. In altre parole, un record deve contenere dimensioni con nomi univoci.   
Tipo: oggetto [Record](API_Record.md)  
Obbligatorio: no

 ** [DatabaseName](#API_WriteRecords_RequestSyntax) **   <a name="timestream-WriteRecords-request-DatabaseName"></a>
Nome del database Timestream.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 256 caratteri.  
Obbligatorio: sì

 ** [Records](#API_WriteRecords_RequestSyntax) **   <a name="timestream-WriteRecords-request-Records"></a>
Una matrice di record che contiene gli attributi univoci di misura, dimensione, ora e versione per ogni punto dati della serie temporale.  
Tipo: matrice di oggetti [Record](API_Record.md)  
Membri dell’array: numero minimo di 1 elemento. Numero massimo di 100 elementi.  
Obbligatorio: sì

 ** [TableName](#API_WriteRecords_RequestSyntax) **   <a name="timestream-WriteRecords-request-TableName"></a>
Nome della tabella Timestream.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 256 caratteri.  
Obbligatorio: sì

## Sintassi della risposta
<a name="API_WriteRecords_ResponseSyntax"></a>

```
{
   "RecordsIngested": { 
      "MagneticStore": number,
      "MemoryStore": number,
      "Total": number
   }
}
```

## Elementi di risposta
<a name="API_WriteRecords_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [RecordsIngested](#API_WriteRecords_ResponseSyntax) **   <a name="timestream-WriteRecords-response-RecordsIngested"></a>
Informazioni sui record acquisiti da questa richiesta.  
Tipo: oggetto [RecordsIngested](API_RecordsIngested.md)

## Errori
<a name="API_WriteRecords_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non sei autorizzato a eseguire questa azione.  
Codice di stato HTTP: 400

 ** InternalServerException **   
 Timestream non è stato in grado di elaborare completamente questa richiesta a causa di un errore interno del server.  
Codice di stato HTTP: 500

 ** InvalidEndpointException **   
L'endpoint richiesto non era valido.  
Codice di stato HTTP: 400

 ** RejectedRecordsException **   
 WriteRecords genererebbe questa eccezione nei seguenti casi:   
+ Record con dati duplicati in cui sono presenti più record con le stesse dimensioni, timestamp e nomi di misure ma: 
  + I valori di misura sono diversi
  + La versione non è presente nella richiesta *oppure* il valore della versione nel nuovo record è uguale o inferiore al valore esistente

   In questo caso, se Timestream rifiuta i dati, il `ExistingVersion` campo nella `RejectedRecords` risposta indicherà la versione del record corrente. Per forzare un aggiornamento, puoi inviare nuovamente la richiesta con una versione del record impostata su un valore maggiore di. `ExistingVersion`
+  Record con timestamp che non rientrano nella durata di conservazione dell'archivio di memoria. 
+  Record con dimensioni o misure che superano i limiti definiti dal Timestream. 
 Per ulteriori informazioni, consulta [Quotas](https://docs.aws.amazon.com/timestream/latest/developerguide/ts-limits.html) nella Amazon Timestream Developer Guide.     
 ** RejectedRecords **   
 
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
L'operazione ha cercato di accedere a una risorsa inesistente. La risorsa potrebbe non essere specificata correttamente o il suo stato potrebbe non essere ATTIVO.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
 Troppe richieste sono state fatte da un utente e hanno superato le quote di servizio. La richiesta è stata sottoposta a throttling.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_WriteRecords_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-write-2018-11-01/WriteRecords) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-write-2018-11-01/WriteRecords) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/WriteRecords) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-write-2018-11-01/WriteRecords) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/WriteRecords) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-write-2018-11-01/WriteRecords) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-write-2018-11-01/WriteRecords) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-write-2018-11-01/WriteRecords) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-write-2018-11-01/WriteRecords) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/WriteRecords) 

# Interrogazione su Amazon Timestream
<a name="API_Operations_Amazon_Timestream_Query"></a>

Le seguenti azioni sono supportate da Amazon Timestream Query:
+  [CancelQuery](API_query_CancelQuery.md) 
+  [CreateScheduledQuery](API_query_CreateScheduledQuery.md) 
+  [DeleteScheduledQuery](API_query_DeleteScheduledQuery.md) 
+  [DescribeAccountSettings](API_query_DescribeAccountSettings.md) 
+  [DescribeEndpoints](API_query_DescribeEndpoints.md) 
+  [DescribeScheduledQuery](API_query_DescribeScheduledQuery.md) 
+  [ExecuteScheduledQuery](API_query_ExecuteScheduledQuery.md) 
+  [ListScheduledQueries](API_query_ListScheduledQueries.md) 
+  [ListTagsForResource](API_query_ListTagsForResource.md) 
+  [PrepareQuery](API_query_PrepareQuery.md) 
+  [Query](API_query_Query.md) 
+  [TagResource](API_query_TagResource.md) 
+  [UntagResource](API_query_UntagResource.md) 
+  [UpdateAccountSettings](API_query_UpdateAccountSettings.md) 
+  [UpdateScheduledQuery](API_query_UpdateScheduledQuery.md) 

# CancelQuery
<a name="API_query_CancelQuery"></a>

 Annulla una richiesta che è stata emessa. L'annullamento viene fornito solo se l'esecuzione della richiesta non è stata completata prima dell'emissione della richiesta di cancellazione. Poiché l'annullamento è un'operazione idempotente, le richieste di annullamento successive restituiranno a`CancellationMessage`, a indicare che la query è già stata annullata. Consulta l'[esempio di codice](https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.cancel-query.html) per i dettagli. 

## Sintassi della richiesta
<a name="API_query_CancelQuery_RequestSyntax"></a>

```
{
   "QueryId": "string"
}
```

## Parametri della richiesta
<a name="API_query_CancelQuery_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [QueryId](#API_query_CancelQuery_RequestSyntax) **   <a name="timestream-query_CancelQuery-request-QueryId"></a>
 L'ID della query che deve essere annullata. `QueryID`viene restituito come parte del risultato della query.   
Tipo: String  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 64 caratteri.  
Modello: `[a-zA-Z0-9]+`   
Obbligatorio: sì

## Sintassi della risposta
<a name="API_query_CancelQuery_ResponseSyntax"></a>

```
{
   "CancellationMessage": "string"
}
```

## Elementi di risposta
<a name="API_query_CancelQuery_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [CancellationMessage](#API_query_CancelQuery_ResponseSyntax) **   <a name="timestream-query_CancelQuery-response-CancellationMessage"></a>
 A `CancellationMessage` viene restituito quando è già `QueryId` stata emessa una `CancelQuery` richiesta per la query specificata da.   
Tipo: String

## Errori
<a name="API_query_CancelQuery_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non disponi delle autorizzazioni necessarie per accedere alle impostazioni dell'account.  
Codice di stato HTTP: 400

 ** InternalServerException **   
Si è verificato un errore interno del server durante l'elaborazione della richiesta.  
Codice di stato HTTP: 400

 ** InvalidEndpointException **   
L'endpoint richiesto non è valido.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
La richiesta è stata limitata a causa di un numero eccessivo di richieste.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.   
Codice di stato HTTP: 400

## Vedi anche
<a name="API_query_CancelQuery_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-query-2018-11-01/CancelQuery) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-query-2018-11-01/CancelQuery) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/CancelQuery) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-query-2018-11-01/CancelQuery) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/CancelQuery) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-query-2018-11-01/CancelQuery) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-query-2018-11-01/CancelQuery) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-query-2018-11-01/CancelQuery) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-query-2018-11-01/CancelQuery) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/CancelQuery) 

# CreateScheduledQuery
<a name="API_query_CreateScheduledQuery"></a>

 Creare una query pianificata che verrà eseguita per conto dell'utente in base alla pianificazione configurata. Per l'esecuzione della query, a Timestream viene assegnato il ruolo di esecutore nell'ambito del parametro `ScheduledQueryExecutionRoleArn`. È possibile utilizzare il parametro `NotificationConfiguration` per configurare l'invio di una notifica per le operazioni di query pianificate.

## Sintassi della richiesta
<a name="API_query_CreateScheduledQuery_RequestSyntax"></a>

```
{
   "ClientToken": "string",
   "ErrorReportConfiguration": { 
      "S3Configuration": { 
         "BucketName": "string",
         "EncryptionOption": "string",
         "ObjectKeyPrefix": "string"
      }
   },
   "KmsKeyId": "string",
   "Name": "string",
   "NotificationConfiguration": { 
      "SnsConfiguration": { 
         "TopicArn": "string"
      }
   },
   "QueryString": "string",
   "ScheduleConfiguration": { 
      "ScheduleExpression": "string"
   },
   "ScheduledQueryExecutionRoleArn": "string",
   "Tags": [ 
      { 
         "Key": "string",
         "Value": "string"
      }
   ],
   "TargetConfiguration": { 
      "TimestreamConfiguration": { 
         "DatabaseName": "string",
         "DimensionMappings": [ 
            { 
               "DimensionValueType": "string",
               "Name": "string"
            }
         ],
         "MeasureNameColumn": "string",
         "MixedMeasureMappings": [ 
            { 
               "MeasureName": "string",
               "MeasureValueType": "string",
               "MultiMeasureAttributeMappings": [ 
                  { 
                     "MeasureValueType": "string",
                     "SourceColumn": "string",
                     "TargetMultiMeasureAttributeName": "string"
                  }
               ],
               "SourceColumn": "string",
               "TargetMeasureName": "string"
            }
         ],
         "MultiMeasureMappings": { 
            "MultiMeasureAttributeMappings": [ 
               { 
                  "MeasureValueType": "string",
                  "SourceColumn": "string",
                  "TargetMultiMeasureAttributeName": "string"
               }
            ],
            "TargetMultiMeasureName": "string"
         },
         "TableName": "string",
         "TimeColumn": "string"
      }
   }
}
```

## Parametri della richiesta
<a name="API_query_CreateScheduledQuery_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [ClientToken](#API_query_CreateScheduledQuery_RequestSyntax) **   <a name="timestream-query_CreateScheduledQuery-request-ClientToken"></a>
L'uso di a ClientToken rende la chiamata CreateScheduledQuery idempotente, in altre parole, ripetere la stessa richiesta produrrà lo stesso risultato. Effettuare più CreateScheduledQuery richieste identiche ha lo stesso effetto di fare una singola richiesta.   
+  Se CreateScheduledQuery viene chiamato senza un`ClientToken`, Query SDK genera un `ClientToken` messaggio per conto dell'utente.
+  Dopo 8 ore, qualsiasi richiesta con lo stesso `ClientToken` viene considerata e gestita come una nuova richiesta. 
Tipo: String  
Vincoli di lunghezza: lunghezza minima di 32. La lunghezza massima è 128 caratteri.  
Obbligatorio: no

 ** [ErrorReportConfiguration](#API_query_CreateScheduledQuery_RequestSyntax) **   <a name="timestream-query_CreateScheduledQuery-request-ErrorReportConfiguration"></a>
Configurazione della segnalazione di errori. I report di errore vengono generati quando si verifica un problema durante la scrittura dei risultati della query.   
Tipo: oggetto [ErrorReportConfiguration](API_query_ErrorReportConfiguration.md)  
Obbligatorio: sì

 ** [KmsKeyId](#API_query_CreateScheduledQuery_RequestSyntax) **   <a name="timestream-query_CreateScheduledQuery-request-KmsKeyId"></a>
La chiave Amazon KMS utilizzata per crittografare la risorsa di query pianificata, quando i dati sono inattivi. Se la chiave Amazon KMS non viene specificata, la risorsa di query pianificata verrà crittografata con una chiave Amazon KMS di proprietà di Timestream. Per specificare una chiave KMS, utilizzare l'ID o l'ARN della chiave oppure il nome o l'ARN dell'alias. Quando si utilizza un nome alias, aggiungere al nome il prefisso *alias/*   
Se viene ErrorReportConfiguration utilizzato `SSE_KMS` come tipo di crittografia, lo stesso KmsKeyId viene utilizzato per crittografare la segnalazione degli errori a riposo.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Obbligatorio: no

 ** [Name](#API_query_CreateScheduledQuery_RequestSyntax) **   <a name="timestream-query_CreateScheduledQuery-request-Name"></a>
Nome della query pianificata.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 64 caratteri.  
Modello: `[a-zA-Z0-9|!\-_*'\(\)]([a-zA-Z0-9]|[!\-_*'\(\)\/.])+`   
Obbligatorio: sì

 ** [NotificationConfiguration](#API_query_CreateScheduledQuery_RequestSyntax) **   <a name="timestream-query_CreateScheduledQuery-request-NotificationConfiguration"></a>
Configurazione della notifica per la query pianificata. Quando l'esecuzione di una query pianificata termina oppure lo stato della query viene aggiornato oppure la query viene eliminata, Timestream invia una notifica.   
Tipo: oggetto [NotificationConfiguration](API_query_NotificationConfiguration.md)  
Obbligatorio: sì

 ** [QueryString](#API_query_CreateScheduledQuery_RequestSyntax) **   <a name="timestream-query_CreateScheduledQuery-request-QueryString"></a>
La stringa query da eseguire. I nomi dei parametri possono essere specificati nella stringa query dal carattere `@` seguito da un identificatore. Il parametro denominato `@scheduled_runtime` è riservato e può essere utilizzato nella query per ottenere l'ora in cui è pianificata l'esecuzione della query.  
Il timestamp calcolato in base al ScheduleConfiguration parametro sarà il valore del `@scheduled_runtime` parametro per ogni esecuzione di query. Ad esempio, si può considerare un'istanza di una query pianificata in esecuzione alla data/ora 2021-12-01 00:00:00. In questa istanza, il parametro `@scheduled_runtime` viene inizializzato in corrispondenza del timestamp 2021-12-01 00:00:00 quando si richiama la query.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima pari a 1. Lunghezza massima di 262144.  
Obbligatorio: sì

 ** [ScheduleConfiguration](#API_query_CreateScheduledQuery_RequestSyntax) **   <a name="timestream-query_CreateScheduledQuery-request-ScheduleConfiguration"></a>
La configurazione della pianificazione per la query.  
Tipo: oggetto [ScheduleConfiguration](API_query_ScheduleConfiguration.md)  
Obbligatorio: sì

 ** [ScheduledQueryExecutionRoleArn](#API_query_CreateScheduledQuery_RequestSyntax) **   <a name="timestream-query_CreateScheduledQuery-request-ScheduledQueryExecutionRoleArn"></a>
L'ARN del ruolo IAM che Timestream assumerà durante l'esecuzione della query pianificata.   
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Obbligatorio: sì

 ** [Tags](#API_query_CreateScheduledQuery_RequestSyntax) **   <a name="timestream-query_CreateScheduledQuery-request-Tags"></a>
Un elenco di coppie chiave-valore per etichettare la query pianificata.  
Tipo: matrice di oggetti [Tag](API_query_Tag.md)  
Membri dell'array: numero minimo di 0 elementi. Numero massimo di 200 elementi.  
Obbligatorio: no

 ** [TargetConfiguration](#API_query_CreateScheduledQuery_RequestSyntax) **   <a name="timestream-query_CreateScheduledQuery-request-TargetConfiguration"></a>
Configurazione utilizzata per scrivere il risultato di una query.  
Tipo: oggetto [TargetConfiguration](API_query_TargetConfiguration.md)  
Obbligatorio: no

## Sintassi della risposta
<a name="API_query_CreateScheduledQuery_ResponseSyntax"></a>

```
{
   "Arn": "string"
}
```

## Elementi di risposta
<a name="API_query_CreateScheduledQuery_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [Arn](#API_query_CreateScheduledQuery_ResponseSyntax) **   <a name="timestream-query_CreateScheduledQuery-response-Arn"></a>
ARN per la query pianificata creata.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.

## Errori
<a name="API_query_CreateScheduledQuery_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non disponi delle autorizzazioni necessarie per accedere alle impostazioni dell'account.  
Codice di stato HTTP: 400

 ** ConflictException **   
 Impossibile visualizzare i risultati di un sondaggio per una query annullata.   
Codice di stato HTTP: 400

 ** InternalServerException **   
Si è verificato un errore interno del server durante l'elaborazione della richiesta.  
Codice di stato HTTP: 400

 ** InvalidEndpointException **   
L'endpoint richiesto non è valido.  
Codice di stato HTTP: 400

 ** ServiceQuotaExceededException **   
Hai superato la quota di servizio.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
La richiesta è stata limitata a causa di un numero eccessivo di richieste.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.   
Codice di stato HTTP: 400

## Vedi anche
<a name="API_query_CreateScheduledQuery_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-query-2018-11-01/CreateScheduledQuery) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-query-2018-11-01/CreateScheduledQuery) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/CreateScheduledQuery) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-query-2018-11-01/CreateScheduledQuery) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/CreateScheduledQuery) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-query-2018-11-01/CreateScheduledQuery) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-query-2018-11-01/CreateScheduledQuery) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-query-2018-11-01/CreateScheduledQuery) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-query-2018-11-01/CreateScheduledQuery) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/CreateScheduledQuery) 

# DeleteScheduledQuery
<a name="API_query_DeleteScheduledQuery"></a>

Elimina una determinata query pianificata. Si tratta di un'operazione irreversibile. 

## Sintassi della richiesta
<a name="API_query_DeleteScheduledQuery_RequestSyntax"></a>

```
{
   "ScheduledQueryArn": "string"
}
```

## Parametri della richiesta
<a name="API_query_DeleteScheduledQuery_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [ScheduledQueryArn](#API_query_DeleteScheduledQuery_RequestSyntax) **   <a name="timestream-query_DeleteScheduledQuery-request-ScheduledQueryArn"></a>
L'ARN della query pianificata.   
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Obbligatorio: sì

## Elementi di risposta
<a name="API_query_DeleteScheduledQuery_ResponseElements"></a>

Se l'operazione riesce, il servizio invia una risposta HTTP 200 con un corpo HTTP vuoto.

## Errori
<a name="API_query_DeleteScheduledQuery_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non disponi delle autorizzazioni necessarie per accedere alle impostazioni dell'account.  
Codice di stato HTTP: 400

 ** InternalServerException **   
Si è verificato un errore interno del server durante l'elaborazione della richiesta.  
Codice di stato HTTP: 400

 ** InvalidEndpointException **   
L'endpoint richiesto non è valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
Impossibile trovare la risorsa richiesta.    
 ** ScheduledQueryArn **   
L'ARN della query pianificata.
Codice di stato HTTP: 400

 ** ThrottlingException **   
La richiesta è stata limitata a causa di un numero eccessivo di richieste.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.   
Codice di stato HTTP: 400

## Vedi anche
<a name="API_query_DeleteScheduledQuery_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-query-2018-11-01/DeleteScheduledQuery) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-query-2018-11-01/DeleteScheduledQuery) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/DeleteScheduledQuery) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-query-2018-11-01/DeleteScheduledQuery) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/DeleteScheduledQuery) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-query-2018-11-01/DeleteScheduledQuery) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-query-2018-11-01/DeleteScheduledQuery) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-query-2018-11-01/DeleteScheduledQuery) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-query-2018-11-01/DeleteScheduledQuery) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/DeleteScheduledQuery) 

# DescribeAccountSettings
<a name="API_query_DescribeAccountSettings"></a>

Descrive le impostazioni dell'account che includono il modello di determinazione dei prezzi delle query e il numero massimo configurato che TCUs il servizio può utilizzare per il carico di lavoro delle query.

Ti viene addebitata solo la durata delle unità di calcolo utilizzate per i tuoi carichi di lavoro.

## Sintassi della risposta
<a name="API_query_DescribeAccountSettings_ResponseSyntax"></a>

```
{
   "MaxQueryTCU": number,
   "QueryCompute": { 
      "ComputeMode": "string",
      "ProvisionedCapacity": { 
         "ActiveQueryTCU": number,
         "LastUpdate": { 
            "Status": "string",
            "StatusMessage": "string",
            "TargetQueryTCU": number
         },
         "NotificationConfiguration": { 
            "RoleArn": "string",
            "SnsConfiguration": { 
               "TopicArn": "string"
            }
         }
      }
   },
   "QueryPricingModel": "string"
}
```

## Elementi di risposta
<a name="API_query_DescribeAccountSettings_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [MaxQueryTCU](#API_query_DescribeAccountSettings_ResponseSyntax) **   <a name="timestream-query_DescribeAccountSettings-response-MaxQueryTCU"></a>
Il numero massimo di [unità di calcolo Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/tcu.html) (TCUs) che il servizio utilizzerà in qualsiasi momento per rispondere alle tue domande. Per eseguire le query, è necessario impostare una capacità minima di 4 TCU. È possibile impostare il numero massimo di TCU in multipli di 4, ad esempio 4, 8, 16, 32 e così via. Questa configurazione è applicabile solo per l'utilizzo su richiesta di (). TCUs   
Tipo: numero intero

 ** [QueryCompute](#API_query_DescribeAccountSettings_ResponseSyntax) **   <a name="timestream-query_DescribeAccountSettings-response-QueryCompute"></a>
Un oggetto che contiene le impostazioni di utilizzo per Timestream Compute Units (TCUs) nel tuo account per il carico di lavoro delle query. QueryCompute è disponibile solo nella regione Asia Pacifico (Mumbai).  
Tipo: oggetto [QueryComputeResponse](API_query_QueryComputeResponse.md)

 ** [QueryPricingModel](#API_query_DescribeAccountSettings_ResponseSyntax) **   <a name="timestream-query_DescribeAccountSettings-response-QueryPricingModel"></a>
Il modello di prezzo per le domande nel tuo account.  
Il `QueryPricingModel` parametro viene utilizzato da diverse operazioni Timestream; tuttavia, l'operazione `UpdateAccountSettings` API non riconosce alcun valore diverso da. `COMPUTE_UNITS`
Tipo: String  
Valori validi: `BYTES_SCANNED | COMPUTE_UNITS` 

## Errori
<a name="API_query_DescribeAccountSettings_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non disponi delle autorizzazioni necessarie per accedere alle impostazioni dell'account.  
Codice di stato HTTP: 400

 ** InternalServerException **   
Si è verificato un errore interno del server durante l'elaborazione della richiesta.  
Codice di stato HTTP: 400

 ** InvalidEndpointException **   
L'endpoint richiesto non è valido.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
La richiesta è stata limitata a causa di un numero eccessivo di richieste.  
Codice di stato HTTP: 400

## Vedi anche
<a name="API_query_DescribeAccountSettings_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-query-2018-11-01/DescribeAccountSettings) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-query-2018-11-01/DescribeAccountSettings) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/DescribeAccountSettings) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-query-2018-11-01/DescribeAccountSettings) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/DescribeAccountSettings) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-query-2018-11-01/DescribeAccountSettings) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-query-2018-11-01/DescribeAccountSettings) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-query-2018-11-01/DescribeAccountSettings) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-query-2018-11-01/DescribeAccountSettings) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/DescribeAccountSettings) 

# DescribeEndpoints
<a name="API_query_DescribeEndpoints"></a>

DescribeEndpoints restituisce un elenco di endpoint disponibili su cui effettuare chiamate API Timestream. Questa API è disponibile sia tramite Write che Query.

Poiché i Timestream SDKs sono progettati per funzionare in modo trasparente con l'architettura del servizio, inclusa la gestione e la mappatura degli endpoint del servizio, *non è consigliabile utilizzare questa API a meno che*:
+ Stai utilizzando [endpoint VPC ()AWS PrivateLink](https://docs.aws.amazon.com/timestream/latest/developerguide/VPCEndpoints) con Timestream 
+ L'applicazione utilizza un linguaggio di programmazione che non supporta ancora l'SDK
+ È necessario un controllo migliore sull'implementazione lato client

Per informazioni dettagliate su come e quando utilizzare e implementare DescribeEndpoints, consulta [The Endpoint](https://docs.aws.amazon.com/timestream/latest/developerguide/Using.API.html#Using-API.endpoint-discovery) Discovery Pattern.

## Sintassi della risposta
<a name="API_query_DescribeEndpoints_ResponseSyntax"></a>

```
{
   "Endpoints": [ 
      { 
         "Address": "string",
         "CachePeriodInMinutes": number
      }
   ]
}
```

## Elementi di risposta
<a name="API_query_DescribeEndpoints_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [Endpoints](#API_query_DescribeEndpoints_ResponseSyntax) **   <a name="timestream-query_DescribeEndpoints-response-Endpoints"></a>
Un `Endpoints` oggetto viene restituito quando viene effettuata una `DescribeEndpoints` richiesta.  
Tipo: matrice di oggetti [Endpoint](API_query_Endpoint.md)

## Errori
<a name="API_query_DescribeEndpoints_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** InternalServerException **   
Si è verificato un errore interno del server durante l'elaborazione della richiesta.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
La richiesta è stata limitata a causa di un numero eccessivo di richieste.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.   
Codice di stato HTTP: 400

## Vedi anche
<a name="API_query_DescribeEndpoints_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-query-2018-11-01/DescribeEndpoints) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-query-2018-11-01/DescribeEndpoints) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/DescribeEndpoints) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-query-2018-11-01/DescribeEndpoints) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/DescribeEndpoints) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-query-2018-11-01/DescribeEndpoints) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-query-2018-11-01/DescribeEndpoints) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-query-2018-11-01/DescribeEndpoints) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-query-2018-11-01/DescribeEndpoints) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/DescribeEndpoints) 

# DescribeScheduledQuery
<a name="API_query_DescribeScheduledQuery"></a>

Fornisce informazioni dettagliate su un'interrogazione pianificata.

## Sintassi della richiesta
<a name="API_query_DescribeScheduledQuery_RequestSyntax"></a>

```
{
   "ScheduledQueryArn": "string"
}
```

## Parametri della richiesta
<a name="API_query_DescribeScheduledQuery_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [ScheduledQueryArn](#API_query_DescribeScheduledQuery_RequestSyntax) **   <a name="timestream-query_DescribeScheduledQuery-request-ScheduledQueryArn"></a>
L'ARN della query pianificata.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Obbligatorio: sì

## Sintassi della risposta
<a name="API_query_DescribeScheduledQuery_ResponseSyntax"></a>

```
{
   "ScheduledQuery": { 
      "Arn": "string",
      "CreationTime": number,
      "ErrorReportConfiguration": { 
         "S3Configuration": { 
            "BucketName": "string",
            "EncryptionOption": "string",
            "ObjectKeyPrefix": "string"
         }
      },
      "KmsKeyId": "string",
      "LastRunSummary": { 
         "ErrorReportLocation": { 
            "S3ReportLocation": { 
               "BucketName": "string",
               "ObjectKey": "string"
            }
         },
         "ExecutionStats": { 
            "BytesMetered": number,
            "CumulativeBytesScanned": number,
            "DataWrites": number,
            "ExecutionTimeInMillis": number,
            "QueryResultRows": number,
            "RecordsIngested": number
         },
         "FailureReason": "string",
         "InvocationTime": number,
         "QueryInsightsResponse": { 
            "OutputBytes": number,
            "OutputRows": number,
            "QuerySpatialCoverage": { 
               "Max": { 
                  "PartitionKey": [ "string" ],
                  "TableArn": "string",
                  "Value": number
               }
            },
            "QueryTableCount": number,
            "QueryTemporalRange": { 
               "Max": { 
                  "TableArn": "string",
                  "Value": number
               }
            }
         },
         "RunStatus": "string",
         "TriggerTime": number
      },
      "Name": "string",
      "NextInvocationTime": number,
      "NotificationConfiguration": { 
         "SnsConfiguration": { 
            "TopicArn": "string"
         }
      },
      "PreviousInvocationTime": number,
      "QueryString": "string",
      "RecentlyFailedRuns": [ 
         { 
            "ErrorReportLocation": { 
               "S3ReportLocation": { 
                  "BucketName": "string",
                  "ObjectKey": "string"
               }
            },
            "ExecutionStats": { 
               "BytesMetered": number,
               "CumulativeBytesScanned": number,
               "DataWrites": number,
               "ExecutionTimeInMillis": number,
               "QueryResultRows": number,
               "RecordsIngested": number
            },
            "FailureReason": "string",
            "InvocationTime": number,
            "QueryInsightsResponse": { 
               "OutputBytes": number,
               "OutputRows": number,
               "QuerySpatialCoverage": { 
                  "Max": { 
                     "PartitionKey": [ "string" ],
                     "TableArn": "string",
                     "Value": number
                  }
               },
               "QueryTableCount": number,
               "QueryTemporalRange": { 
                  "Max": { 
                     "TableArn": "string",
                     "Value": number
                  }
               }
            },
            "RunStatus": "string",
            "TriggerTime": number
         }
      ],
      "ScheduleConfiguration": { 
         "ScheduleExpression": "string"
      },
      "ScheduledQueryExecutionRoleArn": "string",
      "State": "string",
      "TargetConfiguration": { 
         "TimestreamConfiguration": { 
            "DatabaseName": "string",
            "DimensionMappings": [ 
               { 
                  "DimensionValueType": "string",
                  "Name": "string"
               }
            ],
            "MeasureNameColumn": "string",
            "MixedMeasureMappings": [ 
               { 
                  "MeasureName": "string",
                  "MeasureValueType": "string",
                  "MultiMeasureAttributeMappings": [ 
                     { 
                        "MeasureValueType": "string",
                        "SourceColumn": "string",
                        "TargetMultiMeasureAttributeName": "string"
                     }
                  ],
                  "SourceColumn": "string",
                  "TargetMeasureName": "string"
               }
            ],
            "MultiMeasureMappings": { 
               "MultiMeasureAttributeMappings": [ 
                  { 
                     "MeasureValueType": "string",
                     "SourceColumn": "string",
                     "TargetMultiMeasureAttributeName": "string"
                  }
               ],
               "TargetMultiMeasureName": "string"
            },
            "TableName": "string",
            "TimeColumn": "string"
         }
      }
   }
}
```

## Elementi di risposta
<a name="API_query_DescribeScheduledQuery_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [ScheduledQuery](#API_query_DescribeScheduledQuery_ResponseSyntax) **   <a name="timestream-query_DescribeScheduledQuery-response-ScheduledQuery"></a>
L'interrogazione pianificata.  
Tipo: oggetto [ScheduledQueryDescription](API_query_ScheduledQueryDescription.md)

## Errori
<a name="API_query_DescribeScheduledQuery_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non disponi delle autorizzazioni necessarie per accedere alle impostazioni dell'account.  
Codice di stato HTTP: 400

 ** InternalServerException **   
Si è verificato un errore interno del server durante l'elaborazione della richiesta.  
Codice di stato HTTP: 400

 ** InvalidEndpointException **   
L'endpoint richiesto non è valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
Impossibile trovare la risorsa richiesta.    
 ** ScheduledQueryArn **   
L'ARN della query pianificata.
Codice di stato HTTP: 400

 ** ThrottlingException **   
La richiesta è stata limitata a causa di un numero eccessivo di richieste.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.   
Codice di stato HTTP: 400

## Vedi anche
<a name="API_query_DescribeScheduledQuery_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-query-2018-11-01/DescribeScheduledQuery) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-query-2018-11-01/DescribeScheduledQuery) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/DescribeScheduledQuery) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-query-2018-11-01/DescribeScheduledQuery) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/DescribeScheduledQuery) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-query-2018-11-01/DescribeScheduledQuery) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-query-2018-11-01/DescribeScheduledQuery) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-query-2018-11-01/DescribeScheduledQuery) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-query-2018-11-01/DescribeScheduledQuery) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/DescribeScheduledQuery) 

# ExecuteScheduledQuery
<a name="API_query_ExecuteScheduledQuery"></a>

 Puoi utilizzare questa API per eseguire manualmente una query pianificata. 

Se abilitata`QueryInsights`, questa API restituisce anche informazioni e metriche relative alla query che hai eseguito come parte di una notifica Amazon SNS. `QueryInsights`aiuta a ottimizzare le prestazioni della tua query. Per ulteriori informazioni su`QueryInsights`, consulta [Usare le informazioni sulle query per ottimizzare le query in Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/using-query-insights.html).

## Sintassi della richiesta
<a name="API_query_ExecuteScheduledQuery_RequestSyntax"></a>

```
{
   "ClientToken": "string",
   "InvocationTime": number,
   "QueryInsights": { 
      "Mode": "string"
   },
   "ScheduledQueryArn": "string"
}
```

## Parametri della richiesta
<a name="API_query_ExecuteScheduledQuery_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [ClientToken](#API_query_ExecuteScheduledQuery_RequestSyntax) **   <a name="timestream-query_ExecuteScheduledQuery-request-ClientToken"></a>
Non utilizzato.   
Tipo: String  
Vincoli di lunghezza: lunghezza minima di 32. La lunghezza massima è 128 caratteri.  
Obbligatorio: no

 ** [InvocationTime](#API_query_ExecuteScheduledQuery_RequestSyntax) **   <a name="timestream-query_ExecuteScheduledQuery-request-InvocationTime"></a>
Il timestamp in UTC. La query verrà eseguita come se fosse stata richiamata in questo timestamp.   
Tipo: Timestamp  
Obbligatorio: sì

 ** [QueryInsights](#API_query_ExecuteScheduledQuery_RequestSyntax) **   <a name="timestream-query_ExecuteScheduledQuery-request-QueryInsights"></a>
Incapsula le impostazioni per l'attivazione. `QueryInsights`  
Attivazione di approfondimenti e metriche sui `QueryInsights` resi come parte della notifica Amazon SNS per la query che hai eseguito. Puoi utilizzarla `QueryInsights` per ottimizzare le prestazioni e i costi delle query.  
Tipo: oggetto [ScheduledQueryInsights](API_query_ScheduledQueryInsights.md)  
Obbligatorio: no

 ** [ScheduledQueryArn](#API_query_ExecuteScheduledQuery_RequestSyntax) **   <a name="timestream-query_ExecuteScheduledQuery-request-ScheduledQueryArn"></a>
ARN della query pianificata.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Obbligatorio: sì

## Elementi di risposta
<a name="API_query_ExecuteScheduledQuery_ResponseElements"></a>

Se l'operazione riesce, il servizio invia una risposta HTTP 200 con un corpo HTTP vuoto.

## Errori
<a name="API_query_ExecuteScheduledQuery_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non disponi delle autorizzazioni necessarie per accedere alle impostazioni dell'account.  
Codice di stato HTTP: 400

 ** InternalServerException **   
Si è verificato un errore interno del server durante l'elaborazione della richiesta.  
Codice di stato HTTP: 400

 ** InvalidEndpointException **   
L'endpoint richiesto non è valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
Impossibile trovare la risorsa richiesta.    
 ** ScheduledQueryArn **   
L'ARN della query pianificata.
Codice di stato HTTP: 400

 ** ThrottlingException **   
La richiesta è stata limitata a causa di un numero eccessivo di richieste.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.   
Codice di stato HTTP: 400

## Esempi
<a name="API_query_ExecuteScheduledQuery_Examples"></a>

### Messaggio di notifica di interrogazione pianificata per la modalità ENABLED\$1WITH\$1RATE\$1CONTROL
<a name="API_query_ExecuteScheduledQuery_Example_1"></a>

L'esempio seguente mostra un messaggio di notifica di interrogazione pianificata riuscita per la modalità del parametro. `ENABLED_WITH_RATE_CONTROL` `QueryInsights`

```
"SuccessNotificationMessage": {
    "type": "MANUAL_TRIGGER_SUCCESS",
    "arn": "arn:aws:timestream:<Region>:<Account>:scheduled-query/sq-test-49c6ed55-c2e7-4cc2-9956-4a0ecea13420-80e05b035236a4c3",
    "scheduledQueryRunSummary": {
        "invocationEpochSecond": 1723710546,
        "triggerTimeMillis": 1723710547490,
        "runStatus": "MANUAL_TRIGGER_SUCCESS",
        "executionStats": {
            "executionTimeInMillis": 17343,
            "dataWrites": 1024,
            "bytesMetered": 0,
            "cumulativeBytesScanned": 600,
            "recordsIngested": 1,
            "queryResultRows": 1
        },
        "queryInsightsResponse": {
            "querySpatialCoverage": {
                "max": {
                    "value": 1.0,
                    "tableArn": "arn:aws:timestream:<Region>:<Account>:database/BaseDb/table/BaseTable",
                    "partitionKey": [
                        "measure_name"
                    ]
                }
            },
            "queryTemporalRange": {
                "max": {
                    "value": 2399999999999,
                    "tableArn": "arn:aws:timestream:<Region>:<Account>:database/BaseDb/table/BaseTable"
                }
            },
            "queryTableCount": 1,
            "outputRows": 1,
            "outputBytes": 59
        }
    }
}
```

### Messaggio di notifica delle interrogazioni pianificate per la modalità DISABLED
<a name="API_query_ExecuteScheduledQuery_Example_2"></a>

L'esempio seguente mostra un messaggio di notifica di interrogazione pianificata riuscita per la `DISABLED` modalità del `QueryInsights` parametro.

```
"SuccessNotificationMessage": {
    "type": "MANUAL_TRIGGER_SUCCESS",
    "arn": "arn:aws:timestream:<Region>:<Account>:scheduled-query/sq-test-fa109d9e-6528-4a0d-ac40-482fa05e657f-140faaeecdc5b2a7",
    "scheduledQueryRunSummary": {
        "invocationEpochSecond": 1723711401,
        "triggerTimeMillis": 1723711402144,
        "runStatus": "MANUAL_TRIGGER_SUCCESS",
        "executionStats": {
            "executionTimeInMillis": 17992,
            "dataWrites": 1024,
            "bytesMetered": 0,
            "cumulativeBytesScanned": 600,
            "recordsIngested": 1,
            "queryResultRows": 1
        }
    }
}
```

### Messaggio di notifica di errore per la modalità ENABLED\$1WITH\$1RATE\$1CONTROL
<a name="API_query_ExecuteScheduledQuery_Example_3"></a>

L'esempio seguente mostra un messaggio di notifica di interrogazione pianificata non riuscita per la modalità del parametro. `ENABLED_WITH_RATE_CONTROL` `QueryInsights`

```
"FailureNotificationMessage": {
    "type": "MANUAL_TRIGGER_FAILURE",
    "arn": "arn:aws:timestream:<Region>:<Account>:scheduled-query/sq-test-b261670d-790c-4116-9db5-0798071b18b1-b7e27a1d79be226d",
    "scheduledQueryRunSummary": {
        "invocationEpochSecond": 1727915513,
        "triggerTimeMillis": 1727915513894,
        "runStatus": "MANUAL_TRIGGER_FAILURE",
        "executionStats": {
            "executionTimeInMillis": 10777,
            "dataWrites": 0,
            "bytesMetered": 0,
            "cumulativeBytesScanned": 0,
            "recordsIngested": 0,
            "queryResultRows": 4
        },
        "errorReportLocation": {
            "s3ReportLocation": {
                "bucketName": "amzn-s3-demo-bucket",
                "objectKey": "4my-organization-f7a3c5d065a1a95e/1727915513/MANUAL/1727915513894/5e14b3df-b147-49f4-9331-784f749b68ae"
            }
        },
        "failureReason": "Schedule encountered some errors and is incomplete. Please take a look at error report for further details"
    }
}
```

### Messaggio di notifica di errore per la modalità DISABLED
<a name="API_query_ExecuteScheduledQuery_Example_4"></a>

L'esempio seguente mostra un messaggio di notifica di interrogazione pianificata non riuscita per la `DISABLED` modalità del `QueryInsights` parametro.

```
"FailureNotificationMessage": {
    "type": "MANUAL_TRIGGER_FAILURE",
    "arn": "arn:aws:timestream:<Region>:<Account>:scheduled-query/sq-test-b261670d-790c-4116-9db5-0798071b18b1-b7e27a1d79be226d",
    "scheduledQueryRunSummary": {
        "invocationEpochSecond": 1727915194,
        "triggerTimeMillis": 1727915195119,
        "runStatus": "MANUAL_TRIGGER_FAILURE",
        "executionStats": {
            "executionTimeInMillis": 10777,
            "dataWrites": 0,
            "bytesMetered": 0,
            "cumulativeBytesScanned": 0,
            "recordsIngested": 0,
            "queryResultRows": 4
        },
        "errorReportLocation": {
            "s3ReportLocation": {
                "bucketName": "amzn-s3-demo-bucket",
                "objectKey": "4my-organization-b7e27a1d79be226d/1727915194/MANUAL/1727915195119/08dea9f5-9a0a-4e63-a5f7-ded23247bb98"
            }
        },
        "failureReason": "Schedule encountered some errors and is incomplete. Please take a look at error report for further details"
    }
}
```

## Vedi anche
<a name="API_query_ExecuteScheduledQuery_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-query-2018-11-01/ExecuteScheduledQuery) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-query-2018-11-01/ExecuteScheduledQuery) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/ExecuteScheduledQuery) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-query-2018-11-01/ExecuteScheduledQuery) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/ExecuteScheduledQuery) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-query-2018-11-01/ExecuteScheduledQuery) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-query-2018-11-01/ExecuteScheduledQuery) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-query-2018-11-01/ExecuteScheduledQuery) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-query-2018-11-01/ExecuteScheduledQuery) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/ExecuteScheduledQuery) 

# ListScheduledQueries
<a name="API_query_ListScheduledQueries"></a>

Ottiene un elenco di tutte le domande pianificate nell'account Amazon e nella regione del chiamante. `ListScheduledQueries`alla fine è coerente. 

## Sintassi della richiesta
<a name="API_query_ListScheduledQueries_RequestSyntax"></a>

```
{
   "MaxResults": number,
   "NextToken": "string"
}
```

## Parametri della richiesta
<a name="API_query_ListScheduledQueries_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [MaxResults](#API_query_ListScheduledQueries_RequestSyntax) **   <a name="timestream-query_ListScheduledQueries-request-MaxResults"></a>
Il numero massimo di elementi da restituire nell'output. Se il numero totale di articoli disponibili è superiore al valore specificato, nell'output `NextToken` viene fornito un. Per riprendere l'impaginazione, fornite il `NextToken` valore come argomento per la successiva chiamata a. `ListScheduledQueriesRequest`  
Tipo: numero intero  
Intervallo valido: valore minimo di 1. Valore massimo pari a 1000.  
Obbligatorio: no

 ** [NextToken](#API_query_ListScheduledQueries_RequestSyntax) **   <a name="timestream-query_ListScheduledQueries-request-NextToken"></a>
 Un token di impaginazione per riprendere l'impaginazione.  
▬Tipo: stringa  
Obbligatorio: no

## Sintassi della risposta
<a name="API_query_ListScheduledQueries_ResponseSyntax"></a>

```
{
   "NextToken": "string",
   "ScheduledQueries": [ 
      { 
         "Arn": "string",
         "CreationTime": number,
         "ErrorReportConfiguration": { 
            "S3Configuration": { 
               "BucketName": "string",
               "EncryptionOption": "string",
               "ObjectKeyPrefix": "string"
            }
         },
         "LastRunStatus": "string",
         "Name": "string",
         "NextInvocationTime": number,
         "PreviousInvocationTime": number,
         "State": "string",
         "TargetDestination": { 
            "TimestreamDestination": { 
               "DatabaseName": "string",
               "TableName": "string"
            }
         }
      }
   ]
}
```

## Elementi di risposta
<a name="API_query_ListScheduledQueries_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [NextToken](#API_query_ListScheduledQueries_ResponseSyntax) **   <a name="timestream-query_ListScheduledQueries-response-NextToken"></a>
Token per specificare dove iniziare l'impaginazione. Questo è il risultato di una NextToken risposta precedentemente troncata.  
Tipo: String

 ** [ScheduledQueries](#API_query_ListScheduledQueries_ResponseSyntax) **   <a name="timestream-query_ListScheduledQueries-response-ScheduledQueries"></a>
Un elenco di interrogazioni pianificate.  
Tipo: matrice di oggetti [ScheduledQuery](API_query_ScheduledQuery.md)

## Errori
<a name="API_query_ListScheduledQueries_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non disponi delle autorizzazioni necessarie per accedere alle impostazioni dell'account.  
Codice di stato HTTP: 400

 ** InternalServerException **   
Si è verificato un errore interno del server durante l'elaborazione della richiesta.  
Codice di stato HTTP: 400

 ** InvalidEndpointException **   
L'endpoint richiesto non è valido.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
La richiesta è stata limitata a causa di un numero eccessivo di richieste.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.   
Codice di stato HTTP: 400

## Vedi anche
<a name="API_query_ListScheduledQueries_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-query-2018-11-01/ListScheduledQueries) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-query-2018-11-01/ListScheduledQueries) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/ListScheduledQueries) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-query-2018-11-01/ListScheduledQueries) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/ListScheduledQueries) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-query-2018-11-01/ListScheduledQueries) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-query-2018-11-01/ListScheduledQueries) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-query-2018-11-01/ListScheduledQueries) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-query-2018-11-01/ListScheduledQueries) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/ListScheduledQueries) 

# ListTagsForResource
<a name="API_query_ListTagsForResource"></a>

Elenca tutti i tag su una risorsa di query Timestream.

## Sintassi della richiesta
<a name="API_query_ListTagsForResource_RequestSyntax"></a>

```
{
   "MaxResults": number,
   "NextToken": "string",
   "ResourceARN": "string"
}
```

## Parametri della richiesta
<a name="API_query_ListTagsForResource_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [MaxResults](#API_query_ListTagsForResource_RequestSyntax) **   <a name="timestream-query_ListTagsForResource-request-MaxResults"></a>
Il numero massimo di tag da restituire.  
Tipo: numero intero  
Intervallo valido: valore minimo di 1. valore massimo pari a 200.  
Obbligatorio: no

 ** [NextToken](#API_query_ListTagsForResource_RequestSyntax) **   <a name="timestream-query_ListTagsForResource-request-NextToken"></a>
Un token di impaginazione per riprendere l'impaginazione.  
▬Tipo: stringa  
Obbligatorio: no

 ** [ResourceARN](#API_query_ListTagsForResource_RequestSyntax) **   <a name="timestream-query_ListTagsForResource-request-ResourceARN"></a>
La risorsa Timestream con i tag da elencare. Questo valore è un Amazon Resource Name (ARN).  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Obbligatorio: sì

## Sintassi della risposta
<a name="API_query_ListTagsForResource_ResponseSyntax"></a>

```
{
   "NextToken": "string",
   "Tags": [ 
      { 
         "Key": "string",
         "Value": "string"
      }
   ]
}
```

## Elementi di risposta
<a name="API_query_ListTagsForResource_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [NextToken](#API_query_ListTagsForResource_ResponseSyntax) **   <a name="timestream-query_ListTagsForResource-response-NextToken"></a>
Un token di impaginazione per riprendere l'impaginazione con una chiamata successiva a. `ListTagsForResourceResponse`  
Tipo: String

 ** [Tags](#API_query_ListTagsForResource_ResponseSyntax) **   <a name="timestream-query_ListTagsForResource-response-Tags"></a>
I tag attualmente associati alla risorsa Timestream.   
Tipo: matrice di oggetti [Tag](API_query_Tag.md)  
Membri dell'array: numero minimo di 0 elementi. Numero massimo di 200 elementi.

## Errori
<a name="API_query_ListTagsForResource_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** InvalidEndpointException **   
L'endpoint richiesto non è valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
Impossibile trovare la risorsa richiesta.    
 ** ScheduledQueryArn **   
L'ARN della query pianificata.
Codice di stato HTTP: 400

 ** ThrottlingException **   
La richiesta è stata limitata a causa di un numero eccessivo di richieste.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.   
Codice di stato HTTP: 400

## Vedi anche
<a name="API_query_ListTagsForResource_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-query-2018-11-01/ListTagsForResource) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-query-2018-11-01/ListTagsForResource) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/ListTagsForResource) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-query-2018-11-01/ListTagsForResource) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/ListTagsForResource) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-query-2018-11-01/ListTagsForResource) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-query-2018-11-01/ListTagsForResource) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-query-2018-11-01/ListTagsForResource) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-query-2018-11-01/ListTagsForResource) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/ListTagsForResource) 

# PrepareQuery
<a name="API_query_PrepareQuery"></a>

Un'operazione sincrona che consente di inviare una query con parametri da archiviare da Timestream per un'esecuzione successiva. Timestream supporta l'utilizzo di questa operazione solo con set to. `ValidateOnly` `true` 

## Sintassi della richiesta
<a name="API_query_PrepareQuery_RequestSyntax"></a>

```
{
   "QueryString": "string",
   "ValidateOnly": boolean
}
```

## Parametri della richiesta
<a name="API_query_PrepareQuery_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [QueryString](#API_query_PrepareQuery_RequestSyntax) **   <a name="timestream-query_PrepareQuery-request-QueryString"></a>
La stringa di query Timestream che desideri utilizzare come istruzione preparata. I nomi dei parametri possono essere specificati nella stringa query dal carattere `@` seguito da un identificatore.   
Tipo: String  
Limitazioni di lunghezza: lunghezza minima pari a 1. Lunghezza massima di 262144.  
Obbligatorio: sì

 ** [ValidateOnly](#API_query_PrepareQuery_RequestSyntax) **   <a name="timestream-query_PrepareQuery-request-ValidateOnly"></a>
Impostando questo valore su`true`, Timestream convaliderà solo che la stringa di query sia una query Timestream valida e non memorizzerà la query preparata per un uso successivo.  
Tipo: Booleano  
Obbligatorio: no

## Sintassi della risposta
<a name="API_query_PrepareQuery_ResponseSyntax"></a>

```
{
   "Columns": [ 
      { 
         "Aliased": boolean,
         "DatabaseName": "string",
         "Name": "string",
         "TableName": "string",
         "Type": { 
            "ArrayColumnInfo": { 
               "Name": "string",
               "Type": "Type"
            },
            "RowColumnInfo": [ 
               { 
                  "Name": "string",
                  "Type": "Type"
               }
            ],
            "ScalarType": "string",
            "TimeSeriesMeasureValueColumnInfo": { 
               "Name": "string",
               "Type": "Type"
            }
         }
      }
   ],
   "Parameters": [ 
      { 
         "Name": "string",
         "Type": { 
            "ArrayColumnInfo": { 
               "Name": "string",
               "Type": "Type"
            },
            "RowColumnInfo": [ 
               { 
                  "Name": "string",
                  "Type": "Type"
               }
            ],
            "ScalarType": "string",
            "TimeSeriesMeasureValueColumnInfo": { 
               "Name": "string",
               "Type": "Type"
            }
         }
      }
   ],
   "QueryString": "string"
}
```

## Elementi di risposta
<a name="API_query_PrepareQuery_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [Columns](#API_query_PrepareQuery_ResponseSyntax) **   <a name="timestream-query_PrepareQuery-response-Columns"></a>
Un elenco di colonne della clausola SELECT della stringa di query inviata.   
Tipo: matrice di oggetti [SelectColumn](API_query_SelectColumn.md)

 ** [Parameters](#API_query_PrepareQuery_ResponseSyntax) **   <a name="timestream-query_PrepareQuery-response-Parameters"></a>
Un elenco di parametri utilizzati nella stringa di query inviata.   
Tipo: matrice di oggetti [ParameterMapping](API_query_ParameterMapping.md)

 ** [QueryString](#API_query_PrepareQuery_ResponseSyntax) **   <a name="timestream-query_PrepareQuery-response-QueryString"></a>
La stringa di query che si desidera preparare.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima pari a 1. Lunghezza massima di 262144.

## Errori
<a name="API_query_PrepareQuery_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non disponi delle autorizzazioni necessarie per accedere alle impostazioni dell'account.  
Codice di stato HTTP: 400

 ** InternalServerException **   
Si è verificato un errore interno del server durante l'elaborazione della richiesta.  
Codice di stato HTTP: 400

 ** InvalidEndpointException **   
L'endpoint richiesto non è valido.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
La richiesta è stata limitata a causa di un numero eccessivo di richieste.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.   
Codice di stato HTTP: 400

## Vedi anche
<a name="API_query_PrepareQuery_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-query-2018-11-01/PrepareQuery) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-query-2018-11-01/PrepareQuery) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/PrepareQuery) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-query-2018-11-01/PrepareQuery) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/PrepareQuery) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-query-2018-11-01/PrepareQuery) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-query-2018-11-01/PrepareQuery) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-query-2018-11-01/PrepareQuery) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-query-2018-11-01/PrepareQuery) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/PrepareQuery) 

# Query
<a name="API_query_Query"></a>

 `Query`è un'operazione sincrona che consente di eseguire una query sui dati di Amazon Timestream.

Se abilitata`QueryInsights`, questa API restituisce anche informazioni e metriche relative alla query che hai eseguito. `QueryInsights`aiuta a ottimizzare le prestazioni della query. Per ulteriori informazioni su`QueryInsights`, consulta [Using query insights per ottimizzare le query in Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/using-query-insights.html).

**Nota**  
Il numero massimo di richieste `Query` API che puoi effettuare con `QueryInsights` enabled è 1 query al secondo (QPS). Se superi questa frequenza di query, potrebbe verificarsi una limitazione.

 `Query`scadrà dopo 60 secondi. È necessario aggiornare il timeout predefinito nell'SDK per supportare un timeout di 60 secondi. Per i dettagli, consulta l'[esempio di codice](https://docs.aws.amazon.com/timestream/latest/developerguide/code-samples.run-query.html). 

La richiesta di interrogazione avrà esito negativo nei seguenti casi:
+  Se invii una `Query` richiesta con lo stesso token client al di fuori della finestra di idempotenza di 5 minuti. 
+  Se invii una `Query` richiesta con lo stesso token client, ma modifichi altri parametri, entro la finestra di idempotenza di 5 minuti. 
+  Se la dimensione della riga (inclusi i metadati della query) supera 1 MB, la query avrà esito negativo e verrà visualizzato il seguente messaggio di errore: 

   `Query aborted as max page response size has been exceeded by the output result row` 
+  Se il principale IAM dell'iniziatore della query e il lettore dei risultati non coincidono, l'iniziatore and/or della query e il lettore dei risultati non hanno la stessa stringa di query nelle richieste di query, la query avrà esito negativo e restituirà un errore. `Invalid pagination token` 

## Sintassi della richiesta
<a name="API_query_Query_RequestSyntax"></a>

```
{
   "ClientToken": "string",
   "MaxRows": number,
   "NextToken": "string",
   "QueryInsights": { 
      "Mode": "string"
   },
   "QueryString": "string"
}
```

## Parametri della richiesta
<a name="API_query_Query_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [ClientToken](#API_query_Query_RequestSyntax) **   <a name="timestream-query_Query-request-ClientToken"></a>
 Stringa unica, con distinzione tra maiuscole e minuscole, contenente un massimo di 64 caratteri ASCII, specificata quando viene effettuata una richiesta. `Query` *Fornire un `ClientToken` rende la chiamata idempotente. `Query`* Ciò significa che l'esecuzione ripetuta della stessa query produrrà lo stesso risultato. In altre parole, fare più `Query` richieste identiche ha lo stesso effetto di fare una singola richiesta. Quando si utilizza `ClientToken` in una query, tenete presente quanto segue:   
+  Se l'API Query viene istanziata senza un`ClientToken`, Query SDK genera un file per `ClientToken` conto dell'utente.
+ Se la `Query` chiamata contiene solo `ClientToken` ma non include a`NextToken`, si presume che tale invocazione di `Query` sia l'esecuzione di una nuova query.
+ Se la chiamata contiene`NextToken`, si presume che quella particolare invocazione sia una chiamata successiva di una precedente chiamata all'API Query e viene restituito un set di risultati.
+  Dopo 4 ore, qualsiasi richiesta con lo stesso valore `ClientToken` viene trattata come una nuova richiesta. 
Tipo: String  
Vincoli di lunghezza: lunghezza minima di 32. La lunghezza massima è 128 caratteri.  
Obbligatorio: no

 ** [MaxRows](#API_query_Query_RequestSyntax) **   <a name="timestream-query_Query-request-MaxRows"></a>
 Il numero totale di righe da restituire nell'`Query`output. L'esecuzione iniziale di `Query` con un `MaxRows` valore specificato restituirà il set di risultati della query in due casi:   
+ La dimensione del risultato è inferiore a`1MB`.
+ Il numero di righe nel set di risultati è inferiore al valore di`maxRows`.
Altrimenti, l'invocazione iniziale di restituisce `Query` solo a`NextToken`, che può quindi essere utilizzato nelle chiamate successive per recuperare il set di risultati. Per riprendere l'impaginazione, fornite il `NextToken` valore nel comando successivo.  
Se la dimensione della riga è grande (ad esempio una riga ha molte colonne), Timestream può restituire un numero inferiore di righe per evitare che la dimensione della risposta superi il limite di 1 MB. Se non `MaxRows` viene fornito, Timestream invierà il numero di righe necessario per soddisfare il limite di 1 MB.  
Tipo: numero intero  
Intervallo valido: valore minimo di 1. Valore massimo pari a 1000.  
Obbligatorio: no

 ** [NextToken](#API_query_Query_RequestSyntax) **   <a name="timestream-query_Query-request-NextToken"></a>
 Un token di impaginazione utilizzato per restituire una serie di risultati. Quando l'`Query`API viene richiamata utilizzando`NextToken`, si presume che quella particolare invocazione sia una chiamata successiva di una chiamata precedente a e viene restituito un set di `Query` risultati. Tuttavia, se la `Query` chiamata contiene solo il, si presume che tale invocazione sia una nuova esecuzione di `Query` una query. `ClientToken`   
Quando si utilizza NextToken in una query, tenere presente quanto segue:  
+ Un token di impaginazione può essere utilizzato per un massimo di cinque `Query` chiamate, OPPURE per una durata massima di 1 ora, a seconda dell'evento che si verifica per primo.
+ L'utilizzo dello stesso `NextToken` restituirà lo stesso set di record. Per continuare a sfogliare il set di risultati, è necessario utilizzare i più recenti. `nextToken`
+ Supponiamo che una `Query` chiamata restituisca due valori e. `NextToken` `TokenA` `TokenB` Se `TokenB` viene utilizzato in una `Query` chiamata successiva, viene invalidato e non può essere `TokenA` riutilizzato.
+ Per richiedere un set di risultati precedente da una query dopo l'inizio dell'impaginazione, è necessario richiamare nuovamente l'API Query.
+ L'ultima `NextToken` deve essere utilizzata per impaginare fino a quando non `null` viene restituita, a quel punto deve essere usata una nuova`NextToken`.
+  Se il principale IAM dell'iniziatore di query e il lettore dei risultati non sono gli stessi and/or , l'iniziatore di query e il lettore di risultati non hanno la stessa stringa di query nelle richieste di query, la query avrà esito negativo e verrà generato un errore. `Invalid pagination token` 
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Obbligatorio: no

 ** [QueryInsights](#API_query_Query_RequestSyntax) **   <a name="timestream-query_Query-request-QueryInsights"></a>
Incapsula le impostazioni per l'abilitazione. `QueryInsights`  
L'attivazione `QueryInsights` restituisce approfondimenti e metriche oltre ai risultati delle query per la query eseguita. È possibile utilizzarlo `QueryInsights` per ottimizzare le prestazioni delle query.  
Tipo: oggetto [QueryInsights](API_query_QueryInsights.md)  
Obbligatorio: no

 ** [QueryString](#API_query_Query_RequestSyntax) **   <a name="timestream-query_Query-request-QueryString"></a>
 La query che deve essere eseguita da Timestream.   
Tipo: String  
Limitazioni di lunghezza: lunghezza minima pari a 1. Lunghezza massima di 262144.  
Obbligatorio: sì

## Sintassi della risposta
<a name="API_query_Query_ResponseSyntax"></a>

```
{
   "ColumnInfo": [ 
      { 
         "Name": "string",
         "Type": { 
            "ArrayColumnInfo": "ColumnInfo",
            "RowColumnInfo": [ 
               "ColumnInfo"
            ],
            "ScalarType": "string",
            "TimeSeriesMeasureValueColumnInfo": "ColumnInfo"
         }
      }
   ],
   "NextToken": "string",
   "QueryId": "string",
   "QueryInsightsResponse": { 
      "OutputBytes": number,
      "OutputRows": number,
      "QuerySpatialCoverage": { 
         "Max": { 
            "PartitionKey": [ "string" ],
            "TableArn": "string",
            "Value": number
         }
      },
      "QueryTableCount": number,
      "QueryTemporalRange": { 
         "Max": { 
            "TableArn": "string",
            "Value": number
         }
      },
      "UnloadPartitionCount": number,
      "UnloadWrittenBytes": number,
      "UnloadWrittenRows": number
   },
   "QueryStatus": { 
      "CumulativeBytesMetered": number,
      "CumulativeBytesScanned": number,
      "ProgressPercentage": number
   },
   "Rows": [ 
      { 
         "Data": [ 
            { 
               "ArrayValue": [ 
                  "Datum"
               ],
               "NullValue": boolean,
               "RowValue": "Row",
               "ScalarValue": "string",
               "TimeSeriesValue": [ 
                  { 
                     "Time": "string",
                     "Value": "Datum"
                  }
               ]
            }
         ]
      }
   ]
}
```

## Elementi di risposta
<a name="API_query_Query_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [ColumnInfo](#API_query_Query_ResponseSyntax) **   <a name="timestream-query_Query-response-ColumnInfo"></a>
 I tipi di dati delle colonne del set di risultati restituito.   
Tipo: matrice di oggetti [ColumnInfo](API_query_ColumnInfo.md)

 ** [NextToken](#API_query_Query_ResponseSyntax) **   <a name="timestream-query_Query-response-NextToken"></a>
 Un token di impaginazione che può essere riutilizzato durante una `Query` chiamata per ottenere il successivo set di risultati.   
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.

 ** [QueryId](#API_query_Query_ResponseSyntax) **   <a name="timestream-query_Query-response-QueryId"></a>
 Un ID univoco per la query specificata.   
Tipo: String  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 64 caratteri.  
Modello: `[a-zA-Z0-9]+` 

 ** [QueryInsightsResponse](#API_query_Query_ResponseSyntax) **   <a name="timestream-query_Query-response-QueryInsightsResponse"></a>
Incapsula `QueryInsights` contenente informazioni e metriche relative alla query che hai eseguito.  
Tipo: oggetto [QueryInsightsResponse](API_query_QueryInsightsResponse.md)

 ** [QueryStatus](#API_query_Query_ResponseSyntax) **   <a name="timestream-query_Query-response-QueryStatus"></a>
Informazioni sullo stato della query, inclusi lo stato di avanzamento e i byte scansionati.  
Tipo: oggetto [QueryStatus](API_query_QueryStatus.md)

 ** [Rows](#API_query_Query_ResponseSyntax) **   <a name="timestream-query_Query-response-Rows"></a>
 Le righe del set di risultati restituite dalla query.   
Tipo: matrice di oggetti [Row](API_query_Row.md)

## Errori
<a name="API_query_Query_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non disponi delle autorizzazioni necessarie per accedere alle impostazioni dell'account.  
Codice di stato HTTP: 400

 ** ConflictException **   
 Impossibile visualizzare i risultati di un sondaggio per una query annullata.   
Codice di stato HTTP: 400

 ** InternalServerException **   
Si è verificato un errore interno del server durante l'elaborazione della richiesta.  
Codice di stato HTTP: 400

 ** InvalidEndpointException **   
L'endpoint richiesto non è valido.  
Codice di stato HTTP: 400

 ** QueryExecutionException **   
 Timestream non è riuscito a eseguire la query con successo.   
Codice di stato HTTP: 400

 ** ThrottlingException **   
La richiesta è stata limitata a causa di un numero eccessivo di richieste.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.   
Codice di stato HTTP: 400

## Vedi anche
<a name="API_query_Query_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-query-2018-11-01/Query) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-query-2018-11-01/Query) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/Query) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-query-2018-11-01/Query) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/Query) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-query-2018-11-01/Query) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-query-2018-11-01/Query) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-query-2018-11-01/Query) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-query-2018-11-01/Query) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/Query) 

# TagResource
<a name="API_query_TagResource"></a>

Associa un set di tag a una risorsa Timestream. È quindi possibile attivare questi tag definiti dall'utente in modo che vengano visualizzati nella console di Billing and Cost Management per il monitoraggio dell'allocazione dei costi. 

## Sintassi della richiesta
<a name="API_query_TagResource_RequestSyntax"></a>

```
{
   "ResourceARN": "string",
   "Tags": [ 
      { 
         "Key": "string",
         "Value": "string"
      }
   ]
}
```

## Parametri della richiesta
<a name="API_query_TagResource_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [ResourceARN](#API_query_TagResource_RequestSyntax) **   <a name="timestream-query_TagResource-request-ResourceARN"></a>
Identifica la risorsa Timestream a cui aggiungere i tag. Questo valore è un Amazon Resource Name (ARN).  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Obbligatorio: sì

 ** [Tags](#API_query_TagResource_RequestSyntax) **   <a name="timestream-query_TagResource-request-Tags"></a>
I tag da assegnare alla risorsa Timestream.  
Tipo: matrice di oggetti [Tag](API_query_Tag.md)  
Membri dell'array: numero minimo di 0 elementi. Numero massimo di 200 elementi.  
Obbligatorio: sì

## Elementi di risposta
<a name="API_query_TagResource_ResponseElements"></a>

Se l'operazione riesce, il servizio invia una risposta HTTP 200 con un corpo HTTP vuoto.

## Errori
<a name="API_query_TagResource_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** InvalidEndpointException **   
L'endpoint richiesto non è valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
Impossibile trovare la risorsa richiesta.    
 ** ScheduledQueryArn **   
L'ARN della query pianificata.
Codice di stato HTTP: 400

 ** ServiceQuotaExceededException **   
Hai superato la quota di servizio.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
La richiesta è stata limitata a causa di un numero eccessivo di richieste.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.   
Codice di stato HTTP: 400

## Vedi anche
<a name="API_query_TagResource_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-query-2018-11-01/TagResource) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-query-2018-11-01/TagResource) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/TagResource) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-query-2018-11-01/TagResource) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/TagResource) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-query-2018-11-01/TagResource) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-query-2018-11-01/TagResource) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-query-2018-11-01/TagResource) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-query-2018-11-01/TagResource) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/TagResource) 

# UntagResource
<a name="API_query_UntagResource"></a>

Rimuove l'associazione di tag da una risorsa di query Timestream.

## Sintassi della richiesta
<a name="API_query_UntagResource_RequestSyntax"></a>

```
{
   "ResourceARN": "string",
   "TagKeys": [ "string" ]
}
```

## Parametri della richiesta
<a name="API_query_UntagResource_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [ResourceARN](#API_query_UntagResource_RequestSyntax) **   <a name="timestream-query_UntagResource-request-ResourceARN"></a>
La risorsa Timestream da cui verranno rimossi i tag. Questo valore è un Amazon Resource Name (ARN).   
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Obbligatorio: sì

 ** [TagKeys](#API_query_UntagResource_RequestSyntax) **   <a name="timestream-query_UntagResource-request-TagKeys"></a>
Un elenco di tag e chiavi. I tag esistenti della risorsa le cui chiavi sono membri di questo elenco verranno rimossi dalla risorsa Timestream.   
Tipo: array di stringhe  
Membri dell'array: numero minimo di 0 elementi. Numero massimo di 200 elementi.  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 128 caratteri.  
Obbligatorio: sì

## Elementi di risposta
<a name="API_query_UntagResource_ResponseElements"></a>

Se l'operazione riesce, il servizio invia una risposta HTTP 200 con un corpo HTTP vuoto.

## Errori
<a name="API_query_UntagResource_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** InvalidEndpointException **   
L'endpoint richiesto non è valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
Impossibile trovare la risorsa richiesta.    
 ** ScheduledQueryArn **   
L'ARN della query pianificata.
Codice di stato HTTP: 400

 ** ThrottlingException **   
La richiesta è stata limitata a causa di un numero eccessivo di richieste.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.   
Codice di stato HTTP: 400

## Vedi anche
<a name="API_query_UntagResource_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-query-2018-11-01/UntagResource) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-query-2018-11-01/UntagResource) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/UntagResource) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-query-2018-11-01/UntagResource) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/UntagResource) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-query-2018-11-01/UntagResource) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-query-2018-11-01/UntagResource) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-query-2018-11-01/UntagResource) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-query-2018-11-01/UntagResource) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/UntagResource) 

# UpdateAccountSettings
<a name="API_query_UpdateAccountSettings"></a>

Trasforma il tuo account in modo da utilizzarlo TCUs per la determinazione dei prezzi delle query e modifica il numero massimo di unità di calcolo delle query che hai configurato. Se riduci il valore di `MaxQueryTCU` alla configurazione desiderata, il nuovo valore può richiedere fino a 24 ore per essere efficace.

**Nota**  
Dopo aver trasferito il tuo account all'utilizzo TCUs per la determinazione dei prezzi delle query, non puoi passare all'utilizzo dei byte scansionati per la determinazione dei prezzi delle query.

## Sintassi della richiesta
<a name="API_query_UpdateAccountSettings_RequestSyntax"></a>

```
{
   "MaxQueryTCU": number,
   "QueryCompute": { 
      "ComputeMode": "string",
      "ProvisionedCapacity": { 
         "NotificationConfiguration": { 
            "RoleArn": "string",
            "SnsConfiguration": { 
               "TopicArn": "string"
            }
         },
         "TargetQueryTCU": number
      }
   },
   "QueryPricingModel": "string"
}
```

## Parametri della richiesta
<a name="API_query_UpdateAccountSettings_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [MaxQueryTCU](#API_query_UpdateAccountSettings_RequestSyntax) **   <a name="timestream-query_UpdateAccountSettings-request-MaxQueryTCU"></a>
Il numero massimo di unità di elaborazione che il servizio utilizzerà in qualsiasi momento per rispondere alle tue richieste. Per eseguire le query, è necessario impostare una capacità minima di 4 TCU. È possibile impostare il numero massimo di TCU in multipli di 4, ad esempio 4, 8, 16, 32 e così via. Il valore massimo supportato per `MaxQueryTCU` è 1000. Per richiedere un aumento di questo limite flessibile, contatta l' AWS assistenza. Per informazioni sulla quota predefinita per MaxQueryTCU, vedi Quote predefinite. Questa configurazione è applicabile solo all'utilizzo su richiesta di Timestream Compute Units (). TCUs  
Il valore massimo supportato per è 1000. `MaxQueryTCU` Per richiedere un aumento di questo limite flessibile, contatta l' AWS assistenza. Per informazioni sulla quota predefinita per`maxQueryTCU`, consulta [Quote predefinite](https://docs.aws.amazon.com/timestream/latest/developerguide/ts-limits.html#limits.default).  
Tipo: Integer  
Obbligatorio: no

 ** [QueryCompute](#API_query_UpdateAccountSettings_RequestSyntax) **   <a name="timestream-query_UpdateAccountSettings-request-QueryCompute"></a>
Modifica le impostazioni di calcolo delle query configurate nel tuo account, incluso il modello di determinazione dei prezzi delle query e le unità di calcolo Timestream () assegnate al tuo account. TCUs QueryCompute è disponibile solo nella regione Asia Pacifico (Mumbai).  
Questa API è idempotente, il che significa che effettuare la stessa richiesta più volte avrà lo stesso effetto della richiesta una sola volta.
Tipo: oggetto [QueryComputeRequest](API_query_QueryComputeRequest.md)  
Obbligatorio: no

 ** [QueryPricingModel](#API_query_UpdateAccountSettings_RequestSyntax) **   <a name="timestream-query_UpdateAccountSettings-request-QueryPricingModel"></a>
Il modello di prezzo per le richieste in un account.  
Il `QueryPricingModel` parametro viene utilizzato da diverse operazioni di Timestream; tuttavia, l'operazione `UpdateAccountSettings` API non riconosce alcun valore diverso da. `COMPUTE_UNITS`
Tipo: String  
Valori validi: `BYTES_SCANNED | COMPUTE_UNITS`   
Campo obbligatorio: no

## Sintassi della risposta
<a name="API_query_UpdateAccountSettings_ResponseSyntax"></a>

```
{
   "MaxQueryTCU": number,
   "QueryCompute": { 
      "ComputeMode": "string",
      "ProvisionedCapacity": { 
         "ActiveQueryTCU": number,
         "LastUpdate": { 
            "Status": "string",
            "StatusMessage": "string",
            "TargetQueryTCU": number
         },
         "NotificationConfiguration": { 
            "RoleArn": "string",
            "SnsConfiguration": { 
               "TopicArn": "string"
            }
         }
      }
   },
   "QueryPricingModel": "string"
}
```

## Elementi di risposta
<a name="API_query_UpdateAccountSettings_ResponseElements"></a>

Se l'operazione riesce, il servizio restituisce una risposta HTTP 200.

I dati seguenti vengono restituiti in formato JSON mediante il servizio.

 ** [MaxQueryTCU](#API_query_UpdateAccountSettings_ResponseSyntax) **   <a name="timestream-query_UpdateAccountSettings-response-MaxQueryTCU"></a>
Il numero massimo configurato di unità di calcolo che il servizio utilizzerà in qualsiasi momento per rispondere alle tue domande.  
Tipo: numero intero

 ** [QueryCompute](#API_query_UpdateAccountSettings_ResponseSyntax) **   <a name="timestream-query_UpdateAccountSettings-response-QueryCompute"></a>
Conferma le impostazioni aggiornate dell'account per l'interrogazione dei dati nel tuo account. QueryCompute è disponibile solo nella regione Asia Pacifico (Mumbai).  
Tipo: oggetto [QueryComputeResponse](API_query_QueryComputeResponse.md)

 ** [QueryPricingModel](#API_query_UpdateAccountSettings_ResponseSyntax) **   <a name="timestream-query_UpdateAccountSettings-response-QueryPricingModel"></a>
Il modello di prezzo per un account.  
Tipo: String  
Valori validi: `BYTES_SCANNED | COMPUTE_UNITS` 

## Errori
<a name="API_query_UpdateAccountSettings_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non disponi delle autorizzazioni necessarie per accedere alle impostazioni dell'account.  
Codice di stato HTTP: 400

 ** InternalServerException **   
Si è verificato un errore interno del server durante l'elaborazione della richiesta.  
Codice di stato HTTP: 400

 ** InvalidEndpointException **   
L'endpoint richiesto non è valido.  
Codice di stato HTTP: 400

 ** ThrottlingException **   
La richiesta è stata limitata a causa di un numero eccessivo di richieste.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.   
Codice di stato HTTP: 400

## Vedi anche
<a name="API_query_UpdateAccountSettings_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-query-2018-11-01/UpdateAccountSettings) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-query-2018-11-01/UpdateAccountSettings) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/UpdateAccountSettings) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-query-2018-11-01/UpdateAccountSettings) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/UpdateAccountSettings) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-query-2018-11-01/UpdateAccountSettings) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-query-2018-11-01/UpdateAccountSettings) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-query-2018-11-01/UpdateAccountSettings) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-query-2018-11-01/UpdateAccountSettings) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/UpdateAccountSettings) 

# UpdateScheduledQuery
<a name="API_query_UpdateScheduledQuery"></a>

Aggiorna un'interrogazione pianificata.

## Sintassi della richiesta
<a name="API_query_UpdateScheduledQuery_RequestSyntax"></a>

```
{
   "ScheduledQueryArn": "string",
   "State": "string"
}
```

## Parametri della richiesta
<a name="API_query_UpdateScheduledQuery_RequestParameters"></a>

Per informazioni sui parametri comuni per tutte le azioni, consulta [Parametri comuni](CommonParameters.md).

La richiesta accetta i seguenti dati in formato JSON.

 ** [ScheduledQueryArn](#API_query_UpdateScheduledQuery_RequestSyntax) **   <a name="timestream-query_UpdateScheduledQuery-request-ScheduledQueryArn"></a>
ARN della query pianificata.  
Tipo: String  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Obbligatorio: sì

 ** [State](#API_query_UpdateScheduledQuery_RequestSyntax) **   <a name="timestream-query_UpdateScheduledQuery-request-State"></a>
Stato dell'interrogazione pianificata.   
Tipo: String  
Valori validi: `ENABLED | DISABLED`   
Obbligatorio: sì

## Elementi di risposta
<a name="API_query_UpdateScheduledQuery_ResponseElements"></a>

Se l'operazione riesce, il servizio invia una risposta HTTP 200 con un corpo HTTP vuoto.

## Errori
<a name="API_query_UpdateScheduledQuery_Errors"></a>

Per informazioni sugli errori comuni a tutte le operazioni, consultare [Tipi di errore comuni](CommonErrors.md).

 ** AccessDeniedException **   
Non disponi delle autorizzazioni necessarie per accedere alle impostazioni dell'account.  
Codice di stato HTTP: 400

 ** InternalServerException **   
Si è verificato un errore interno del server durante l'elaborazione della richiesta.  
Codice di stato HTTP: 400

 ** InvalidEndpointException **   
L'endpoint richiesto non è valido.  
Codice di stato HTTP: 400

 ** ResourceNotFoundException **   
Impossibile trovare la risorsa richiesta.    
 ** ScheduledQueryArn **   
L'ARN della query pianificata.
Codice di stato HTTP: 400

 ** ThrottlingException **   
La richiesta è stata limitata a causa di un numero eccessivo di richieste.  
Codice di stato HTTP: 400

 ** ValidationException **   
 Richiesta non valida o non valida.   
Codice di stato HTTP: 400

## Vedi anche
<a name="API_query_UpdateScheduledQuery_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS Interfaccia a riga di comando V2](https://docs.aws.amazon.com/goto/cli2/timestream-query-2018-11-01/UpdateScheduledQuery) 
+  [AWS SDK per.NET V4](https://docs.aws.amazon.com/goto/DotNetSDKV4/timestream-query-2018-11-01/UpdateScheduledQuery) 
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/UpdateScheduledQuery) 
+  [AWS SDK per Go v2](https://docs.aws.amazon.com/goto/SdkForGoV2/timestream-query-2018-11-01/UpdateScheduledQuery) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/UpdateScheduledQuery) 
+  [AWS SDK per V3 JavaScript ](https://docs.aws.amazon.com/goto/SdkForJavaScriptV3/timestream-query-2018-11-01/UpdateScheduledQuery) 
+  [AWS SDK per Kotlin](https://docs.aws.amazon.com/goto/SdkForKotlin/timestream-query-2018-11-01/UpdateScheduledQuery) 
+  [AWS SDK per PHP V3](https://docs.aws.amazon.com/goto/SdkForPHPV3/timestream-query-2018-11-01/UpdateScheduledQuery) 
+  [AWS SDK per Python](https://docs.aws.amazon.com/goto/boto3/timestream-query-2018-11-01/UpdateScheduledQuery) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/UpdateScheduledQuery) 

# Tipi di dati
<a name="API_Types"></a>

I seguenti tipi di dati sono supportati da Amazon Timestream Write:
+  [BatchLoadProgressReport](API_BatchLoadProgressReport.md) 
+  [BatchLoadTask](API_BatchLoadTask.md) 
+  [BatchLoadTaskDescription](API_BatchLoadTaskDescription.md) 
+  [CsvConfiguration](API_CsvConfiguration.md) 
+  [Database](API_Database.md) 
+  [DataModel](API_DataModel.md) 
+  [DataModelConfiguration](API_DataModelConfiguration.md) 
+  [DataModelS3Configuration](API_DataModelS3Configuration.md) 
+  [DataSourceConfiguration](API_DataSourceConfiguration.md) 
+  [DataSourceS3Configuration](API_DataSourceS3Configuration.md) 
+  [Dimension](API_Dimension.md) 
+  [DimensionMapping](API_DimensionMapping.md) 
+  [Endpoint](API_Endpoint.md) 
+  [MagneticStoreRejectedDataLocation](API_MagneticStoreRejectedDataLocation.md) 
+  [MagneticStoreWriteProperties](API_MagneticStoreWriteProperties.md) 
+  [MeasureValue](API_MeasureValue.md) 
+  [MixedMeasureMapping](API_MixedMeasureMapping.md) 
+  [MultiMeasureAttributeMapping](API_MultiMeasureAttributeMapping.md) 
+  [MultiMeasureMappings](API_MultiMeasureMappings.md) 
+  [PartitionKey](API_PartitionKey.md) 
+  [Record](API_Record.md) 
+  [RecordsIngested](API_RecordsIngested.md) 
+  [RejectedRecord](API_RejectedRecord.md) 
+  [ReportConfiguration](API_ReportConfiguration.md) 
+  [ReportS3Configuration](API_ReportS3Configuration.md) 
+  [RetentionProperties](API_RetentionProperties.md) 
+  [S3Configuration](API_S3Configuration.md) 
+  [Schema](API_Schema.md) 
+  [Table](API_Table.md) 
+  [Tag](API_Tag.md) 

I seguenti tipi di dati sono supportati da Amazon Timestream Query:
+  [AccountSettingsNotificationConfiguration](API_query_AccountSettingsNotificationConfiguration.md) 
+  [ColumnInfo](API_query_ColumnInfo.md) 
+  [Datum](API_query_Datum.md) 
+  [DimensionMapping](API_query_DimensionMapping.md) 
+  [Endpoint](API_query_Endpoint.md) 
+  [ErrorReportConfiguration](API_query_ErrorReportConfiguration.md) 
+  [ErrorReportLocation](API_query_ErrorReportLocation.md) 
+  [ExecutionStats](API_query_ExecutionStats.md) 
+  [LastUpdate](API_query_LastUpdate.md) 
+  [MixedMeasureMapping](API_query_MixedMeasureMapping.md) 
+  [MultiMeasureAttributeMapping](API_query_MultiMeasureAttributeMapping.md) 
+  [MultiMeasureMappings](API_query_MultiMeasureMappings.md) 
+  [NotificationConfiguration](API_query_NotificationConfiguration.md) 
+  [ParameterMapping](API_query_ParameterMapping.md) 
+  [ProvisionedCapacityRequest](API_query_ProvisionedCapacityRequest.md) 
+  [ProvisionedCapacityResponse](API_query_ProvisionedCapacityResponse.md) 
+  [QueryComputeRequest](API_query_QueryComputeRequest.md) 
+  [QueryComputeResponse](API_query_QueryComputeResponse.md) 
+  [QueryInsights](API_query_QueryInsights.md) 
+  [QueryInsightsResponse](API_query_QueryInsightsResponse.md) 
+  [QuerySpatialCoverage](API_query_QuerySpatialCoverage.md) 
+  [QuerySpatialCoverageMax](API_query_QuerySpatialCoverageMax.md) 
+  [QueryStatus](API_query_QueryStatus.md) 
+  [QueryTemporalRange](API_query_QueryTemporalRange.md) 
+  [QueryTemporalRangeMax](API_query_QueryTemporalRangeMax.md) 
+  [Row](API_query_Row.md) 
+  [S3Configuration](API_query_S3Configuration.md) 
+  [S3ReportLocation](API_query_S3ReportLocation.md) 
+  [ScheduleConfiguration](API_query_ScheduleConfiguration.md) 
+  [ScheduledQuery](API_query_ScheduledQuery.md) 
+  [ScheduledQueryDescription](API_query_ScheduledQueryDescription.md) 
+  [ScheduledQueryInsights](API_query_ScheduledQueryInsights.md) 
+  [ScheduledQueryInsightsResponse](API_query_ScheduledQueryInsightsResponse.md) 
+  [ScheduledQueryRunSummary](API_query_ScheduledQueryRunSummary.md) 
+  [SelectColumn](API_query_SelectColumn.md) 
+  [SnsConfiguration](API_query_SnsConfiguration.md) 
+  [Tag](API_query_Tag.md) 
+  [TargetConfiguration](API_query_TargetConfiguration.md) 
+  [TargetDestination](API_query_TargetDestination.md) 
+  [TimeSeriesDataPoint](API_query_TimeSeriesDataPoint.md) 
+  [TimestreamConfiguration](API_query_TimestreamConfiguration.md) 
+  [TimestreamDestination](API_query_TimestreamDestination.md) 
+  [Type](API_query_Type.md) 

# Amazon Timestream Write
<a name="API_Types_Amazon_Timestream_Write"></a>

I seguenti tipi di dati sono supportati da Amazon Timestream Write:
+  [BatchLoadProgressReport](API_BatchLoadProgressReport.md) 
+  [BatchLoadTask](API_BatchLoadTask.md) 
+  [BatchLoadTaskDescription](API_BatchLoadTaskDescription.md) 
+  [CsvConfiguration](API_CsvConfiguration.md) 
+  [Database](API_Database.md) 
+  [DataModel](API_DataModel.md) 
+  [DataModelConfiguration](API_DataModelConfiguration.md) 
+  [DataModelS3Configuration](API_DataModelS3Configuration.md) 
+  [DataSourceConfiguration](API_DataSourceConfiguration.md) 
+  [DataSourceS3Configuration](API_DataSourceS3Configuration.md) 
+  [Dimension](API_Dimension.md) 
+  [DimensionMapping](API_DimensionMapping.md) 
+  [Endpoint](API_Endpoint.md) 
+  [MagneticStoreRejectedDataLocation](API_MagneticStoreRejectedDataLocation.md) 
+  [MagneticStoreWriteProperties](API_MagneticStoreWriteProperties.md) 
+  [MeasureValue](API_MeasureValue.md) 
+  [MixedMeasureMapping](API_MixedMeasureMapping.md) 
+  [MultiMeasureAttributeMapping](API_MultiMeasureAttributeMapping.md) 
+  [MultiMeasureMappings](API_MultiMeasureMappings.md) 
+  [PartitionKey](API_PartitionKey.md) 
+  [Record](API_Record.md) 
+  [RecordsIngested](API_RecordsIngested.md) 
+  [RejectedRecord](API_RejectedRecord.md) 
+  [ReportConfiguration](API_ReportConfiguration.md) 
+  [ReportS3Configuration](API_ReportS3Configuration.md) 
+  [RetentionProperties](API_RetentionProperties.md) 
+  [S3Configuration](API_S3Configuration.md) 
+  [Schema](API_Schema.md) 
+  [Table](API_Table.md) 
+  [Tag](API_Tag.md) 

# BatchLoadProgressReport
<a name="API_BatchLoadProgressReport"></a>

Dettagli sullo stato di avanzamento di un'operazione di caricamento in batch.

## Indice
<a name="API_BatchLoadProgressReport_Contents"></a>

 ** BytesMetered **   <a name="timestream-Type-BatchLoadProgressReport-BytesMetered"></a>
  
Tipo: long  
Campo obbligatorio: no

 ** FileFailures **   <a name="timestream-Type-BatchLoadProgressReport-FileFailures"></a>
  
Tipo: long  
Campo obbligatorio: no

 ** ParseFailures **   <a name="timestream-Type-BatchLoadProgressReport-ParseFailures"></a>
  
Tipo: long  
Campo obbligatorio: no

 ** RecordIngestionFailures **   <a name="timestream-Type-BatchLoadProgressReport-RecordIngestionFailures"></a>
  
Tipo: long  
Campo obbligatorio: no

 ** RecordsIngested **   <a name="timestream-Type-BatchLoadProgressReport-RecordsIngested"></a>
  
Tipo: long  
Campo obbligatorio: no

 ** RecordsProcessed **   <a name="timestream-Type-BatchLoadProgressReport-RecordsProcessed"></a>
  
Tipo: long  
Campo obbligatorio: no

## Vedi anche
<a name="API_BatchLoadProgressReport_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/BatchLoadProgressReport) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/BatchLoadProgressReport) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/BatchLoadProgressReport) 

# BatchLoadTask
<a name="API_BatchLoadTask"></a>

Dettagli su un'operazione di caricamento in batch.

## Indice
<a name="API_BatchLoadTask_Contents"></a>

 ** CreationTime **   <a name="timestream-Type-BatchLoadTask-CreationTime"></a>
L'ora in cui è stata creata l'attività di caricamento in batch di Timestream.  
Tipo: Timestamp  
Campo obbligatorio: no

 ** DatabaseName **   <a name="timestream-Type-BatchLoadTask-DatabaseName"></a>
Nome del database in cui un'operazione di caricamento in batch carica i dati.  
Tipo: string  
Campo obbligatorio: no

 ** LastUpdatedTime **   <a name="timestream-Type-BatchLoadTask-LastUpdatedTime"></a>
L'ora dell'ultimo aggiornamento dell'attività di caricamento in batch di Timestream.  
Tipo: Timestamp  
Campo obbligatorio: no

 ** ResumableUntil **   <a name="timestream-Type-BatchLoadTask-ResumableUntil"></a>
   
Tipo: Timestamp  
Campo obbligatorio: no

 ** TableName **   <a name="timestream-Type-BatchLoadTask-TableName"></a>
Nome della tabella in cui un'operazione di caricamento in batch carica i dati.  
Tipo: string  
Campo obbligatorio: no

 ** TaskId **   <a name="timestream-Type-BatchLoadTask-TaskId"></a>
L'ID dell'operazione di caricamento in batch.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 32 caratteri.  
Modello: `[A-Z0-9]+`   
Campo obbligatorio: no

 ** TaskStatus **   <a name="timestream-Type-BatchLoadTask-TaskStatus"></a>
Stato dell'operazione di caricamento in batch.  
Tipo: stringa  
Valori validi: `CREATED | IN_PROGRESS | FAILED | SUCCEEDED | PROGRESS_STOPPED | PENDING_RESUME`   
Campo obbligatorio: no

## Vedi anche
<a name="API_BatchLoadTask_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/BatchLoadTask) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/BatchLoadTask) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/BatchLoadTask) 

# BatchLoadTaskDescription
<a name="API_BatchLoadTaskDescription"></a>

Dettagli su un'operazione di caricamento in batch.

## Indice
<a name="API_BatchLoadTaskDescription_Contents"></a>

 ** CreationTime **   <a name="timestream-Type-BatchLoadTaskDescription-CreationTime"></a>
L'ora in cui è stata creata l'attività di caricamento in batch di Timestream.  
Tipo: Timestamp  
Campo obbligatorio: no

 ** DataModelConfiguration **   <a name="timestream-Type-BatchLoadTaskDescription-DataModelConfiguration"></a>
Configurazione del modello di dati per un'operazione di caricamento in batch. Contiene dettagli sulla posizione in cui è archiviato un modello di dati per un'operazione di caricamento in batch.  
Tipo: oggetto [DataModelConfiguration](API_DataModelConfiguration.md)  
Campo obbligatorio: no

 ** DataSourceConfiguration **   <a name="timestream-Type-BatchLoadTaskDescription-DataSourceConfiguration"></a>
Dettagli di configurazione sull'origine dati per un'operazione di caricamento in batch.  
Tipo: oggetto [DataSourceConfiguration](API_DataSourceConfiguration.md)  
Required: No

 ** ErrorMessage **   <a name="timestream-Type-BatchLoadTaskDescription-ErrorMessage"></a>
  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Campo obbligatorio: no

 ** LastUpdatedTime **   <a name="timestream-Type-BatchLoadTaskDescription-LastUpdatedTime"></a>
L'ora dell'ultimo aggiornamento dell'attività di caricamento in batch di Timestream.  
Tipo: Timestamp  
Campo obbligatorio: no

 ** ProgressReport **   <a name="timestream-Type-BatchLoadTaskDescription-ProgressReport"></a>
  
Tipo: oggetto [BatchLoadProgressReport](API_BatchLoadProgressReport.md)  
Campo obbligatorio: no

 ** RecordVersion **   <a name="timestream-Type-BatchLoadTaskDescription-RecordVersion"></a>
  
Tipo: long  
Campo obbligatorio: no

 ** ReportConfiguration **   <a name="timestream-Type-BatchLoadTaskDescription-ReportConfiguration"></a>
Configurazione del report per un'attività di caricamento in batch. Contiene dettagli sulla posizione in cui vengono archiviate le segnalazioni di errori.  
Tipo: oggetto [ReportConfiguration](API_ReportConfiguration.md)  
Campo obbligatorio: no

 ** ResumableUntil **   <a name="timestream-Type-BatchLoadTaskDescription-ResumableUntil"></a>
   
Tipo: Timestamp  
Required: No

 ** TargetDatabaseName **   <a name="timestream-Type-BatchLoadTaskDescription-TargetDatabaseName"></a>
  
Tipo: string  
Required: No

 ** TargetTableName **   <a name="timestream-Type-BatchLoadTaskDescription-TargetTableName"></a>
  
Tipo: string  
Campo obbligatorio: no

 ** TaskId **   <a name="timestream-Type-BatchLoadTaskDescription-TaskId"></a>
L'ID dell'operazione di caricamento in batch.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 32 caratteri.  
Modello: `[A-Z0-9]+`   
Campo obbligatorio: no

 ** TaskStatus **   <a name="timestream-Type-BatchLoadTaskDescription-TaskStatus"></a>
Stato dell'operazione di caricamento in batch.  
Tipo: stringa  
Valori validi: `CREATED | IN_PROGRESS | FAILED | SUCCEEDED | PROGRESS_STOPPED | PENDING_RESUME`   
Campo obbligatorio: no

## Vedi anche
<a name="API_BatchLoadTaskDescription_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/BatchLoadTaskDescription) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/BatchLoadTaskDescription) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/BatchLoadTaskDescription) 

# CsvConfiguration
<a name="API_CsvConfiguration"></a>

Un formato di dati delimitato in cui il separatore di colonna può essere una virgola e il separatore di record è un carattere di nuova riga.

## Indice
<a name="API_CsvConfiguration_Contents"></a>

 ** ColumnSeparator **   <a name="timestream-Type-CsvConfiguration-ColumnSeparator"></a>
Il separatore di colonna può essere composto da virgola (','), pipe ('\$1), punto e virgola (';'), tab ('/t') o spazio vuoto ('').   
Tipo: stringa  
Vincoli di lunghezza: lunghezza fissa pari a 1.  
Campo obbligatorio: no

 ** EscapeChar **   <a name="timestream-Type-CsvConfiguration-EscapeChar"></a>
Il personaggio di fuga può essere uno dei   
Tipo: stringa  
Vincoli di lunghezza: lunghezza fissa pari a 1.  
Campo obbligatorio: no

 ** NullValue **   <a name="timestream-Type-CsvConfiguration-NullValue"></a>
Può essere uno spazio vuoto ('').  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 256 caratteri.  
Campo obbligatorio: no

 ** QuoteChar **   <a name="timestream-Type-CsvConfiguration-QuoteChar"></a>
Può essere tra virgolette singole (') o doppie («).  
Tipo: stringa  
Vincoli di lunghezza: lunghezza fissa pari a 1.  
Campo obbligatorio: no

 ** TrimWhiteSpace **   <a name="timestream-Type-CsvConfiguration-TrimWhiteSpace"></a>
Specifica di tagliare gli spazi bianchi iniziali e finali.  
Tipo: Booleano  
Campo obbligatorio: no

## Vedi anche
<a name="API_CsvConfiguration_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue AWS SDKs specifiche, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/CsvConfiguration) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/CsvConfiguration) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/CsvConfiguration) 

# Database
<a name="API_Database"></a>

Un contenitore di primo livello per una tabella. I database e le tabelle sono i concetti di gestione fondamentali in Amazon Timestream. Tutte le tabelle di un database sono crittografate con la stessa AWS KMS chiave.

## Indice
<a name="API_Database_Contents"></a>

 ** Arn **   <a name="timestream-Type-Database-Arn"></a>
L'Amazon Resource Name che identifica in modo univoco questo database.  
Tipo: string  
Campo obbligatorio: no

 ** CreationTime **   <a name="timestream-Type-Database-CreationTime"></a>
L'ora in cui è stato creato il database, calcolata a partire dall'epoca Unix.  
Tipo: Timestamp  
Campo obbligatorio: no

 ** DatabaseName **   <a name="timestream-Type-Database-DatabaseName"></a>
Nome del database Timestream.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 256 caratteri.  
Campo obbligatorio: no

 ** KmsKeyId **   <a name="timestream-Type-Database-KmsKeyId"></a>
L'identificatore della AWS KMS chiave utilizzata per crittografare i dati memorizzati nel database.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Campo obbligatorio: no

 ** LastUpdatedTime **   <a name="timestream-Type-Database-LastUpdatedTime"></a>
 L'ultima volta che questo database è stato aggiornato.   
Tipo: Timestamp  
Campo obbligatorio: no

 ** TableCount **   <a name="timestream-Type-Database-TableCount"></a>
Il numero totale di tabelle trovate all'interno di un database Timestream.   
Tipo: long  
Campo obbligatorio: no

## Vedi anche
<a name="API_Database_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/Database) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/Database) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/Database) 

# DataModel
<a name="API_DataModel"></a>

Modello di dati per un'attività di caricamento in batch.

## Indice
<a name="API_DataModel_Contents"></a>

 ** DimensionMappings **   <a name="timestream-Type-DataModel-DimensionMappings"></a>
Mappature da origine a destinazione per le dimensioni.  
Tipo: matrice di oggetti [DimensionMapping](API_DimensionMapping.md)  
Membri dell’array: numero minimo di 1 elemento.  
Campo obbligatorio: sì

 ** MeasureNameColumn **   <a name="timestream-Type-DataModel-MeasureNameColumn"></a>
  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 256 caratteri.  
Campo obbligatorio: no

 ** MixedMeasureMappings **   <a name="timestream-Type-DataModel-MixedMeasureMappings"></a>
Mappature da origine a destinazione per le misure.  
Tipo: matrice di oggetti [MixedMeasureMapping](API_MixedMeasureMapping.md)  
Membri dell’array: numero minimo di 1 elemento.  
Campo obbligatorio: no

 ** MultiMeasureMappings **   <a name="timestream-Type-DataModel-MultiMeasureMappings"></a>
Mappature da origine a destinazione per record multimisura.  
Tipo: oggetto [MultiMeasureMappings](API_MultiMeasureMappings.md)  
Campo obbligatorio: no

 ** TimeColumn **   <a name="timestream-Type-DataModel-TimeColumn"></a>
Colonna di origine da mappare all'ora.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 256 caratteri.  
Campo obbligatorio: no

 ** TimeUnit **   <a name="timestream-Type-DataModel-TimeUnit"></a>
 La granularità dell'unità timestamp. Indica se il valore temporale è in secondi, millisecondi, nanosecondi o altri valori supportati. Il valore predefinito è `MILLISECONDS`.   
Tipo: stringa  
Valori validi: `MILLISECONDS | SECONDS | MICROSECONDS | NANOSECONDS`   
Campo obbligatorio: no

## Vedi anche
<a name="API_DataModel_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue AWS SDKs specifiche, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/DataModel) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/DataModel) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/DataModel) 

# DataModelConfiguration
<a name="API_DataModelConfiguration"></a>



## Indice
<a name="API_DataModelConfiguration_Contents"></a>

 ** DataModel **   <a name="timestream-Type-DataModelConfiguration-DataModel"></a>
  
Tipo: oggetto [DataModel](API_DataModel.md)  
Campo obbligatorio: no

 ** DataModelS3Configuration **   <a name="timestream-Type-DataModelConfiguration-DataModelS3Configuration"></a>
  
Tipo: oggetto [DataModelS3Configuration](API_DataModelS3Configuration.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_DataModelConfiguration_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/DataModelConfiguration) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/DataModelConfiguration) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/DataModelConfiguration) 

# DataModelS3Configuration
<a name="API_DataModelS3Configuration"></a>



## Indice
<a name="API_DataModelS3Configuration_Contents"></a>

 ** BucketName **   <a name="timestream-Type-DataModelS3Configuration-BucketName"></a>
  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 63 caratteri.  
Modello: `[a-z0-9][\.\-a-z0-9]{1,61}[a-z0-9]`   
Required: No

 ** ObjectKey **   <a name="timestream-Type-DataModelS3Configuration-ObjectKey"></a>
  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 1024 caratteri.  
Modello: `[a-zA-Z0-9|!\-_*'\(\)]([a-zA-Z0-9]|[!\-_*'\(\)\/.])+`   
Campo obbligatorio: no

## Vedi anche
<a name="API_DataModelS3Configuration_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/DataModelS3Configuration) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/DataModelS3Configuration) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/DataModelS3Configuration) 

# DataSourceConfiguration
<a name="API_DataSourceConfiguration"></a>

Definisce i dettagli di configurazione sull'origine dati.

## Indice
<a name="API_DataSourceConfiguration_Contents"></a>

 ** DataFormat **   <a name="timestream-Type-DataSourceConfiguration-DataFormat"></a>
Attualmente è CSV.  
Tipo: stringa  
Valori validi: `CSV`   
Campo obbligatorio: sì

 ** DataSourceS3Configuration **   <a name="timestream-Type-DataSourceConfiguration-DataSourceS3Configuration"></a>
Configurazione di una posizione S3 per un file che contiene dati da caricare.  
Tipo: oggetto [DataSourceS3Configuration](API_DataSourceS3Configuration.md)  
Campo obbligatorio: sì

 ** CsvConfiguration **   <a name="timestream-Type-DataSourceConfiguration-CsvConfiguration"></a>
Un formato di dati delimitato in cui il separatore di colonna può essere una virgola e il separatore di record è un carattere di nuova riga.  
Tipo: oggetto [CsvConfiguration](API_CsvConfiguration.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_DataSourceConfiguration_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue AWS SDKs specifiche, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/DataSourceConfiguration) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/DataSourceConfiguration) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/DataSourceConfiguration) 

# DataSourceS3Configuration
<a name="API_DataSourceS3Configuration"></a>

 

## Indice
<a name="API_DataSourceS3Configuration_Contents"></a>

 ** BucketName **   <a name="timestream-Type-DataSourceS3Configuration-BucketName"></a>
Il nome bucket del bucket S3 del cliente.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 63 caratteri.  
Modello: `[a-z0-9][\.\-a-z0-9]{1,61}[a-z0-9]`   
Campo obbligatorio: sì

 ** ObjectKeyPrefix **   <a name="timestream-Type-DataSourceS3Configuration-ObjectKeyPrefix"></a>
   
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 1024 caratteri.  
Modello: `[a-zA-Z0-9|!\-_*'\(\)]([a-zA-Z0-9]|[!\-_*'\(\)\/.])+`   
Campo obbligatorio: no

## Vedi anche
<a name="API_DataSourceS3Configuration_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/DataSourceS3Configuration) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/DataSourceS3Configuration) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/DataSourceS3Configuration) 

# Dimension
<a name="API_Dimension"></a>

Rappresenta gli attributi dei metadati delle serie temporali. Ad esempio, il nome e la zona di disponibilità di un' EC2istanza o il nome del produttore di una turbina eolica sono dimensioni. 

## Indice
<a name="API_Dimension_Contents"></a>

 ** Name **   <a name="timestream-Type-Dimension-Name"></a>
 La dimensione rappresenta gli attributi dei metadati delle serie temporali. Ad esempio, il nome e la zona di disponibilità di un' EC2 istanza o il nome del produttore di una turbina eolica sono dimensioni.   
[Per i vincoli sui nomi delle dimensioni, vedere Vincoli di denominazione.](https://docs.aws.amazon.com/timestream/latest/developerguide/ts-limits.html#limits.naming)  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1. Lunghezza massima di 60.  
Campo obbligatorio: sì

 ** Value **   <a name="timestream-Type-Dimension-Value"></a>
Il valore della dimensione.  
Tipo: stringa  
Campo obbligatorio: sì

 ** DimensionValueType **   <a name="timestream-Type-Dimension-DimensionValueType"></a>
Il tipo di dati della dimensione per il punto dati della serie temporale.  
Tipo: stringa  
Valori validi: `VARCHAR`   
Campo obbligatorio: no

## Vedi anche
<a name="API_Dimension_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/Dimension) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/Dimension) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/Dimension) 

# DimensionMapping
<a name="API_DimensionMapping"></a>



## Indice
<a name="API_DimensionMapping_Contents"></a>

 ** DestinationColumn **   <a name="timestream-Type-DimensionMapping-DestinationColumn"></a>
   
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1.  
Required: No

 ** SourceColumn **   <a name="timestream-Type-DimensionMapping-SourceColumn"></a>
  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1.  
Campo obbligatorio: no

## Vedi anche
<a name="API_DimensionMapping_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/DimensionMapping) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/DimensionMapping) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/DimensionMapping) 

# Endpoint
<a name="API_Endpoint"></a>

Rappresenta un endpoint disponibile verso il quale effettuare chiamate API, nonché il TTL per quell'endpoint.

## Indice
<a name="API_Endpoint_Contents"></a>

 ** Address **   <a name="timestream-Type-Endpoint-Address"></a>
Un indirizzo endpoint.  
Tipo: stringa  
Campo obbligatorio: sì

 ** CachePeriodInMinutes **   <a name="timestream-Type-Endpoint-CachePeriodInMinutes"></a>
Il TTL per l'endpoint, in minuti.  
Tipo: long  
Campo obbligatorio: sì

## Vedi anche
<a name="API_Endpoint_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/Endpoint) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/Endpoint) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/Endpoint) 

# MagneticStoreRejectedDataLocation
<a name="API_MagneticStoreRejectedDataLocation"></a>

La posizione in cui scrivere i report degli errori per i record rifiutati, in modo asincrono, durante le scritture dell’archivio magnetico.

## Indice
<a name="API_MagneticStoreRejectedDataLocation_Contents"></a>

 ** S3Configuration **   <a name="timestream-Type-MagneticStoreRejectedDataLocation-S3Configuration"></a>
Configurazione di una posizione S3 in cui scrivere i report degli errori per i record rifiutati, in modo asincrono, durante le scritture dell’archivio magnetico.  
Tipo: oggetto [S3Configuration](API_S3Configuration.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_MagneticStoreRejectedDataLocation_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/MagneticStoreRejectedDataLocation) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/MagneticStoreRejectedDataLocation) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/MagneticStoreRejectedDataLocation) 

# MagneticStoreWriteProperties
<a name="API_MagneticStoreWriteProperties"></a>

Il set di proprietà in una tabella per la configurazione di scritture dell’archivio magnetico.

## Indice
<a name="API_MagneticStoreWriteProperties_Contents"></a>

 ** EnableMagneticStoreWrites **   <a name="timestream-Type-MagneticStoreWriteProperties-EnableMagneticStoreWrites"></a>
Un contrassegno per abilitare scritture dell’archivio magnetico.  
Tipo: Booleano  
Campo obbligatorio: sì

 ** MagneticStoreRejectedDataLocation **   <a name="timestream-Type-MagneticStoreWriteProperties-MagneticStoreRejectedDataLocation"></a>
La posizione in cui scrivere i report degli errori per i record rifiutati, in modo asincrono, durante le scritture dell’archivio magnetico.  
Tipo: oggetto [MagneticStoreRejectedDataLocation](API_MagneticStoreRejectedDataLocation.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_MagneticStoreWriteProperties_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/MagneticStoreWriteProperties) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/MagneticStoreWriteProperties) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/MagneticStoreWriteProperties) 

# MeasureValue
<a name="API_MeasureValue"></a>

 Rappresenta l'attributo di dati della serie temporale. Ad esempio, l'utilizzo della CPU di un' EC2 istanza o il numero di giri al minuto di una turbina eolica sono misure. MeasureValue ha sia nome che valore. 

 MeasureValue è consentito solo per tipo`MULTI`. Utilizzando `MULTI` type, è possibile passare più attributi di dati associati alla stessa serie temporale in un singolo record 

## Indice
<a name="API_MeasureValue_Contents"></a>

 ** Name **   <a name="timestream-Type-MeasureValue-Name"></a>
 Nome della MeasureValue.   
 Per i vincoli sui MeasureValue nomi, consulta [Naming Constraints nella](https://docs.aws.amazon.com/timestream/latest/developerguide/ts-limits.html#limits.naming) Amazon Timestream Developer Guide.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1.  
Campo obbligatorio: sì

 ** Type **   <a name="timestream-Type-MeasureValue-Type"></a>
Contiene il tipo di dati del punto dati della serie temporale. MeasureValue   
Tipo: stringa  
Valori validi: `DOUBLE | BIGINT | VARCHAR | BOOLEAN | TIMESTAMP | MULTI`   
Campo obbligatorio: sì

 ** Value **   <a name="timestream-Type-MeasureValue-Value"></a>
 Il valore per. MeasureValue Per informazioni, consulta [Tipi di dati](https://docs.aws.amazon.com/timestream/latest/developerguide/writes.html#writes.data-types).  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Campo obbligatorio: sì

## Vedi anche
<a name="API_MeasureValue_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/MeasureValue) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/MeasureValue) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/MeasureValue) 

# MixedMeasureMapping
<a name="API_MixedMeasureMapping"></a>



## Indice
<a name="API_MixedMeasureMapping_Contents"></a>

 ** MeasureValueType **   <a name="timestream-Type-MixedMeasureMapping-MeasureValueType"></a>
  
Tipo: stringa  
Valori validi: `DOUBLE | BIGINT | VARCHAR | BOOLEAN | TIMESTAMP | MULTI`   
Campo obbligatorio: sì

 ** MeasureName **   <a name="timestream-Type-MixedMeasureMapping-MeasureName"></a>
  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1.  
Campo obbligatorio: no

 ** MultiMeasureAttributeMappings **   <a name="timestream-Type-MixedMeasureMapping-MultiMeasureAttributeMappings"></a>
  
Tipo: matrice di oggetti [MultiMeasureAttributeMapping](API_MultiMeasureAttributeMapping.md)  
Membri dell’array: numero minimo di 1 elemento.  
Required: No

 ** SourceColumn **   <a name="timestream-Type-MixedMeasureMapping-SourceColumn"></a>
  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1.  
Required: No

 ** TargetMeasureName **   <a name="timestream-Type-MixedMeasureMapping-TargetMeasureName"></a>
  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1.  
Campo obbligatorio: no

## Vedi anche
<a name="API_MixedMeasureMapping_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/MixedMeasureMapping) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/MixedMeasureMapping) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/MixedMeasureMapping) 

# MultiMeasureAttributeMapping
<a name="API_MultiMeasureAttributeMapping"></a>



## Indice
<a name="API_MultiMeasureAttributeMapping_Contents"></a>

 ** SourceColumn **   <a name="timestream-Type-MultiMeasureAttributeMapping-SourceColumn"></a>
  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1.  
Campo obbligatorio: sì

 ** MeasureValueType **   <a name="timestream-Type-MultiMeasureAttributeMapping-MeasureValueType"></a>
  
Tipo: stringa  
Valori validi: `DOUBLE | BIGINT | BOOLEAN | VARCHAR | TIMESTAMP`   
Campo obbligatorio: no

 ** TargetMultiMeasureAttributeName **   <a name="timestream-Type-MultiMeasureAttributeMapping-TargetMultiMeasureAttributeName"></a>
  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1.  
Campo obbligatorio: no

## Vedi anche
<a name="API_MultiMeasureAttributeMapping_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/MultiMeasureAttributeMapping) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/MultiMeasureAttributeMapping) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/MultiMeasureAttributeMapping) 

# MultiMeasureMappings
<a name="API_MultiMeasureMappings"></a>



## Indice
<a name="API_MultiMeasureMappings_Contents"></a>

 ** MultiMeasureAttributeMappings **   <a name="timestream-Type-MultiMeasureMappings-MultiMeasureAttributeMappings"></a>
  
Tipo: matrice di oggetti [MultiMeasureAttributeMapping](API_MultiMeasureAttributeMapping.md)  
Membri dell’array: numero minimo di 1 elemento.  
Campo obbligatorio: sì

 ** TargetMultiMeasureName **   <a name="timestream-Type-MultiMeasureMappings-TargetMultiMeasureName"></a>
  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1.  
Campo obbligatorio: no

## Vedi anche
<a name="API_MultiMeasureMappings_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/MultiMeasureMappings) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/MultiMeasureMappings) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/MultiMeasureMappings) 

# PartitionKey
<a name="API_PartitionKey"></a>

 Un attributo utilizzato per il partizionamento dei dati in una tabella. Una chiave di dimensione partiziona i dati utilizzando i valori della dimensione specificata dal nome della dimensione come chiave di partizione, mentre una chiave di misura partiziona i dati utilizzando i nomi delle misure (valori della colonna «measure\$1name»). 

## Indice
<a name="API_PartitionKey_Contents"></a>

 ** Type **   <a name="timestream-Type-PartitionKey-Type"></a>
 Il tipo di chiave di partizione. Le opzioni sono DIMENSION (chiave di dimensione) e MEASURE (chiave di misura).   
Tipo: stringa  
Valori validi: `DIMENSION | MEASURE`   
Campo obbligatorio: sì

 ** EnforcementInRecord **   <a name="timestream-Type-PartitionKey-EnforcementInRecord"></a>
 Il livello di applicazione per la specificazione di una chiave di dimensione nei record importati. Le opzioni sono OBBLIGATORIE (la chiave della dimensione deve essere specificata) e OPZIONALE (la chiave della dimensione non deve essere specificata).   
Tipo: stringa  
Valori validi: `REQUIRED | OPTIONAL`   
Campo obbligatorio: no

 ** Name **   <a name="timestream-Type-PartitionKey-Name"></a>
 Il nome dell'attributo utilizzato per una chiave di dimensione.   
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1.  
Campo obbligatorio: no

## Vedi anche
<a name="API_PartitionKey_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/PartitionKey) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/PartitionKey) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/PartitionKey) 

# Record
<a name="API_Record"></a>

Rappresenta un punto dati di serie temporali che viene scritto in Timestream. Ogni record contiene una matrice di dimensioni. Le dimensioni rappresentano gli attributi dei metadati di un punto dati di una serie temporale, ad esempio il nome dell'istanza o la zona di disponibilità di un' EC2 istanza. Un record contiene anche il nome della misura, che è il nome della misura raccolta (ad esempio, l'utilizzo della CPU di un' EC2 istanza). Inoltre, un record contiene il valore della misura e il tipo di valore, che è il tipo di dati del valore della misura. Inoltre, il record contiene il timestamp di quando la misura è stata raccolta e l'unità di timestamp, che rappresenta la granularità del timestamp. 

 I record hanno un `Version` campo, a 64 bit`long`, che è possibile utilizzare per aggiornare i punti dati. La scrittura di un record duplicato con la stessa dimensione, timestamp e nome di misura ma un valore di misura diverso avrà esito positivo solo se l'`Version`attributo del record nella richiesta di scrittura è superiore a quello del record esistente. Il valore predefinito di Timestream è quello dei record senza il campo. `Version` `1` `Version` 

## Indice
<a name="API_Record_Contents"></a>

 ** Dimensions **   <a name="timestream-Type-Record-Dimensions"></a>
Contiene l'elenco delle dimensioni per i punti dati delle serie temporali.  
Tipo: matrice di oggetti [Dimension](API_Dimension.md)  
Membri dell'array: numero massimo di 128 elementi.  
Campo obbligatorio: no

 ** MeasureName **   <a name="timestream-Type-Record-MeasureName"></a>
La misura rappresenta l'attributo di dati della serie temporale. Ad esempio, l'utilizzo della CPU di un' EC2 istanza o il numero di giri al minuto di una turbina eolica sono misure.   
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 256 caratteri.  
Campo obbligatorio: no

 ** MeasureValue **   <a name="timestream-Type-Record-MeasureValue"></a>
 Contiene il valore di misura per il punto dati della serie temporale.   
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Campo obbligatorio: no

 ** MeasureValues **   <a name="timestream-Type-Record-MeasureValues"></a>
 Contiene l'elenco di quattro punti dati MeasureValue delle serie temporali.   
 È consentito solo per il tipo`MULTI`. Per i valori scalari, usa direttamente l'`MeasureValue`attributo del record.   
Tipo: matrice di oggetti [MeasureValue](API_MeasureValue.md)  
Campo obbligatorio: no

 ** MeasureValueType **   <a name="timestream-Type-Record-MeasureValueType"></a>
 Contiene il tipo di dati del valore di misura per il punto dati della serie temporale. Il tipo predefinito è`DOUBLE`. Per ulteriori informazioni, consulta [Tipi di dati](https://docs.aws.amazon.com/timestream/latest/developerguide/writes.html#writes.data-types).  
Tipo: stringa  
Valori validi: `DOUBLE | BIGINT | VARCHAR | BOOLEAN | TIMESTAMP | MULTI`   
Campo obbligatorio: no

 ** Time **   <a name="timestream-Type-Record-Time"></a>
 Contiene l'ora in cui è stato raccolto il valore di misura per il punto dati. Il valore temporale più l'unità fornisce il tempo trascorso dall'epoca. Ad esempio, se il valore temporale è `12345` e l'unità è`ms`, allora `12345 ms` sono trascorsi dall'epoca.   
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 256 caratteri.  
Campo obbligatorio: no

 ** TimeUnit **   <a name="timestream-Type-Record-TimeUnit"></a>
 La granularità dell'unità di marcatura temporale. Indica se il valore temporale è in secondi, millisecondi, nanosecondi o altri valori supportati. Il valore predefinito è `MILLISECONDS`.   
Tipo: stringa  
Valori validi: `MILLISECONDS | SECONDS | MICROSECONDS | NANOSECONDS`   
Campo obbligatorio: no

 ** Version **   <a name="timestream-Type-Record-Version"></a>
Attributo a 64 bit utilizzato per gli aggiornamenti dei record. Le richieste di scrittura per dati duplicati con un numero di versione superiore aggiorneranno il valore e la versione della misura esistenti. Nei casi in cui il valore di misura è lo stesso, `Version` verrà comunque aggiornato. Il valore predefinito è `1`.  
 `Version`deve essere uguale `1` o superiore, altrimenti riceverai un `ValidationException` errore.
Tipo: long  
Campo obbligatorio: no

## Vedi anche
<a name="API_Record_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/Record) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/Record) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/Record) 

# RecordsIngested
<a name="API_RecordsIngested"></a>

Informazioni sui record acquisiti con questa richiesta.

## Indice
<a name="API_RecordsIngested_Contents"></a>

 ** MagneticStore **   <a name="timestream-Type-RecordsIngested-MagneticStore"></a>
Numero di record ingeriti nel magazzino magnetico.  
Tipo: integer  
Campo obbligatorio: no

 ** MemoryStore **   <a name="timestream-Type-RecordsIngested-MemoryStore"></a>
Numero di record inseriti nell'archivio di memoria.  
Tipo: integer  
Campo obbligatorio: no

 ** Total **   <a name="timestream-Type-RecordsIngested-Total"></a>
Numero totale di record ingeriti con successo.  
Tipo: integer  
Campo obbligatorio: no

## Vedi anche
<a name="API_RecordsIngested_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/RecordsIngested) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/RecordsIngested) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/RecordsIngested) 

# RejectedRecord
<a name="API_RejectedRecord"></a>

 Rappresenta i record che non sono stati inseriti correttamente in Timestream a causa di problemi di convalida dei dati che devono essere risolti prima di reinserire i dati delle serie temporali nel sistema. 

## Indice
<a name="API_RejectedRecord_Contents"></a>

 ** ExistingVersion **   <a name="timestream-Type-RejectedRecord-ExistingVersion"></a>
La versione esistente del record. Questo valore viene compilato negli scenari in cui esiste un record identico con una versione superiore a quella nella richiesta di scrittura.  
Tipo: long  
Campo obbligatorio: no

 ** Reason **   <a name="timestream-Type-RejectedRecord-Reason"></a>
 Il motivo per cui un record non è stato inserito correttamente in Timestream. Le possibili cause di errore includono:   
+ Record con dati duplicati in cui sono presenti più record con le stesse dimensioni, timestamp e nomi di misure ma: 
  + I valori di misura sono diversi
  + La versione non è presente nella richiesta *oppure* il valore della versione nel nuovo record è uguale o inferiore al valore esistente

  Se Timestream rifiuta i dati per questo caso, il `ExistingVersion` campo nella `RejectedRecords` risposta indicherà la versione del record corrente. Per forzare un aggiornamento, puoi inviare nuovamente la richiesta con una versione del record impostata su un valore maggiore di. `ExistingVersion`
+  Record con timestamp che non rientrano nella durata di conservazione dell'archivio di memoria. 
**Nota**  
Quando la finestra di conservazione viene aggiornata, riceverai un'`RejectedRecords`eccezione se tenti immediatamente di inserire dati all'interno della nuova finestra. Per evitare un'`RejectedRecords`eccezione, attendi la durata della nuova finestra per inserire nuovi dati. Per ulteriori informazioni, consulta [Best Practices for Configuring Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/best-practices.html#configuration) e [la spiegazione di come funziona lo storage](https://docs.aws.amazon.com/timestream/latest/developerguide/storage.html) in Timestream.
+  Record con dimensioni o misure che superano i limiti definiti dal Timestream. 
 Per ulteriori informazioni, vedere [Gestione degli accessi](https://docs.aws.amazon.com/timestream/latest/developerguide/ts-limits.html) nella guida per gli sviluppatori Timestream.   
Tipo: string  
Campo obbligatorio: no

 ** RecordIndex **   <a name="timestream-Type-RejectedRecord-RecordIndex"></a>
 L'indice del record nella richiesta di input per. WriteRecords Gli indici iniziano con 0.   
Tipo: integer  
Campo obbligatorio: no

## Vedi anche
<a name="API_RejectedRecord_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/RejectedRecord) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/RejectedRecord) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/RejectedRecord) 

# ReportConfiguration
<a name="API_ReportConfiguration"></a>

Configurazione del report per un'attività di caricamento in batch. Contiene dettagli sulla posizione in cui vengono archiviate le segnalazioni di errori.

## Indice
<a name="API_ReportConfiguration_Contents"></a>

 ** ReportS3Configuration **   <a name="timestream-Type-ReportConfiguration-ReportS3Configuration"></a>
Configurazione di una posizione S3 per scrivere report ed eventi di errore per un caricamento in batch.  
Tipo: oggetto [ReportS3Configuration](API_ReportS3Configuration.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_ReportConfiguration_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/ReportConfiguration) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/ReportConfiguration) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/ReportConfiguration) 

# ReportS3Configuration
<a name="API_ReportS3Configuration"></a>



## Indice
<a name="API_ReportS3Configuration_Contents"></a>

 ** BucketName **   <a name="timestream-Type-ReportS3Configuration-BucketName"></a>
  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 63 caratteri.  
Modello: `[a-z0-9][\.\-a-z0-9]{1,61}[a-z0-9]`   
Campo obbligatorio: sì

 ** EncryptionOption **   <a name="timestream-Type-ReportS3Configuration-EncryptionOption"></a>
  
Tipo: stringa  
Valori validi: `SSE_S3 | SSE_KMS`   
Campo obbligatorio: no

 ** KmsKeyId **   <a name="timestream-Type-ReportS3Configuration-KmsKeyId"></a>
  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Required: No

 ** ObjectKeyPrefix **   <a name="timestream-Type-ReportS3Configuration-ObjectKeyPrefix"></a>
  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1. Lunghezza massima di 928.  
Modello: `[a-zA-Z0-9|!\-_*'\(\)]([a-zA-Z0-9]|[!\-_*'\(\)\/.])+`   
Campo obbligatorio: no

## Vedi anche
<a name="API_ReportS3Configuration_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/ReportS3Configuration) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/ReportS3Configuration) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/ReportS3Configuration) 

# RetentionProperties
<a name="API_RetentionProperties"></a>

Le proprietà di conservazione contengono la durata per la quale i dati di serie temporali devono essere memorizzati nell’archivio magnetico e nell'archivio della memoria. 

## Indice
<a name="API_RetentionProperties_Contents"></a>

 ** MagneticStoreRetentionPeriodInDays **   <a name="timestream-Type-RetentionProperties-MagneticStoreRetentionPeriodInDays"></a>
La durata per la quale i dati devono essere memorizzati nell'archivio magnetico.   
Tipo: long  
Intervallo valido: valore minimo di 1. Valore massimo di 73000.  
Campo obbligatorio: sì

 ** MemoryStoreRetentionPeriodInHours **   <a name="timestream-Type-RetentionProperties-MemoryStoreRetentionPeriodInHours"></a>
La durata per la quale i dati devono essere memorizzati nell'archivio della memoria.   
Tipo: long  
Intervallo valido: valore minimo di 1. Valore massimo di 8766.  
Campo obbligatorio: sì

## Vedi anche
<a name="API_RetentionProperties_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/RetentionProperties) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/RetentionProperties) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/RetentionProperties) 

# S3Configuration
<a name="API_S3Configuration"></a>

La configurazione che specifica una posizione S3.

## Indice
<a name="API_S3Configuration_Contents"></a>

 ** BucketName **   <a name="timestream-Type-S3Configuration-BucketName"></a>
Il nome bucket del bucket S3 del cliente.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 63 caratteri.  
Modello: `[a-z0-9][\.\-a-z0-9]{1,61}[a-z0-9]`   
Campo obbligatorio: no

 ** EncryptionOption **   <a name="timestream-Type-S3Configuration-EncryptionOption"></a>
L'opzione di crittografia per la posizione S3 del cliente. Le opzioni sono la crittografia lato server S3 con una chiave gestita o una chiave gestita S3. AWS   
Tipo: stringa  
Valori validi: `SSE_S3 | SSE_KMS`   
Campo obbligatorio: no

 ** KmsKeyId **   <a name="timestream-Type-S3Configuration-KmsKeyId"></a>
L'ID della AWS KMS chiave per la posizione S3 del cliente durante la crittografia con una chiave gestita. AWS   
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Campo obbligatorio: no

 ** ObjectKeyPrefix **   <a name="timestream-Type-S3Configuration-ObjectKeyPrefix"></a>
L'anteprima della chiave oggetto per la posizione S3 del cliente.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1. Lunghezza massima di 928.  
Modello: `[a-zA-Z0-9|!\-_*'\(\)]([a-zA-Z0-9]|[!\-_*'\(\)\/.])+`   
Campo obbligatorio: no

## Vedi anche
<a name="API_S3Configuration_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/S3Configuration) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/S3Configuration) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/S3Configuration) 

# Schema
<a name="API_Schema"></a>

 Uno schema specifica il modello di dati previsto per la tabella. 

## Indice
<a name="API_Schema_Contents"></a>

 ** CompositePartitionKey **   <a name="timestream-Type-Schema-CompositePartitionKey"></a>
Un elenco non vuoto di chiavi di partizione che definiscono gli attributi utilizzati per partizionare i dati della tabella. L'ordine dell'elenco determina la gerarchia delle partizioni. Il nome e il tipo di ciascuna chiave di partizione e l'ordine delle chiavi di partizione non possono essere modificati dopo la creazione della tabella. Tuttavia, è possibile modificare il livello di applicazione di ciascuna chiave di partizione.   
Tipo: matrice di oggetti [PartitionKey](API_PartitionKey.md)  
Membri dell’array: numero minimo di 1 elemento.  
Campo obbligatorio: no

## Vedi anche
<a name="API_Schema_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/Schema) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/Schema) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/Schema) 

# Table
<a name="API_Table"></a>

Rappresenta una tabella di database in Timestream. Le tabelle contengono una o più serie temporali correlate. È possibile modificare la durata di conservazione dell'archivio di memoria e dell'archivio magnetico per una tabella. 

## Indice
<a name="API_Table_Contents"></a>

 ** Arn **   <a name="timestream-Type-Table-Arn"></a>
Il nome di risorsa Amazon che identifica in modo univoco questa tabella.  
Tipo: string  
Campo obbligatorio: no

 ** CreationTime **   <a name="timestream-Type-Table-CreationTime"></a>
L'ora in cui è stata creata la tabella Timestream.   
Tipo: Timestamp  
Campo obbligatorio: no

 ** DatabaseName **   <a name="timestream-Type-Table-DatabaseName"></a>
Nome del database Timestream che contiene questa tabella.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 256 caratteri.  
Campo obbligatorio: no

 ** LastUpdatedTime **   <a name="timestream-Type-Table-LastUpdatedTime"></a>
L'ora dell'ultimo aggiornamento della tabella Timestream.  
Tipo: Timestamp  
Campo obbligatorio: no

 ** MagneticStoreWriteProperties **   <a name="timestream-Type-Table-MagneticStoreWriteProperties"></a>
Contiene le proprietà da impostare nella tabella quando si abilitano le scritture dello store magnetico.  
Tipo: oggetto [MagneticStoreWriteProperties](API_MagneticStoreWriteProperties.md)  
Campo obbligatorio: no

 ** RetentionProperties **   <a name="timestream-Type-Table-RetentionProperties"></a>
La durata di conservazione per lo store di memoria e lo store magnetico.  
Tipo: oggetto [RetentionProperties](API_RetentionProperties.md)  
Campo obbligatorio: no

 ** Schema **   <a name="timestream-Type-Table-Schema"></a>
 Lo schema della tabella.   
Tipo: oggetto [Schema](API_Schema.md)  
Campo obbligatorio: no

 ** TableName **   <a name="timestream-Type-Table-TableName"></a>
Nome della tabella Timestream.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 256 caratteri.  
Campo obbligatorio: no

 ** TableStatus **   <a name="timestream-Type-Table-TableStatus"></a>
Lo stato attuale della tabella:  
+  `DELETING`- La tabella viene eliminata.
+  `ACTIVE`- Il tavolo è pronto per l'uso.
Tipo: stringa  
Valori validi: `ACTIVE | DELETING | RESTORING`   
Campo obbligatorio: no

## Vedi anche
<a name="API_Table_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/Table) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/Table) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/Table) 

# Tag
<a name="API_Tag"></a>

 Un tag è un'etichetta che si assegna alle and/or table. Each tag consists of a key and an optional value, both of which you define. With tags, you can categorize databases and/or tabelle di un database Timestream, ad esempio per scopo, proprietario o ambiente. 

## Indice
<a name="API_Tag_Contents"></a>

 ** Key **   <a name="timestream-Type-Tag-Key"></a>
 La chiave del tag. Le chiavi dei tag prevedono una distinzione tra lettere maiuscole e minuscole.   
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 128 caratteri.  
Campo obbligatorio: sì

 ** Value **   <a name="timestream-Type-Tag-Value"></a>
 Il valore del tag. I valori dei tag fanno distinzione tra maiuscole e minuscole e possono essere nulli.   
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 0. La lunghezza massima è 256 caratteri.  
Campo obbligatorio: sì

## Vedi anche
<a name="API_Tag_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue AWS SDKs specifiche, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-write-2018-11-01/Tag) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-write-2018-11-01/Tag) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-write-2018-11-01/Tag) 

# Interrogazione su Amazon Timestream
<a name="API_Types_Amazon_Timestream_Query"></a>

I seguenti tipi di dati sono supportati da Amazon Timestream Query:
+  [AccountSettingsNotificationConfiguration](API_query_AccountSettingsNotificationConfiguration.md) 
+  [ColumnInfo](API_query_ColumnInfo.md) 
+  [Datum](API_query_Datum.md) 
+  [DimensionMapping](API_query_DimensionMapping.md) 
+  [Endpoint](API_query_Endpoint.md) 
+  [ErrorReportConfiguration](API_query_ErrorReportConfiguration.md) 
+  [ErrorReportLocation](API_query_ErrorReportLocation.md) 
+  [ExecutionStats](API_query_ExecutionStats.md) 
+  [LastUpdate](API_query_LastUpdate.md) 
+  [MixedMeasureMapping](API_query_MixedMeasureMapping.md) 
+  [MultiMeasureAttributeMapping](API_query_MultiMeasureAttributeMapping.md) 
+  [MultiMeasureMappings](API_query_MultiMeasureMappings.md) 
+  [NotificationConfiguration](API_query_NotificationConfiguration.md) 
+  [ParameterMapping](API_query_ParameterMapping.md) 
+  [ProvisionedCapacityRequest](API_query_ProvisionedCapacityRequest.md) 
+  [ProvisionedCapacityResponse](API_query_ProvisionedCapacityResponse.md) 
+  [QueryComputeRequest](API_query_QueryComputeRequest.md) 
+  [QueryComputeResponse](API_query_QueryComputeResponse.md) 
+  [QueryInsights](API_query_QueryInsights.md) 
+  [QueryInsightsResponse](API_query_QueryInsightsResponse.md) 
+  [QuerySpatialCoverage](API_query_QuerySpatialCoverage.md) 
+  [QuerySpatialCoverageMax](API_query_QuerySpatialCoverageMax.md) 
+  [QueryStatus](API_query_QueryStatus.md) 
+  [QueryTemporalRange](API_query_QueryTemporalRange.md) 
+  [QueryTemporalRangeMax](API_query_QueryTemporalRangeMax.md) 
+  [Row](API_query_Row.md) 
+  [S3Configuration](API_query_S3Configuration.md) 
+  [S3ReportLocation](API_query_S3ReportLocation.md) 
+  [ScheduleConfiguration](API_query_ScheduleConfiguration.md) 
+  [ScheduledQuery](API_query_ScheduledQuery.md) 
+  [ScheduledQueryDescription](API_query_ScheduledQueryDescription.md) 
+  [ScheduledQueryInsights](API_query_ScheduledQueryInsights.md) 
+  [ScheduledQueryInsightsResponse](API_query_ScheduledQueryInsightsResponse.md) 
+  [ScheduledQueryRunSummary](API_query_ScheduledQueryRunSummary.md) 
+  [SelectColumn](API_query_SelectColumn.md) 
+  [SnsConfiguration](API_query_SnsConfiguration.md) 
+  [Tag](API_query_Tag.md) 
+  [TargetConfiguration](API_query_TargetConfiguration.md) 
+  [TargetDestination](API_query_TargetDestination.md) 
+  [TimeSeriesDataPoint](API_query_TimeSeriesDataPoint.md) 
+  [TimestreamConfiguration](API_query_TimestreamConfiguration.md) 
+  [TimestreamDestination](API_query_TimestreamDestination.md) 
+  [Type](API_query_Type.md) 

# AccountSettingsNotificationConfiguration
<a name="API_query_AccountSettingsNotificationConfiguration"></a>

Impostazioni di configurazione per le notifiche relative alle impostazioni dell'account.

## Indice
<a name="API_query_AccountSettingsNotificationConfiguration_Contents"></a>

 ** RoleArn **   <a name="timestream-Type-query_AccountSettingsNotificationConfiguration-RoleArn"></a>
Un Amazon Resource Name (ARN) che concede a Timestream l'autorizzazione a pubblicare notifiche. Questo campo è visibile solo se viene fornito un argomento SNS durante l'aggiornamento delle impostazioni dell'account.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Campo obbligatorio: sì

 ** SnsConfiguration **   <a name="timestream-Type-query_AccountSettingsNotificationConfiguration-SnsConfiguration"></a>
Dettagli su SNS necessari per inviare la notifica.  
Tipo: oggetto [SnsConfiguration](API_query_SnsConfiguration.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_AccountSettingsNotificationConfiguration_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/AccountSettingsNotificationConfiguration) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/AccountSettingsNotificationConfiguration) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/AccountSettingsNotificationConfiguration) 

# ColumnInfo
<a name="API_query_ColumnInfo"></a>

 Contiene i metadati per i risultati delle query, ad esempio i nomi delle colonne, i tipi di dati e altri attributi. 

## Indice
<a name="API_query_ColumnInfo_Contents"></a>

 ** Type **   <a name="timestream-Type-query_ColumnInfo-Type"></a>
Il tipo di dati della colonna del set di risultati. Il tipo di dati può essere scalare o complesso. I tipi di dati scalari sono numeri interi, stringhe, doppi, booleani e altri. I tipi di dati complessi sono tipi come matrici, righe e altri.   
Tipo: oggetto [Type](API_query_Type.md)  
Campo obbligatorio: sì

 ** Name **   <a name="timestream-Type-query_ColumnInfo-Name"></a>
 Il nome della colonna del set di risultati. Il nome del set di risultati è disponibile per le colonne di tutti i tipi di dati ad eccezione degli array.   
Tipo: string  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_ColumnInfo_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/ColumnInfo) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/ColumnInfo) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/ColumnInfo) 

# Datum
<a name="API_query_Datum"></a>

 Datum rappresenta un singolo punto dati nel risultato di una query. 

## Indice
<a name="API_query_Datum_Contents"></a>

 ** ArrayValue **   <a name="timestream-Type-query_Datum-ArrayValue"></a>
 Indica se il punto dati è una matrice.   
Tipo: matrice di oggetti [Datum](#API_query_Datum)  
Campo obbligatorio: no

 ** NullValue **   <a name="timestream-Type-query_Datum-NullValue"></a>
 Indica se il punto dati è nullo.   
Tipo: Booleano  
Campo obbligatorio: no

 ** RowValue **   <a name="timestream-Type-query_Datum-RowValue"></a>
 Indica se il punto dati è una riga.   
Tipo: oggetto [Row](API_query_Row.md)  
Campo obbligatorio: no

 ** ScalarValue **   <a name="timestream-Type-query_Datum-ScalarValue"></a>
 Indica se il punto dati è un valore scalare come intero, stringa, double o booleano.   
Tipo: string  
Campo obbligatorio: no

 ** TimeSeriesValue **   <a name="timestream-Type-query_Datum-TimeSeriesValue"></a>
 Indica se il punto dati è un tipo di dati di una serie temporale.   
Tipo: matrice di oggetti [TimeSeriesDataPoint](API_query_TimeSeriesDataPoint.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_Datum_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/Datum) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/Datum) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/Datum) 

# DimensionMapping
<a name="API_query_DimensionMapping"></a>

Questo tipo viene utilizzato per mappare colonne dal risultato della query a una dimensione nella tabella di destinazione.

## Indice
<a name="API_query_DimensionMapping_Contents"></a>

 ** DimensionValueType **   <a name="timestream-Type-query_DimensionMapping-DimensionValueType"></a>
Tipo per la dimensione.   
Tipo: stringa  
Valori validi: `VARCHAR`   
Campo obbligatorio: sì

 ** Name **   <a name="timestream-Type-query_DimensionMapping-Name"></a>
Nome della colonna dal risultato della query.  
Tipo: stringa  
Campo obbligatorio: sì

## Vedi anche
<a name="API_query_DimensionMapping_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/DimensionMapping) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/DimensionMapping) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/DimensionMapping) 

# Endpoint
<a name="API_query_Endpoint"></a>

Rappresenta un endpoint disponibile verso il quale effettuare chiamate API, nonché il TTL per quell'endpoint.

## Indice
<a name="API_query_Endpoint_Contents"></a>

 ** Address **   <a name="timestream-Type-query_Endpoint-Address"></a>
Un indirizzo endpoint.  
Tipo: stringa  
Campo obbligatorio: sì

 ** CachePeriodInMinutes **   <a name="timestream-Type-query_Endpoint-CachePeriodInMinutes"></a>
Il TTL per l'endpoint, in minuti.  
Tipo: long  
Campo obbligatorio: sì

## Vedi anche
<a name="API_query_Endpoint_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/Endpoint) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/Endpoint) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/Endpoint) 

# ErrorReportConfiguration
<a name="API_query_ErrorReportConfiguration"></a>

Configurazione richiesta per la segnalazione degli errori.

## Indice
<a name="API_query_ErrorReportConfiguration_Contents"></a>

 ** S3Configuration **   <a name="timestream-Type-query_ErrorReportConfiguration-S3Configuration"></a>
La configurazione S3 per la segnalazione degli errori.  
Tipo: oggetto [S3Configuration](API_query_S3Configuration.md)  
Campo obbligatorio: sì

## Vedi anche
<a name="API_query_ErrorReportConfiguration_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/ErrorReportConfiguration) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/ErrorReportConfiguration) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/ErrorReportConfiguration) 

# ErrorReportLocation
<a name="API_query_ErrorReportLocation"></a>

Contiene la posizione della segnalazione degli errori per una singola chiamata di interrogazione pianificata. 

## Indice
<a name="API_query_ErrorReportLocation_Contents"></a>

 ** S3ReportLocation **   <a name="timestream-Type-query_ErrorReportLocation-S3ReportLocation"></a>
La posizione S3 in cui vengono scritte le segnalazioni di errore.  
Tipo: oggetto [S3ReportLocation](API_query_S3ReportLocation.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_ErrorReportLocation_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/ErrorReportLocation) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/ErrorReportLocation) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/ErrorReportLocation) 

# ExecutionStats
<a name="API_query_ExecutionStats"></a>

Statistiche per una singola esecuzione di query pianificata.

## Indice
<a name="API_query_ExecutionStats_Contents"></a>

 ** BytesMetered **   <a name="timestream-Type-query_ExecutionStats-BytesMetered"></a>
Byte misurati per una singola esecuzione di query pianificata.  
Tipo: long  
Campo obbligatorio: no

 ** CumulativeBytesScanned **   <a name="timestream-Type-query_ExecutionStats-CumulativeBytesScanned"></a>
Byte analizzati per una singola esecuzione di una query pianificata.  
Tipo: long  
Campo obbligatorio: no

 ** DataWrites **   <a name="timestream-Type-query_ExecutionStats-DataWrites"></a>
Le scritture dei dati vengono misurate per i record inseriti in una singola esecuzione di query pianificata.  
Tipo: long  
Campo obbligatorio: no

 ** ExecutionTimeInMillis **   <a name="timestream-Type-query_ExecutionStats-ExecutionTimeInMillis"></a>
Tempo totale, misurato in millisecondi, necessario per il completamento dell'esecuzione della query pianificata.  
Tipo: long  
Campo obbligatorio: no

 ** QueryResultRows **   <a name="timestream-Type-query_ExecutionStats-QueryResultRows"></a>
Numero di righe presenti nell'output dell'esecuzione di una query prima dell'inserimento nell'origine dati di destinazione.  
Tipo: long  
Campo obbligatorio: no

 ** RecordsIngested **   <a name="timestream-Type-query_ExecutionStats-RecordsIngested"></a>
Il numero di record acquisiti per una singola esecuzione di query pianificata.   
Tipo: long  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_ExecutionStats_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/ExecutionStats) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/ExecutionStats) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/ExecutionStats) 

# LastUpdate
<a name="API_query_LastUpdate"></a>

Oggetto di configurazione che contiene l'aggiornamento più recente delle impostazioni dell'account, visibile solo se le impostazioni sono state aggiornate in precedenza.

## Indice
<a name="API_query_LastUpdate_Contents"></a>

 ** Status **   <a name="timestream-Type-query_LastUpdate-Status"></a>
Lo stato dell'ultimo aggiornamento. Può essere uno dei due `PENDING``FAILED`, o`SUCCEEDED`.  
Tipo: stringa  
Valori validi: `PENDING | FAILED | SUCCEEDED`   
Campo obbligatorio: no

 ** StatusMessage **   <a name="timestream-Type-query_LastUpdate-StatusMessage"></a>
Messaggio di errore che descrive lo stato dell'ultimo aggiornamento delle impostazioni dell'account, visibile solo se si è verificato un errore.  
Tipo: string  
Campo obbligatorio: no

 ** TargetQueryTCU **   <a name="timestream-Type-query_LastUpdate-TargetQueryTCU"></a>
Il numero di unità di TimeStream calcolo (TCUs) richieste nell'ultimo aggiornamento delle impostazioni dell'account.  
Tipo: integer  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_LastUpdate_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/LastUpdate) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/LastUpdate) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/LastUpdate) 

# MixedMeasureMapping
<a name="API_query_MixedMeasureMapping"></a>

MixedMeasureMappings sono mappature che possono essere utilizzate per inserire dati in una combinazione di misure ristrette e multiple nella tabella derivata.

## Indice
<a name="API_query_MixedMeasureMapping_Contents"></a>

 ** MeasureValueType **   <a name="timestream-Type-query_MixedMeasureMapping-MeasureValueType"></a>
Tipo del valore che deve essere letto da sourceColumn. Se la mappatura è per MULTI, usa .MULTI. MeasureValueType  
Tipo: stringa  
Valori validi: `BIGINT | BOOLEAN | DOUBLE | VARCHAR | MULTI`   
Campo obbligatorio: sì

 ** MeasureName **   <a name="timestream-Type-query_MixedMeasureMapping-MeasureName"></a>
Fa riferimento al valore measure\$1name in una riga dei risultati. Questo campo è obbligatorio se fornito. MeasureNameColumn   
Tipo: string  
Campo obbligatorio: no

 ** MultiMeasureAttributeMappings **   <a name="timestream-Type-query_MixedMeasureMapping-MultiMeasureAttributeMappings"></a>
Obbligatorio quando measureValueType è MULTI. Mappature di attributi per le misure del valore MULTI.  
Tipo: matrice di oggetti [MultiMeasureAttributeMapping](API_query_MultiMeasureAttributeMapping.md)  
Membri dell’array: numero minimo di 1 elemento.  
Campo obbligatorio: no

 ** SourceColumn **   <a name="timestream-Type-query_MixedMeasureMapping-SourceColumn"></a>
Questo campo fa riferimento alla colonna di origine da cui deve essere letto measure-value per la materializzazione del risultato.  
Tipo: string  
Campo obbligatorio: no

 ** TargetMeasureName **   <a name="timestream-Type-query_MixedMeasureMapping-TargetMeasureName"></a>
Nome della misura di destinazione da utilizzare. Se non viene fornito, il nome della misura di destinazione per impostazione predefinita sarà measure-name se fornito, o sourceColumn in caso contrario.   
Tipo: string  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_MixedMeasureMapping_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/MixedMeasureMapping) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/MixedMeasureMapping) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/MixedMeasureMapping) 

# MultiMeasureAttributeMapping
<a name="API_query_MultiMeasureAttributeMapping"></a>

Mappatura degli attributi per misure del valore MULTI.

## Indice
<a name="API_query_MultiMeasureAttributeMapping_Contents"></a>

 ** MeasureValueType **   <a name="timestream-Type-query_MultiMeasureAttributeMapping-MeasureValueType"></a>
Tipo dell'attributo da leggere dalla colonna di origine.  
Tipo: stringa  
Valori validi: `BIGINT | BOOLEAN | DOUBLE | VARCHAR | TIMESTAMP`   
Campo obbligatorio: sì

 ** SourceColumn **   <a name="timestream-Type-query_MultiMeasureAttributeMapping-SourceColumn"></a>
Colonna di origine da cui deve essere letto il valore dell'attributo.  
Tipo: stringa  
Campo obbligatorio: sì

 ** TargetMultiMeasureAttributeName **   <a name="timestream-Type-query_MultiMeasureAttributeMapping-TargetMultiMeasureAttributeName"></a>
Nome personalizzato da utilizzare per il nome dell'attributo nella tabella derivata. Se non viene fornito, verrà utilizzato il nome della colonna di origine.  
Tipo: string  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_MultiMeasureAttributeMapping_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/MultiMeasureAttributeMapping) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/MultiMeasureAttributeMapping) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/MultiMeasureAttributeMapping) 

# MultiMeasureMappings
<a name="API_query_MultiMeasureMappings"></a>

Deve essere fornito solo uno dei MixedMeasureMappings o MultiMeasureMappings deve essere fornito. MultiMeasureMappings può essere utilizzato per inserire dati come misure multiple nella tabella derivata.

## Indice
<a name="API_query_MultiMeasureMappings_Contents"></a>

 ** MultiMeasureAttributeMappings **   <a name="timestream-Type-query_MultiMeasureMappings-MultiMeasureAttributeMappings"></a>
Obbligatorio. Mappature di attributi da utilizzare per mappare i risultati delle query per l'acquisizione di dati per attributi con più misure.  
Tipo: matrice di oggetti [MultiMeasureAttributeMapping](API_query_MultiMeasureAttributeMapping.md)  
Membri dell’array: numero minimo di 1 elemento.  
Campo obbligatorio: sì

 ** TargetMultiMeasureName **   <a name="timestream-Type-query_MultiMeasureMappings-TargetMultiMeasureName"></a>
Il nome del nome con più misure di destinazione nella tabella derivata. Questo input è obbligatorio quando non measureNameColumn viene fornito. Se MeasureNameColumn viene fornito, il valore di quella colonna verrà utilizzato come nome multimisura.  
Tipo: string  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_MultiMeasureMappings_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/MultiMeasureMappings) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/MultiMeasureMappings) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/MultiMeasureMappings) 

# NotificationConfiguration
<a name="API_query_NotificationConfiguration"></a>

Configurazione della notifica per una query pianificata. Viene inviata una notifica da Timestream quando una query pianificata viene creata, il suo stato viene aggiornato o quando viene eliminata. 

## Indice
<a name="API_query_NotificationConfiguration_Contents"></a>

 ** SnsConfiguration **   <a name="timestream-Type-query_NotificationConfiguration-SnsConfiguration"></a>
Dettagli sulla configurazione di Amazon Simple Notification Service (SNS). Questo campo è visibile solo quando viene fornito un argomento SNS durante l'aggiornamento delle impostazioni dell'account.   
Tipo: oggetto [SnsConfiguration](API_query_SnsConfiguration.md)  
Campo obbligatorio: sì

## Vedi anche
<a name="API_query_NotificationConfiguration_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/NotificationConfiguration) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/NotificationConfiguration) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/NotificationConfiguration) 

# ParameterMapping
<a name="API_query_ParameterMapping"></a>

Mappatura per parametri denominati.

## Indice
<a name="API_query_ParameterMapping_Contents"></a>

 ** Name **   <a name="timestream-Type-query_ParameterMapping-Name"></a>
Nome del parametro.  
Tipo: stringa  
Campo obbligatorio: sì

 ** Type **   <a name="timestream-Type-query_ParameterMapping-Type"></a>
Contiene il tipo di dati di una colonna in un set di risultati di query. Il tipo di dati può essere scalare o complesso. I tipi di dati scalari supportati sono numeri interi, booleani, string, double, timestamp, date, time e intervalli. I tipi di dati complessi supportati sono matrici, righe e serie temporali.  
Tipo: oggetto [Type](API_query_Type.md)  
Campo obbligatorio: sì

## Vedi anche
<a name="API_query_ParameterMapping_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue AWS SDKs specifiche, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/ParameterMapping) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/ParameterMapping) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/ParameterMapping) 

# ProvisionedCapacityRequest
<a name="API_query_ProvisionedCapacityRequest"></a>

Una richiesta di aggiornamento delle impostazioni di capacità fornite per l'interrogazione dei dati.

## Indice
<a name="API_query_ProvisionedCapacityRequest_Contents"></a>

 ** TargetQueryTCU **   <a name="timestream-Type-query_ProvisionedCapacityRequest-TargetQueryTCU"></a>
La capacità di calcolo di destinazione per l'interrogazione dei dati, specificata in Timestream Compute Units (). TCUs  
Tipo: integer  
Campo obbligatorio: sì

 ** NotificationConfiguration **   <a name="timestream-Type-query_ProvisionedCapacityRequest-NotificationConfiguration"></a>
Impostazioni di configurazione per le notifiche relative all'aggiornamento della capacità fornita.  
Tipo: oggetto [AccountSettingsNotificationConfiguration](API_query_AccountSettingsNotificationConfiguration.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_ProvisionedCapacityRequest_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/ProvisionedCapacityRequest) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/ProvisionedCapacityRequest) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/ProvisionedCapacityRequest) 

# ProvisionedCapacityResponse
<a name="API_query_ProvisionedCapacityResponse"></a>

La risposta a una richiesta di aggiornamento delle impostazioni di capacità fornite per l'interrogazione dei dati.

## Indice
<a name="API_query_ProvisionedCapacityResponse_Contents"></a>

 ** ActiveQueryTCU **   <a name="timestream-Type-query_ProvisionedCapacityResponse-ActiveQueryTCU"></a>
Il numero di unità di calcolo Timestream (TCUs) fornite nell'account. Questo campo è visibile solo quando la modalità di calcolo è. `PROVISIONED`  
Tipo: integer  
Campo obbligatorio: no

 ** LastUpdate **   <a name="timestream-Type-query_ProvisionedCapacityResponse-LastUpdate"></a>
Informazioni sull'ultimo aggiornamento delle impostazioni di capacità fornite.  
Tipo: oggetto [LastUpdate](API_query_LastUpdate.md)  
Campo obbligatorio: no

 ** NotificationConfiguration **   <a name="timestream-Type-query_ProvisionedCapacityResponse-NotificationConfiguration"></a>
Un oggetto che contiene le impostazioni per le notifiche che vengono inviate ogni volta che le impostazioni della capacità fornita vengono modificate. Questo campo è visibile solo quando la modalità di calcolo è. `PROVISIONED`  
Tipo: oggetto [AccountSettingsNotificationConfiguration](API_query_AccountSettingsNotificationConfiguration.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_ProvisionedCapacityResponse_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/ProvisionedCapacityResponse) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/ProvisionedCapacityResponse) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/ProvisionedCapacityResponse) 

# QueryComputeRequest
<a name="API_query_QueryComputeRequest"></a>

Una richiesta di recupero o aggiornamento delle impostazioni della capacità di calcolo per l'interrogazione dei dati. QueryCompute è disponibile solo nella regione Asia Pacifico (Mumbai).

## Indice
<a name="API_query_QueryComputeRequest_Contents"></a>

 ** ComputeMode **   <a name="timestream-Type-query_QueryComputeRequest-ComputeMode"></a>
La modalità in cui le unità di calcolo Timestream (TCUs) vengono allocate e utilizzate all'interno di un account. Tieni presente che nella regione Asia Pacifico (Mumbai), l'operazione API riconosce solo il valore. `PROVISIONED` QueryCompute è disponibile solo nella regione Asia Pacifico (Mumbai).  
Tipo: stringa  
Valori validi: `ON_DEMAND | PROVISIONED`   
Campo obbligatorio: no

 ** ProvisionedCapacity **   <a name="timestream-Type-query_QueryComputeRequest-ProvisionedCapacity"></a>
Oggetto di configurazione che contiene le impostazioni per le unità di calcolo Timestream () TCUs fornite nell'account. QueryCompute è disponibile solo nella regione Asia Pacifico (Mumbai).  
Tipo: oggetto [ProvisionedCapacityRequest](API_query_ProvisionedCapacityRequest.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_QueryComputeRequest_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/QueryComputeRequest) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/QueryComputeRequest) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/QueryComputeRequest) 

# QueryComputeResponse
<a name="API_query_QueryComputeResponse"></a>

La risposta a una richiesta di recupero o aggiornamento delle impostazioni della capacità di calcolo per l'interrogazione dei dati. QueryCompute è disponibile solo nella regione Asia Pacifico (Mumbai).

## Indice
<a name="API_query_QueryComputeResponse_Contents"></a>

 ** ComputeMode **   <a name="timestream-Type-query_QueryComputeResponse-ComputeMode"></a>
La modalità in cui le unità di calcolo Timestream (TCUs) vengono allocate e utilizzate all'interno di un account. Tieni presente che nella regione Asia Pacifico (Mumbai), l'operazione API riconosce solo il valore. `PROVISIONED` QueryCompute è disponibile solo nella regione Asia Pacifico (Mumbai).  
Tipo: stringa  
Valori validi: `ON_DEMAND | PROVISIONED`   
Campo obbligatorio: no

 ** ProvisionedCapacity **   <a name="timestream-Type-query_QueryComputeResponse-ProvisionedCapacity"></a>
Oggetto di configurazione che contiene le impostazioni per le unità di calcolo Timestream () TCUs fornite nell'account. QueryCompute è disponibile solo nella regione Asia Pacifico (Mumbai).  
Tipo: oggetto [ProvisionedCapacityResponse](API_query_ProvisionedCapacityResponse.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_QueryComputeResponse_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/QueryComputeResponse) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/QueryComputeResponse) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/QueryComputeResponse) 

# QueryInsights
<a name="API_query_QueryInsights"></a>

 `QueryInsights`è una funzionalità di ottimizzazione delle prestazioni che consente di ottimizzare le query, ridurre i costi e migliorare le prestazioni. Con`QueryInsights`, è possibile valutare l'efficienza di ottimizzazione delle query e identificare le aree di miglioramento per migliorare le prestazioni delle query. Con`QueryInsights`, puoi anche analizzare l'efficacia delle tue query in termini di riduzione temporale e spaziale e identificare opportunità per migliorare le prestazioni. In particolare, è possibile valutare in che modo le query utilizzano strategie di indicizzazione basate sul tempo e su chiavi di partizione per ottimizzare il recupero dei dati. Per ottimizzare le prestazioni delle query, è essenziale ottimizzare i parametri temporali e spaziali che regolano l'esecuzione delle query.

Le metriche chiave fornite da sono e. `QueryInsights` `QuerySpatialCoverage` `QueryTemporalRange` `QuerySpatialCoverage`indica la parte dell'asse spaziale scansionata dalla query, mentre i valori più bassi sono più efficienti. `QueryTemporalRange`mostra l'intervallo di tempo scansionato, con intervalli più stretti che offrono prestazioni migliori.

 **Vantaggi di QueryInsights** 

Di seguito sono riportati i principali vantaggi dell'utilizzo`QueryInsights`:
+  **Identificazione delle query inefficienti**: `QueryInsights` fornisce informazioni sull'eliminazione basata sul tempo e sugli attributi delle tabelle a cui accede la query. Queste informazioni consentono di identificare le tabelle a cui si accede in modo non ottimale.
+  **Ottimizzazione del modello di dati e del partizionamento**: è possibile utilizzare `QueryInsights` le informazioni per accedere e perfezionare il modello di dati e la strategia di partizionamento.
+  **Ottimizzazione delle query: evidenzia le opportunità di utilizzare gli indici** in modo più efficace. `QueryInsights`

**Nota**  
Il numero massimo di richieste `Query` API che puoi effettuare con `QueryInsights` enabled è 1 query al secondo (QPS). Se superi questa frequenza di query, potrebbe verificarsi una limitazione.

## Indice
<a name="API_query_QueryInsights_Contents"></a>

 ** Mode **   <a name="timestream-Type-query_QueryInsights-Mode"></a>
Fornisce le seguenti modalità da abilitare: `QueryInsights`  
+  `ENABLED_WITH_RATE_CONTROL`— Abilita `QueryInsights` l'elaborazione delle interrogazioni. Questa modalità include anche un meccanismo di controllo della velocità, che limita la `QueryInsights` funzionalità a 1 query al secondo (QPS).
+  `DISABLED`— `QueryInsights` Disattiva.
Tipo: stringa  
Valori validi: `ENABLED_WITH_RATE_CONTROL | DISABLED`   
Campo obbligatorio: sì

## Vedi anche
<a name="API_query_QueryInsights_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/QueryInsights) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/QueryInsights) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/QueryInsights) 

# QueryInsightsResponse
<a name="API_query_QueryInsightsResponse"></a>

Fornisce varie informazioni e metriche relative alla query che hai eseguito.

## Indice
<a name="API_query_QueryInsightsResponse_Contents"></a>

 ** OutputBytes **   <a name="timestream-Type-query_QueryInsightsResponse-OutputBytes"></a>
Indica la dimensione del set di risultati della query in byte. È possibile utilizzare questi dati per verificare se il set di risultati è stato modificato nell'ambito dell'esercizio di ottimizzazione delle query.  
Tipo: long  
Campo obbligatorio: no

 ** OutputRows **   <a name="timestream-Type-query_QueryInsightsResponse-OutputRows"></a>
Indica il numero totale di righe restituite come parte del set di risultati della query. È possibile utilizzare questi dati per verificare se il numero di righe nel set di risultati è cambiato nell'ambito dell'esercizio di ottimizzazione delle query.  
Tipo: long  
Campo obbligatorio: no

 ** QuerySpatialCoverage **   <a name="timestream-Type-query_QueryInsightsResponse-QuerySpatialCoverage"></a>
Fornisce informazioni sulla copertura spaziale dell'interrogazione, inclusa la tabella con una potatura spaziale non ottimale (massima). Queste informazioni possono aiutarvi a identificare le aree da migliorare nella vostra strategia di partizionamento per migliorare la potatura spaziale.   
Tipo: oggetto [QuerySpatialCoverage](API_query_QuerySpatialCoverage.md)  
Campo obbligatorio: no

 ** QueryTableCount **   <a name="timestream-Type-query_QueryInsightsResponse-QueryTableCount"></a>
Indica il numero di tabelle nell'interrogazione.  
Tipo: long  
Campo obbligatorio: no

 ** QueryTemporalRange **   <a name="timestream-Type-query_QueryInsightsResponse-QueryTemporalRange"></a>
Fornisce informazioni sull'intervallo temporale della query, inclusa la tabella con l'intervallo di tempo più ampio (massimo). Di seguito sono riportate alcune delle potenziali opzioni per ottimizzare la potatura basata sul tempo:  
+ Aggiungi i predicati temporali mancanti.
+ Rimuovi le funzioni relative ai predicati temporali.
+ Aggiungi predicati temporali a tutte le sottoquery.
Tipo: oggetto [QueryTemporalRange](API_query_QueryTemporalRange.md)  
Campo obbligatorio: no

 ** UnloadPartitionCount **   <a name="timestream-Type-query_QueryInsightsResponse-UnloadPartitionCount"></a>
Indica le partizioni create dall'operazione. `Unload`  
Tipo: long  
Campo obbligatorio: no

 ** UnloadWrittenBytes **   <a name="timestream-Type-query_QueryInsightsResponse-UnloadWrittenBytes"></a>
Indica la dimensione, in byte, scritta dall'`Unload`operazione.  
Tipo: long  
Campo obbligatorio: no

 ** UnloadWrittenRows **   <a name="timestream-Type-query_QueryInsightsResponse-UnloadWrittenRows"></a>
Indica le righe scritte dall'`Unload`interrogazione.  
Tipo: long  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_QueryInsightsResponse_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/QueryInsightsResponse) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/QueryInsightsResponse) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/QueryInsightsResponse) 

# QuerySpatialCoverage
<a name="API_query_QuerySpatialCoverage"></a>

Fornisce informazioni sulla copertura spaziale della query, inclusa la tabella con una potatura spaziale non ottimale (massima). Queste informazioni possono aiutarvi a identificare le aree da migliorare nella vostra strategia di partizionamento per migliorare la potatura spaziale

Ad esempio, puoi fare quanto segue con le informazioni: `QuerySpatialCoverage`
+ Aggiungi measure\$1name o usa i predicati della [chiave di partizione definita dal cliente](https://docs.aws.amazon.com/timestream/latest/developerguide/customer-defined-partition-keys.html) (CDPK).
+ Se hai già eseguito l'azione precedente, rimuovi le funzioni o le clausole che li circondano, ad esempio. `LIKE`

## Indice
<a name="API_query_QuerySpatialCoverage_Contents"></a>

 ** Max **   <a name="timestream-Type-query_QuerySpatialCoverage-Max"></a>
Fornisce informazioni sulla copertura spaziale della query eseguita e della tabella con la riduzione spaziale più inefficiente.  
+  `Value`— Il rapporto massimo di copertura spaziale.
+  `TableArn`— L'Amazon Resource Name (ARN) della tabella con potatura spaziale non ottimale.
+  `PartitionKey`— La chiave di partizione utilizzata per il partizionamento, che può essere predefinita o CDPK. `measure_name`
Tipo: oggetto [QuerySpatialCoverageMax](API_query_QuerySpatialCoverageMax.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_QuerySpatialCoverage_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue AWS SDKs specifiche, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/QuerySpatialCoverage) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/QuerySpatialCoverage) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/QuerySpatialCoverage) 

# QuerySpatialCoverageMax
<a name="API_query_QuerySpatialCoverageMax"></a>

Fornisce informazioni dettagliate sulla tabella con l'intervallo spaziale meno ottimale analizzato dalla query.

## Indice
<a name="API_query_QuerySpatialCoverageMax_Contents"></a>

 ** PartitionKey **   <a name="timestream-Type-query_QuerySpatialCoverageMax-PartitionKey"></a>
[La chiave di partizione utilizzata per il partizionamento, che può essere una chiave di partizione predefinita `measure_name` o definita dal cliente.](https://docs.aws.amazon.com/timestream/latest/developerguide/customer-defined-partition-keys.html)  
Tipo: matrice di stringhe  
Campo obbligatorio: no

 ** TableArn **   <a name="timestream-Type-query_QuerySpatialCoverageMax-TableArn"></a>
L'Amazon Resource Name (ARN) della tabella con la potatura spaziale meno ottimale.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Campo obbligatorio: no

 ** Value **   <a name="timestream-Type-query_QuerySpatialCoverageMax-Value"></a>
Il rapporto massimo di copertura spaziale.  
Tipo: double  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_QuerySpatialCoverageMax_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/QuerySpatialCoverageMax) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/QuerySpatialCoverageMax) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/QuerySpatialCoverageMax) 

# QueryStatus
<a name="API_query_QueryStatus"></a>

Informazioni sullo stato della query, inclusi lo stato di avanzamento e i byte scansionati.

## Indice
<a name="API_query_QueryStatus_Contents"></a>

 ** CumulativeBytesMetered **   <a name="timestream-Type-query_QueryStatus-CumulativeBytesMetered"></a>
La quantità di dati analizzati dalla query, espressa in byte, per la quale ti verrà addebitato il costo. Si tratta di una somma cumulativa e rappresenta la quantità totale di dati che ti verrà addebitata dall'avvio della query. L'addebito viene applicato una sola volta e viene applicato al termine dell'esecuzione della query o quando la query viene annullata.   
Tipo: long  
Campo obbligatorio: no

 ** CumulativeBytesScanned **   <a name="timestream-Type-query_QueryStatus-CumulativeBytesScanned"></a>
La quantità di dati analizzati dalla query in byte. Si tratta di una somma cumulativa e rappresenta la quantità totale di byte analizzati dall'avvio della query.   
Tipo: long  
Campo obbligatorio: no

 ** ProgressPercentage **   <a name="timestream-Type-query_QueryStatus-ProgressPercentage"></a>
L'avanzamento della query, espresso in percentuale.  
Tipo: double  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_QueryStatus_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/QueryStatus) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/QueryStatus) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/QueryStatus) 

# QueryTemporalRange
<a name="API_query_QueryTemporalRange"></a>

Fornisce informazioni sull'intervallo temporale della query, inclusa la tabella con l'intervallo di tempo più ampio (massimo).

## Indice
<a name="API_query_QueryTemporalRange_Contents"></a>

 ** Max **   <a name="timestream-Type-query_QueryTemporalRange-Max"></a>
Incapsula le seguenti proprietà che forniscono informazioni sulla tabella con prestazioni meno ottimali sull'asse temporale:  
+  `Value`— La durata massima in nanosecondi tra l'inizio e la fine della query.
+  `TableArn`— L'Amazon Resource Name (ARN) della tabella su cui viene eseguita la query con l'intervallo di tempo più ampio.
Tipo: oggetto [QueryTemporalRangeMax](API_query_QueryTemporalRangeMax.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_QueryTemporalRange_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue AWS SDKs specifiche, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/QueryTemporalRange) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/QueryTemporalRange) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/QueryTemporalRange) 

# QueryTemporalRangeMax
<a name="API_query_QueryTemporalRangeMax"></a>

Fornisce informazioni dettagliate sulla tabella con la riduzione temporale meno ottimale analizzata dalla query.

## Indice
<a name="API_query_QueryTemporalRangeMax_Contents"></a>

 ** TableArn **   <a name="timestream-Type-query_QueryTemporalRangeMax-TableArn"></a>
L'Amazon Resource Name (ARN) della tabella su cui viene eseguita la query con l'intervallo di tempo più ampio.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Campo obbligatorio: no

 ** Value **   <a name="timestream-Type-query_QueryTemporalRangeMax-Value"></a>
La durata massima in nanosecondi tra l'inizio e la fine della query.  
Tipo: long  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_QueryTemporalRangeMax_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/QueryTemporalRangeMax) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/QueryTemporalRangeMax) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/QueryTemporalRangeMax) 

# Row
<a name="API_query_Row"></a>

Rappresenta una singola riga nei risultati della query.

## Indice
<a name="API_query_Row_Contents"></a>

 ** Data **   <a name="timestream-Type-query_Row-Data"></a>
Elenco di punti dati in una singola riga del set di risultati.  
Tipo: matrice di oggetti [Datum](API_query_Datum.md)  
Campo obbligatorio: sì

## Vedi anche
<a name="API_query_Row_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/Row) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/Row) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/Row) 

# S3Configuration
<a name="API_query_S3Configuration"></a>

Dettagli sulla posizione S3 per le segnalazioni di errore risultanti dall'esecuzione di una query. 

## Indice
<a name="API_query_S3Configuration_Contents"></a>

 ** BucketName **   <a name="timestream-Type-query_S3Configuration-BucketName"></a>
 Nome del bucket S3 in cui verranno creati le segnalazioni di errore.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 63 caratteri.  
Modello: `[a-z0-9][\.\-a-z0-9]{1,61}[a-z0-9]`   
Campo obbligatorio: sì

 ** EncryptionOption **   <a name="timestream-Type-query_S3Configuration-EncryptionOption"></a>
 Opzioni di crittografia dei dati inattivi per le segnalazioni di errore. Se non viene specificata alcuna opzione di crittografia, Timestream sceglierà SSE\$1S3 come impostazione predefinita.   
Tipo: stringa  
Valori validi: `SSE_S3 | SSE_KMS`   
Campo obbligatorio: no

 ** ObjectKeyPrefix **   <a name="timestream-Type-query_S3Configuration-ObjectKeyPrefix"></a>
 Prefisso per la chiave di segnalazione degli errori. Timestream per impostazione predefinita aggiunge il seguente prefisso al percorso della segnalazione degli errori.   
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1. Lunghezza massima di 896.  
Modello: `[a-zA-Z0-9|!\-_*'\(\)]([a-zA-Z0-9]|[!\-_*'\(\)\/.])+`   
Campo obbligatorio: no

## Vedi anche
<a name="API_query_S3Configuration_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/S3Configuration) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/S3Configuration) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/S3Configuration) 

# S3ReportLocation
<a name="API_query_S3ReportLocation"></a>

 Posizione del report S3 per l'esecuzione della query pianificata.

## Indice
<a name="API_query_S3ReportLocation_Contents"></a>

 ** BucketName **   <a name="timestream-Type-query_S3ReportLocation-BucketName"></a>
 Nome bucket S3.   
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 3. La lunghezza massima è 63 caratteri.  
Modello: `[a-z0-9][\.\-a-z0-9]{1,61}[a-z0-9]`   
Campo obbligatorio: no

 ** ObjectKey **   <a name="timestream-Type-query_S3ReportLocation-ObjectKey"></a>
Chiave S3.   
Tipo: string  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_S3ReportLocation_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/S3ReportLocation) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/S3ReportLocation) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/S3ReportLocation) 

# ScheduleConfiguration
<a name="API_query_ScheduleConfiguration"></a>

Configurazione della pianificazione della query.

## Indice
<a name="API_query_ScheduleConfiguration_Contents"></a>

 ** ScheduleExpression **   <a name="timestream-Type-query_ScheduleConfiguration-ScheduleExpression"></a>
Un'espressione che indica quando attivare l'esecuzione pianificata della query. Può essere un'espressione cron o un'espressione rate.   
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 256 caratteri.  
Campo obbligatorio: sì

## Vedi anche
<a name="API_query_ScheduleConfiguration_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/ScheduleConfiguration) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/ScheduleConfiguration) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/ScheduleConfiguration) 

# ScheduledQuery
<a name="API_query_ScheduledQuery"></a>

Query pianificata

## Indice
<a name="API_query_ScheduledQuery_Contents"></a>

 ** Arn **   <a name="timestream-Type-query_ScheduledQuery-Arn"></a>
Il nome della risorsa Amazon.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Campo obbligatorio: sì

 ** Name **   <a name="timestream-Type-query_ScheduledQuery-Name"></a>
Il nome della query pianificata.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 64 caratteri.  
Modello: `[a-zA-Z0-9|!\-_*'\(\)]([a-zA-Z0-9]|[!\-_*'\(\)\/.])+`   
Campo obbligatorio: sì

 ** State **   <a name="timestream-Type-query_ScheduledQuery-State"></a>
Stato dell'interrogazione pianificata.   
Tipo: stringa  
Valori validi: `ENABLED | DISABLED`   
Campo obbligatorio: sì

 ** CreationTime **   <a name="timestream-Type-query_ScheduledQuery-CreationTime"></a>
L'ora di creazione dell'interrogazione pianificata.  
Tipo: Timestamp  
Campo obbligatorio: no

 ** ErrorReportConfiguration **   <a name="timestream-Type-query_ScheduledQuery-ErrorReportConfiguration"></a>
Configurazione per la segnalazione degli errori delle query pianificate.  
Tipo: oggetto [ErrorReportConfiguration](API_query_ErrorReportConfiguration.md)  
Campo obbligatorio: no

 ** LastRunStatus **   <a name="timestream-Type-query_ScheduledQuery-LastRunStatus"></a>
Stato dell'ultima esecuzione pianificata della query.  
Tipo: stringa  
Valori validi: `AUTO_TRIGGER_SUCCESS | AUTO_TRIGGER_FAILURE | MANUAL_TRIGGER_SUCCESS | MANUAL_TRIGGER_FAILURE`   
Campo obbligatorio: no

 ** NextInvocationTime **   <a name="timestream-Type-query_ScheduledQuery-NextInvocationTime"></a>
La prossima volta che verrà eseguita la query pianificata.  
Tipo: Timestamp  
Campo obbligatorio: no

 ** PreviousInvocationTime **   <a name="timestream-Type-query_ScheduledQuery-PreviousInvocationTime"></a>
L'ultima volta che è stata eseguita la query pianificata.  
Tipo: Timestamp  
Campo obbligatorio: no

 ** TargetDestination **   <a name="timestream-Type-query_ScheduledQuery-TargetDestination"></a>
Fonte di dati di destinazione in cui verrà scritto il risultato finale della query pianificata.  
Tipo: oggetto [TargetDestination](API_query_TargetDestination.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_ScheduledQuery_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/ScheduledQuery) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/ScheduledQuery) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/ScheduledQuery) 

# ScheduledQueryDescription
<a name="API_query_ScheduledQueryDescription"></a>

Struttura che descrive l'interrogazione pianificata.

## Indice
<a name="API_query_ScheduledQueryDescription_Contents"></a>

 ** Arn **   <a name="timestream-Type-query_ScheduledQueryDescription-Arn"></a>
ARN di interrogazione pianificata.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Campo obbligatorio: sì

 ** Name **   <a name="timestream-Type-query_ScheduledQueryDescription-Name"></a>
Nome dell'interrogazione pianificata.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 64 caratteri.  
Modello: `[a-zA-Z0-9|!\-_*'\(\)]([a-zA-Z0-9]|[!\-_*'\(\)\/.])+`   
Campo obbligatorio: sì

 ** NotificationConfiguration **   <a name="timestream-Type-query_ScheduledQueryDescription-NotificationConfiguration"></a>
Configurazione delle notifiche.  
Tipo: oggetto [NotificationConfiguration](API_query_NotificationConfiguration.md)  
Campo obbligatorio: sì

 ** QueryString **   <a name="timestream-Type-query_ScheduledQueryDescription-QueryString"></a>
La query da eseguire.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1. Lunghezza massima di 262144.  
Campo obbligatorio: sì

 ** ScheduleConfiguration **   <a name="timestream-Type-query_ScheduledQueryDescription-ScheduleConfiguration"></a>
Configurazione della pianificazione.  
Tipo: oggetto [ScheduleConfiguration](API_query_ScheduleConfiguration.md)  
Campo obbligatorio: sì

 ** State **   <a name="timestream-Type-query_ScheduledQueryDescription-State"></a>
Stato dell'interrogazione pianificata.   
Tipo: stringa  
Valori validi: `ENABLED | DISABLED`   
Campo obbligatorio: sì

 ** CreationTime **   <a name="timestream-Type-query_ScheduledQueryDescription-CreationTime"></a>
Ora di creazione dell'interrogazione pianificata.  
Tipo: Timestamp  
Campo obbligatorio: no

 ** ErrorReportConfiguration **   <a name="timestream-Type-query_ScheduledQueryDescription-ErrorReportConfiguration"></a>
Configurazione per la segnalazione degli errori per l'interrogazione pianificata.  
Tipo: oggetto [ErrorReportConfiguration](API_query_ErrorReportConfiguration.md)  
Campo obbligatorio: no

 ** KmsKeyId **   <a name="timestream-Type-query_ScheduledQueryDescription-KmsKeyId"></a>
Una chiave KMS fornita dal cliente e utilizzata per crittografare la risorsa di interrogazione pianificata.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Campo obbligatorio: no

 ** LastRunSummary **   <a name="timestream-Type-query_ScheduledQueryDescription-LastRunSummary"></a>
Riepilogo del runtime per l'ultima esecuzione pianificata della query.   
Tipo: oggetto [ScheduledQueryRunSummary](API_query_ScheduledQueryRunSummary.md)  
Campo obbligatorio: no

 ** NextInvocationTime **   <a name="timestream-Type-query_ScheduledQueryDescription-NextInvocationTime"></a>
La prossima volta che viene pianificata l'esecuzione della query pianificata.  
Tipo: Timestamp  
Campo obbligatorio: no

 ** PreviousInvocationTime **   <a name="timestream-Type-query_ScheduledQueryDescription-PreviousInvocationTime"></a>
L'ultima volta che è stata eseguita la query.  
Tipo: Timestamp  
Campo obbligatorio: no

 ** RecentlyFailedRuns **   <a name="timestream-Type-query_ScheduledQueryDescription-RecentlyFailedRuns"></a>
Riepilogo del runtime per le ultime cinque interrogazioni pianificate non riuscite.  
Tipo: matrice di oggetti [ScheduledQueryRunSummary](API_query_ScheduledQueryRunSummary.md)  
Campo obbligatorio: no

 ** ScheduledQueryExecutionRoleArn **   <a name="timestream-Type-query_ScheduledQueryDescription-ScheduledQueryExecutionRoleArn"></a>
Ruolo IAM utilizzato da Timestream per eseguire la query di pianificazione.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Campo obbligatorio: no

 ** TargetConfiguration **   <a name="timestream-Type-query_ScheduledQueryDescription-TargetConfiguration"></a>
Configurazione dell'archivio di destinazione delle query pianificate.  
Tipo: oggetto [TargetConfiguration](API_query_TargetConfiguration.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_ScheduledQueryDescription_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/ScheduledQueryDescription) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/ScheduledQueryDescription) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/ScheduledQueryDescription) 

# ScheduledQueryInsights
<a name="API_query_ScheduledQueryInsights"></a>

Incapsula le impostazioni per l'attivazione `QueryInsights` su un. `ExecuteScheduledQueryRequest`

## Indice
<a name="API_query_ScheduledQueryInsights_Contents"></a>

 ** Mode **   <a name="timestream-Type-query_ScheduledQueryInsights-Mode"></a>
Fornisce le seguenti modalità da abilitare: `ScheduledQueryInsights`  
+  `ENABLED_WITH_RATE_CONTROL`— Abilita `ScheduledQueryInsights` l'elaborazione delle interrogazioni. Questa modalità include anche un meccanismo di controllo della velocità, che limita la `QueryInsights` funzionalità a 1 query al secondo (QPS).
+  `DISABLED`— Disabilita`ScheduledQueryInsights`.
Tipo: stringa  
Valori validi: `ENABLED_WITH_RATE_CONTROL | DISABLED`   
Campo obbligatorio: sì

## Vedi anche
<a name="API_query_ScheduledQueryInsights_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/ScheduledQueryInsights) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/ScheduledQueryInsights) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/ScheduledQueryInsights) 

# ScheduledQueryInsightsResponse
<a name="API_query_ScheduledQueryInsightsResponse"></a>

Fornisce varie informazioni e metriche relative a `ExecuteScheduledQueryRequest` ciò che è stato eseguito.

## Indice
<a name="API_query_ScheduledQueryInsightsResponse_Contents"></a>

 ** OutputBytes **   <a name="timestream-Type-query_ScheduledQueryInsightsResponse-OutputBytes"></a>
Indica la dimensione del set di risultati della query in byte. È possibile utilizzare questi dati per verificare se il set di risultati è stato modificato nell'ambito dell'esercizio di ottimizzazione delle query.  
Tipo: long  
Campo obbligatorio: no

 ** OutputRows **   <a name="timestream-Type-query_ScheduledQueryInsightsResponse-OutputRows"></a>
Indica il numero totale di righe restituite come parte del set di risultati della query. È possibile utilizzare questi dati per verificare se il numero di righe nel set di risultati è cambiato nell'ambito dell'esercizio di ottimizzazione delle query.  
Tipo: long  
Campo obbligatorio: no

 ** QuerySpatialCoverage **   <a name="timestream-Type-query_ScheduledQueryInsightsResponse-QuerySpatialCoverage"></a>
Fornisce informazioni sulla copertura spaziale dell'interrogazione, inclusa la tabella con una potatura spaziale non ottimale (massima). Queste informazioni possono aiutarvi a identificare le aree da migliorare nella vostra strategia di partizionamento per migliorare la potatura spaziale.  
Tipo: oggetto [QuerySpatialCoverage](API_query_QuerySpatialCoverage.md)  
Campo obbligatorio: no

 ** QueryTableCount **   <a name="timestream-Type-query_ScheduledQueryInsightsResponse-QueryTableCount"></a>
Indica il numero di tabelle nell'interrogazione.  
Tipo: long  
Campo obbligatorio: no

 ** QueryTemporalRange **   <a name="timestream-Type-query_ScheduledQueryInsightsResponse-QueryTemporalRange"></a>
Fornisce informazioni sull'intervallo temporale della query, inclusa la tabella con l'intervallo di tempo più ampio (massimo). Di seguito sono riportate alcune delle potenziali opzioni per ottimizzare la potatura basata sul tempo:  
+ Aggiungi i predicati temporali mancanti.
+ Rimuovi le funzioni relative ai predicati temporali.
+ Aggiungi predicati temporali a tutte le sottoquery.
Tipo: oggetto [QueryTemporalRange](API_query_QueryTemporalRange.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_ScheduledQueryInsightsResponse_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue AWS SDKs specifiche, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/ScheduledQueryInsightsResponse) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/ScheduledQueryInsightsResponse) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/ScheduledQueryInsightsResponse) 

# ScheduledQueryRunSummary
<a name="API_query_ScheduledQueryRunSummary"></a>

Esegui il riepilogo per la query pianificata

## Indice
<a name="API_query_ScheduledQueryRunSummary_Contents"></a>

 ** ErrorReportLocation **   <a name="timestream-Type-query_ScheduledQueryRunSummary-ErrorReportLocation"></a>
Posizione S3 per la segnalazione degli errori.  
Tipo: oggetto [ErrorReportLocation](API_query_ErrorReportLocation.md)  
Campo obbligatorio: no

 ** ExecutionStats **   <a name="timestream-Type-query_ScheduledQueryRunSummary-ExecutionStats"></a>
Statistiche di runtime per un'esecuzione pianificata.  
Tipo: oggetto [ExecutionStats](API_query_ExecutionStats.md)  
Campo obbligatorio: no

 ** FailureReason **   <a name="timestream-Type-query_ScheduledQueryRunSummary-FailureReason"></a>
Messaggio di errore per l'interrogazione pianificata in caso di errore. Potrebbe essere necessario consultare il rapporto sugli errori per ottenere motivi di errore più dettagliati.   
Tipo: string  
Campo obbligatorio: no

 ** InvocationTime **   <a name="timestream-Type-query_ScheduledQueryRunSummary-InvocationTime"></a>
InvocationTime per questa corsa. Questa è l'ora in cui è pianificata l'esecuzione della query. Il parametro `@scheduled_runtime` può essere utilizzato nella query per ottenere il valore.   
Tipo: Timestamp  
Campo obbligatorio: no

 ** QueryInsightsResponse **   <a name="timestream-Type-query_ScheduledQueryRunSummary-QueryInsightsResponse"></a>
Fornisce varie informazioni e metriche relative al riepilogo dell'esecuzione della query pianificata.  
Tipo: oggetto [ScheduledQueryInsightsResponse](API_query_ScheduledQueryInsightsResponse.md)  
Campo obbligatorio: no

 ** RunStatus **   <a name="timestream-Type-query_ScheduledQueryRunSummary-RunStatus"></a>
Lo stato dell'esecuzione di una query pianificata.  
Tipo: stringa  
Valori validi: `AUTO_TRIGGER_SUCCESS | AUTO_TRIGGER_FAILURE | MANUAL_TRIGGER_SUCCESS | MANUAL_TRIGGER_FAILURE`   
Campo obbligatorio: no

 ** TriggerTime **   <a name="timestream-Type-query_ScheduledQueryRunSummary-TriggerTime"></a>
L'ora effettiva in cui è stata eseguita la query.  
Tipo: Timestamp  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_ScheduledQueryRunSummary_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/ScheduledQueryRunSummary) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/ScheduledQueryRunSummary) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/ScheduledQueryRunSummary) 

# SelectColumn
<a name="API_query_SelectColumn"></a>

Dettagli della colonna restituita dalla query. 

## Indice
<a name="API_query_SelectColumn_Contents"></a>

 ** Aliased **   <a name="timestream-Type-query_SelectColumn-Aliased"></a>
Ha valore True, se la query ha utilizzato un alias per il nome della colonna. In caso contrario, falso.  
Tipo: Booleano  
Campo obbligatorio: no

 ** DatabaseName **   <a name="timestream-Type-query_SelectColumn-DatabaseName"></a>
 Database che contiene questa colonna.  
Tipo: string  
Campo obbligatorio: no

 ** Name **   <a name="timestream-Type-query_SelectColumn-Name"></a>
Nome della colonna.  
Tipo: string  
Campo obbligatorio: no

 ** TableName **   <a name="timestream-Type-query_SelectColumn-TableName"></a>
Tabella all'interno del database che contiene questa colonna.   
Tipo: string  
Campo obbligatorio: no

 ** Type **   <a name="timestream-Type-query_SelectColumn-Type"></a>
Contiene il tipo di dati di una colonna in un set di risultati di query. Il tipo di dati può essere scalare o complesso. I tipi di dati scalari supportati sono numeri interi, booleani, string, double, timestamp, date, time e intervalli. I tipi di dati complessi supportati sono matrici, righe e serie temporali.  
Tipo: oggetto [Type](API_query_Type.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_SelectColumn_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue AWS SDKs specifiche, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/SelectColumn) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/SelectColumn) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/SelectColumn) 

# SnsConfiguration
<a name="API_query_SnsConfiguration"></a>

Dettagli su SNS necessari per inviare la notifica.

## Indice
<a name="API_query_SnsConfiguration_Contents"></a>

 ** TopicArn **   <a name="timestream-Type-query_SnsConfiguration-TopicArn"></a>
ARN dell'argomento SNS a cui verranno inviate le notifiche sullo stato delle query pianificate.  
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 1. La lunghezza massima è 2048 caratteri.  
Campo obbligatorio: sì

## Vedi anche
<a name="API_query_SnsConfiguration_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/SnsConfiguration) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/SnsConfiguration) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/SnsConfiguration) 

# Tag
<a name="API_query_Tag"></a>

Un tag è un'etichetta che si assegna alle and/or table. Each tag consists of a key and an optional value, both of which you define. Tags enable you to categorize databases and/or tabelle di un database Timestream, ad esempio per scopo, proprietario o ambiente. 

## Indice
<a name="API_query_Tag_Contents"></a>

 ** Key **   <a name="timestream-Type-query_Tag-Key"></a>
La chiave del tag. Le chiavi dei tag prevedono una distinzione tra lettere maiuscole e minuscole.   
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima pari a 1. La lunghezza massima è 128 caratteri.  
Campo obbligatorio: sì

 ** Value **   <a name="timestream-Type-query_Tag-Value"></a>
Il valore del tag. I valori dei tag fanno distinzione tra maiuscole e minuscole e possono essere nulli.   
Tipo: stringa  
Limitazioni di lunghezza: lunghezza minima di 0. La lunghezza massima è 256 caratteri.  
Campo obbligatorio: sì

## Vedi anche
<a name="API_query_Tag_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/Tag) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/Tag) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/Tag) 

# TargetConfiguration
<a name="API_query_TargetConfiguration"></a>

Configurazione utilizzata per scrivere l'output di una query.

## Indice
<a name="API_query_TargetConfiguration_Contents"></a>

 ** TimestreamConfiguration **   <a name="timestream-Type-query_TargetConfiguration-TimestreamConfiguration"></a>
Configurazione necessaria per scrivere dati nel database e nella tabella Timestream.  
Tipo: oggetto [TimestreamConfiguration](API_query_TimestreamConfiguration.md)  
Campo obbligatorio: sì

## Vedi anche
<a name="API_query_TargetConfiguration_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/TargetConfiguration) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/TargetConfiguration) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/TargetConfiguration) 

# TargetDestination
<a name="API_query_TargetDestination"></a>

Dettagli sulla destinazione per scrivere dati per un'origine dati di destinazione. La fonte di dati attualmente supportata è Timestream.

## Indice
<a name="API_query_TargetDestination_Contents"></a>

 ** TimestreamDestination **   <a name="timestream-Type-query_TargetDestination-TimestreamDestination"></a>
Interroga i dettagli della destinazione dei risultati per l'origine dati Timestream.  
Tipo: oggetto [TimestreamDestination](API_query_TimestreamDestination.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_TargetDestination_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/TargetDestination) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/TargetDestination) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/TargetDestination) 

# TimeSeriesDataPoint
<a name="API_query_TimeSeriesDataPoint"></a>

Il tipo di dati timeseries rappresenta i valori di una misura nel tempo. Una serie temporale è una matrice di righe di timestamp e valori di misura, con righe ordinate in ordine crescente di tempo. A TimeSeriesDataPoint è un singolo punto dati nella serie temporale. Rappresenta una tupla di (tempo, valore di misura) in una serie temporale. 

## Indice
<a name="API_query_TimeSeriesDataPoint_Contents"></a>

 ** Time **   <a name="timestream-Type-query_TimeSeriesDataPoint-Time"></a>
Il timestamp in cui è stato raccolto il valore della misura.  
Tipo: stringa  
Campo obbligatorio: sì

 ** Value **   <a name="timestream-Type-query_TimeSeriesDataPoint-Value"></a>
Il valore di misura per il punto dati.  
Tipo: oggetto [Datum](API_query_Datum.md)  
Campo obbligatorio: sì

## Vedi anche
<a name="API_query_TimeSeriesDataPoint_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/TimeSeriesDataPoint) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/TimeSeriesDataPoint) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/TimeSeriesDataPoint) 

# TimestreamConfiguration
<a name="API_query_TimestreamConfiguration"></a>

 Configurazione per scrivere dati nel database e nella tabella Timestream. Questa configurazione consente all'utente di mappare le colonne di selezione dei risultati della query nelle colonne della tabella di destinazione. 

## Indice
<a name="API_query_TimestreamConfiguration_Contents"></a>

 ** DatabaseName **   <a name="timestream-Type-query_TimestreamConfiguration-DatabaseName"></a>
Nome del database Timestream in cui verrà scritto il risultato della query.  
Tipo: stringa  
Campo obbligatorio: sì

 ** DimensionMappings **   <a name="timestream-Type-query_TimestreamConfiguration-DimensionMappings"></a>
 Consente di mappare le colonne dal risultato della query a una dimensione nella tabella di destinazione.   
Tipo: matrice di oggetti [DimensionMapping](API_query_DimensionMapping.md)  
Campo obbligatorio: sì

 ** TableName **   <a name="timestream-Type-query_TimestreamConfiguration-TableName"></a>
Nome della tabella Timestream in cui verrà scritto il risultato della query. La tabella deve trovarsi all'interno dello stesso database fornito nella configurazione Timestream.  
Tipo: stringa  
Campo obbligatorio: sì

 ** TimeColumn **   <a name="timestream-Type-query_TimestreamConfiguration-TimeColumn"></a>
Colonna dal risultato della query che deve essere utilizzata come colonna TIME nella tabella di destinazione. Il tipo di colonna per questo deve essere TIMESTAMP.  
Tipo: stringa  
Campo obbligatorio: sì

 ** MeasureNameColumn **   <a name="timestream-Type-query_TimestreamConfiguration-MeasureNameColumn"></a>
Nome della colonna delle misure.  
Tipo: string  
Campo obbligatorio: no

 ** MixedMeasureMappings **   <a name="timestream-Type-query_TimestreamConfiguration-MixedMeasureMappings"></a>
Specifica come mappare le misure ai record di più misure.  
Tipo: matrice di oggetti [MixedMeasureMapping](API_query_MixedMeasureMapping.md)  
Membri dell’array: numero minimo di 1 elemento.  
Campo obbligatorio: no

 ** MultiMeasureMappings **   <a name="timestream-Type-query_TimestreamConfiguration-MultiMeasureMappings"></a>
Mappatura a più misure.  
Tipo: oggetto [MultiMeasureMappings](API_query_MultiMeasureMappings.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_TimestreamConfiguration_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche AWS SDKs, consulta quanto segue:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/TimestreamConfiguration) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/TimestreamConfiguration) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/TimestreamConfiguration) 

# TimestreamDestination
<a name="API_query_TimestreamDestination"></a>

Destinazione per l'interrogazione pianificata.

## Indice
<a name="API_query_TimestreamDestination_Contents"></a>

 ** DatabaseName **   <a name="timestream-Type-query_TimestreamDestination-DatabaseName"></a>
Nome del database Timestream.   
Tipo: string  
Campo obbligatorio: no

 ** TableName **   <a name="timestream-Type-query_TimestreamDestination-TableName"></a>
Nome della tabella Timestream.   
Tipo: string  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_TimestreamDestination_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/TimestreamDestination) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/TimestreamDestination) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/TimestreamDestination) 

# Type
<a name="API_query_Type"></a>

Contiene il tipo di dati di una colonna in un set di risultati di query. Il tipo di dati può essere scalare o complesso. I tipi di dati scalari supportati sono numeri interi, booleani, string, double, timestamp, date, time e intervalli. I tipi di dati complessi supportati sono matrici, righe e serie temporali.

## Indice
<a name="API_query_Type_Contents"></a>

 ** ArrayColumnInfo **   <a name="timestream-Type-query_Type-ArrayColumnInfo"></a>
Indica se la colonna è una matrice.  
Tipo: oggetto [ColumnInfo](API_query_ColumnInfo.md)  
Campo obbligatorio: no

 ** RowColumnInfo **   <a name="timestream-Type-query_Type-RowColumnInfo"></a>
Indica se la colonna è una riga.  
Tipo: matrice di oggetti [ColumnInfo](API_query_ColumnInfo.md)  
Campo obbligatorio: no

 ** ScalarType **   <a name="timestream-Type-query_Type-ScalarType"></a>
Indica se la colonna è di tipo string, integer, boolean, double, timestamp, date, time. [Per ulteriori informazioni, consulta Tipi di dati supportati.](https://docs.aws.amazon.com/timestream/latest/developerguide/supported-data-types.html)  
Tipo: stringa  
Valori validi: `VARCHAR | BOOLEAN | BIGINT | DOUBLE | TIMESTAMP | DATE | TIME | INTERVAL_DAY_TO_SECOND | INTERVAL_YEAR_TO_MONTH | UNKNOWN | INTEGER`   
Campo obbligatorio: no

 ** TimeSeriesMeasureValueColumnInfo **   <a name="timestream-Type-query_Type-TimeSeriesMeasureValueColumnInfo"></a>
Indica se la colonna è un tipo di dati di una serie temporale.  
Tipo: oggetto [ColumnInfo](API_query_ColumnInfo.md)  
Campo obbligatorio: no

## Vedi anche
<a name="API_query_Type_SeeAlso"></a>

Per ulteriori informazioni sull'utilizzo di questa API in una delle lingue specifiche, consulta quanto segue AWS SDKs:
+  [AWS SDK per C\$1\$1](https://docs.aws.amazon.com/goto/SdkForCpp/timestream-query-2018-11-01/Type) 
+  [AWS SDK per Java V2](https://docs.aws.amazon.com/goto/SdkForJavaV2/timestream-query-2018-11-01/Type) 
+  [AWS SDK per Ruby V3](https://docs.aws.amazon.com/goto/SdkForRubyV3/timestream-query-2018-11-01/Type) 

# Tipi di errore comuni
<a name="CommonErrors"></a>

Questa sezione elenca i tipi di errore più comuni che questo AWS servizio può restituire. Non tutti i servizi restituiscono tutti i tipi di errore elencati qui. Per gli errori specifici di un'azione API per questo servizio, consulta l'argomento per quell'azione API.

 **AccessDeniedException**   <a name="CommonErrors-AccessDeniedException"></a>
Non sei autorizzato a eseguire questa azione. Verifica che la tua policy IAM includa le autorizzazioni richieste.  
Codice di stato HTTP: 403

 **ExpiredTokenException**   <a name="CommonErrors-ExpiredTokenException"></a>
Il token di sicurezza incluso nella richiesta è scaduto. Richiedi un nuovo token di sicurezza e riprova.  
Codice di stato HTTP: 403

 **IncompleteSignature**   <a name="CommonErrors-IncompleteSignature"></a>
La firma della richiesta non è conforme agli AWS standard. Verifica di utilizzare AWS credenziali valide e che la richiesta sia formattata correttamente. Se utilizzi un SDK, assicurati che sia aggiornato.  
Codice di stato HTTP: 403

 **InternalFailure**   <a name="CommonErrors-InternalFailure"></a>
La richiesta non può essere elaborata in questo momento a causa di un problema interno del server. Riprova più tardi. Se il problema persiste, contatta l' AWS assistenza.  
Codice di stato HTTP: 500

 **MalformedHttpRequestException**   <a name="CommonErrors-MalformedHttpRequestException"></a>
Il corpo della richiesta non può essere elaborato. Ciò accade in genere quando il corpo della richiesta non può essere decompresso utilizzando l'algoritmo di codifica del contenuto specificato. Verifica che l'intestazione di codifica del contenuto corrisponda al formato di compressione utilizzato.  
Codice di stato HTTP: 400

 **NotAuthorized**   <a name="CommonErrors-NotAuthorized"></a>
Non disponi delle autorizzazioni necessarie per eseguire questa azione. Verifica che la tua policy IAM includa le autorizzazioni richieste.  
Codice di stato HTTP: 401

 **OptInRequired**   <a name="CommonErrors-OptInRequired"></a>
Il tuo AWS account richiede un abbonamento per questo servizio. Verifica di aver abilitato il servizio nel tuo account.  
Codice di stato HTTP: 403

 **RequestAbortedException**   <a name="CommonErrors-RequestAbortedException"></a>
La richiesta è stata interrotta prima che potesse essere restituita una risposta. Ciò accade in genere quando il client chiude la connessione.  
Codice di stato HTTP: 400

 **RequestEntityTooLargeException**   <a name="CommonErrors-RequestEntityTooLargeException"></a>
L'entità della richiesta è troppo grande. Riduci le dimensioni del corpo della richiesta e riprova.  
Codice di stato HTTP: 413

 **RequestTimeoutException**   <a name="CommonErrors-RequestTimeoutException"></a>
La richiesta è scaduta. Il server non ha ricevuto la richiesta completa entro il periodo di tempo previsto. Riprovare.  
Codice di stato HTTP: 408

 **ServiceUnavailable**   <a name="CommonErrors-ServiceUnavailable"></a>
Il servizio è temporaneamente non disponibile. Riprova più tardi.  
Codice di stato HTTP: 503

 **ThrottlingException**   <a name="CommonErrors-ThrottlingException"></a>
La frequenza delle richieste è troppo alta. Riprovano AWS SDKs automaticamente le richieste che ricevono questa eccezione. Riduci la frequenza delle richieste.  
Codice di stato HTTP: 400

 **UnknownOperationException**   <a name="CommonErrors-UnknownOperationException"></a>
L'azione o l'operazione non viene riconosciuta. Verifica che il nome dell'azione sia digitato correttamente e che sia supportato dalla versione dell'API che stai utilizzando.  
Codice di stato HTTP: 404

 **UnrecognizedClientException**   <a name="CommonErrors-UnrecognizedClientException"></a>
Il certificato X.509 o AWS l'ID della chiave di accesso che hai fornito non esiste nei nostri archivi. Verifica di utilizzare credenziali valide e che non siano scadute.  
Codice di stato HTTP: 403

 **ValidationError**   <a name="CommonErrors-ValidationError"></a>
L'input non soddisfa il formato o i vincoli richiesti. Verifica che tutti i parametri obbligatori siano inclusi e che i valori siano validi.  
Codice di stato HTTP: 400

# Parametri comuni
<a name="CommonParameters"></a>

L'elenco seguente contiene i parametri utilizzati da tutte le azioni per firmare le richieste di Signature Version 4 con una stringa di query. Qualsiasi parametro specifico di un'operazione è riportato nell'argomento relativo all'operazione. Per ulteriori informazioni sulla versione 4 di Signature, consulta [Signing AWS API requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) nella *IAM User Guide*.

 **X-Amz-Algorithm**   <a name="CommonParameters-X-Amz-Algorithm"></a>
Algoritmo hash utilizzato per creare la firma della richiesta.  
Condition: specifica questo parametro quando includi le informazioni di autenticazione in una stringa di query anziché nell'intestazione di autorizzazione HTTP.  
Tipo: stringa  
Valori validi: `AWS4-HMAC-SHA256`   
Obbligatorio: condizionale

 **X-Amz-Credential**   <a name="CommonParameters-X-Amz-Credential"></a>
Il valore dell'ambito delle credenziali, che è una stringa che include la chiave di accesso, la data, la regione di destinazione, il servizio richiesto e una stringa di terminazione ("aws4\$1request"). Il valore viene espresso nel seguente formato: *chiave\$1accesso*/*AAAAMMGG*/*regione*/*servizio*/aws4\$1request.  
Per ulteriori informazioni, consulta [Creare una richiesta AWS API firmata](https://docs.aws.amazon.com/IAM/latest/UserGuide/create-signed-request.html) nella *Guida per l'utente IAM*.  
Condition: specifica questo parametro quando includi le informazioni di autenticazione in una stringa di query anziché nell'intestazione di autorizzazione HTTP.  
Tipo: stringa  
Obbligatorio: condizionale

 **X-Amz-Date**   <a name="CommonParameters-X-Amz-Date"></a>
La data utilizzata per creare la firma. Il formato deve essere il formato di base ISO 8601 (YYYYMMDD'T'HHMMSS'Z'). Per esempio, la data e l'ora seguenti è un X-Amz-Date valore valido:`20120325T120000Z`.  
Condizione: X-Amz-Date è facoltativa per tutte le richieste; può essere utilizzata per sovrascrivere la data utilizzata per firmare le richieste. Se l'intestazione Date è specificata nel formato base ISO 8601, non X-Amz-Date è obbligatoria. Quando X-Amz-Date viene utilizzata, sovrascrive sempre il valore dell'intestazione Date. Per ulteriori informazioni, consulta [Elementi di una firma di richiesta AWS API](https://docs.aws.amazon.com/IAM/latest/UserGuide/signing-elements.html) nella Guida per l'utente *IAM*.  
Tipo: stringa  
Obbligatorio: condizionale

 **X-Amz-Security-Token**   <a name="CommonParameters-X-Amz-Security-Token"></a>
Il token di sicurezza temporaneo ottenuto tramite una chiamata a AWS Security Token Service (AWS STS). Per un elenco di servizi che supportano le credenziali di sicurezza temporanee da AWS STS, consulta la pagina [Servizi AWS che funzionano con IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) nella *Guida per l'utente di IAM*.  
Condizione: se utilizzi credenziali di sicurezza temporanee di AWS STS, devi includere il token di sicurezza.  
Tipo: stringa  
Obbligatorio: condizionale

 **X-Amz-Signature**   <a name="CommonParameters-X-Amz-Signature"></a>
Specifica la firma con codifica esadecimale calcolata dalla stringa da firmare e dalla chiave di firma derivata.  
Condition: specifica questo parametro quando includi le informazioni di autenticazione in una stringa di query anziché nell'intestazione di autorizzazione HTTP.  
Tipo: stringa  
Obbligatorio: condizionale

 **X-Amz-SignedHeaders**   <a name="CommonParameters-X-Amz-SignedHeaders"></a>
Specifica tutte le intestazioni HTTP incluse come parte della richiesta canonica. Per ulteriori informazioni sulla specificazione delle intestazioni firmate, consulta [Creare una richiesta AWS API firmata](https://docs.aws.amazon.com/IAM/latest/UserGuide/create-signed-request.html) nella Guida per l'utente *IAM*.  
Condition: specifica questo parametro quando includi le informazioni di autenticazione in una stringa di query anziché nell'intestazione di autorizzazione HTTP.  
Tipo: stringa  
Obbligatorio: condizionale

# Cronologia dei documenti
<a name="doc-history"></a>

| Modifica | Descrizione | Data | 
| --- |--- |--- |
| [`AmazonTimestreamInfluxDBFullAccessWithoutMarketplaceAccess`— Aggiornamento a una politica esistente](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonTimestreamInfluxDBFullAccessWithoutMarketplaceAccess) | Amazon Timestream for InfluxDB ha aggiunto le azioni `RebootDbCluster` e alla politica gestita `AmazonTimestreamInfluxDBFullAccessWithoutMarketplaceAccess` esistente per `RebootDbInstance` il riavvio delle risorse Amazon Timestream InfluxDB. Per ulteriori informazioni, consulta le [politiche AWS gestite per Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol-influxdb.html) for InfluxDB.  | 17 dicembre 2025 | 
| [`AmazonTimestreamInfluxDBFullAccess`— Aggiornamento a una politica esistente](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonTimestreamInfluxDBFullAccess) | Amazon Timestream for InfluxDB ha aggiunto le azioni `RebootDbCluster` e alla politica gestita `AmazonTimestreamInfluxDBFullAccess` esistente per `RebootDbInstance` il riavvio delle risorse Amazon Timestream InfluxDB. Per ulteriori informazioni, consulta le [politiche AWS gestite per Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol-influxdb.html) for InfluxDB.  | 17 dicembre 2025 | 
| [`AmazonTimestreamInfluxDBFullAccessWithoutMarketplaceAccess`— Aggiornamento a una politica esistente](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonTimestreamInfluxDBFullAccessWithoutMarketplaceAccess) | Amazon Timestream for InfluxDB ha aggiunto `ec2:DescribeVpcEndpoints` l'azione alla politica gestita `AmazonTimestreamInfluxDBFullAccessWithoutMarketplaceAccess` esistente per descrivere gli endpoint VPC. Per ulteriori informazioni, consulta le [politiche AWS gestite per Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol-influxdb.html) for InfluxDB.  | 13 novembre 2025 | 
| [`AmazonTimestreamInfluxDBFullAccess`— Aggiornamento a una politica esistente](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonTimestreamInfluxDBFullAccess) | Amazon Timestream for InfluxDB ha aggiunto `ec2:DescribeVpcEndpoints` l'azione alla politica gestita `AmazonTimestreamInfluxDBFullAccess` esistente per descrivere gli endpoint VPC. Per ulteriori informazioni, consulta le [politiche AWS gestite per Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol-influxdb.html) for InfluxDB.  | 13 novembre 2025 | 
| [`AmazonTimestreamInfluxDBFullAccess`— Aggiornamento a una politica esistente](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonTimestreamInfluxDBFullAccess) | Amazon Timestream per InfluxDB ha aggiunto l'ID del prodotto del marketplace Influx Enterprise alla politica gestita `AmazonTimestreamInfluxDBFullAccess` esistente per supportare l'abbonamento alle offerte del marketplace aziendale. [Vedi Access. AmazonTimestreamInflux DBFull](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol-influxdb.html#iam.identitybasedpolicies.predefinedpolicies) | 17 ottobre 2025 | 
| [`AmazonTimestreamConsoleFullAccess`— Aggiornamento a una politica esistente](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonTimestreamConsoleFullAccess) | Timestream for LiveAnalytics ha aggiunto le autorizzazioni di AWS Marketplace alla policy `AmazonTimestreamConsoleFullAccess` gestita per accedere alle risorse del marketplace e creare accordi per la creazione di InfluxDB Cluster with Read Replicas. | 20 agosto 2025 | 
| [`AmazonTimestreamConsoleFullAccess`— Aggiornamento a una policy esistente](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonTimestreamConsoleFullAccess) | Timestream for InfluxDB ha aggiunto le autorizzazioni di AWS Marketplace alla policy `AmazonTimestreamConsoleFullAccess` gestita per accedere alle risorse del marketplace e creare accordi per la creazione di InfluxDB Cluster with Repliche di lettura. | 20 agosto 2025 | 
| [`AmazonTimestreamConsoleFullAccess`— Aggiornamento a una policy esistente](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonTimestreamConsoleFullAccess) | Amazon Timestream per InfluxDB ha aggiunto l'autorizzazione alla politica gestita per fornire stime `pricing:GetProducts` dei prezzi per `AmazonTimestreamConsoleFullAccess` le configurazioni delle risorse InfluxDB durante la creazione. | 10 giugno 2025 | 
| [Amazon Timestream LiveAnalytics for non sarà più aperto a nuovi clienti a partire dal 20 giugno 2025.](AmazonTimestreamForLiveAnalytics-availability-change.md) | 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. | 20 maggio 2025 | 
| [`AmazonTimestreamInfluxDBFullAccessWithoutMarketplaceAccess`— Nuova politica](doc-history-influxdb.md) | Questa politica concede autorizzazioni amministrative che consentono l'accesso completo a tutte le risorse Timestream for InfluxDB, escluse eventuali azioni relative al marketplace. Per ulteriori informazioni, consulta le [politiche AWS gestite per Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol-influxdb.html) for InfluxDB. | 16 aprile 2025 | 
| [`AmazonTimestreamInfluxDBFullAccess`— Aggiornamento a una politica esistente](doc-history-influxdb.md) | Amazon Timestream for InfluxDB è stato aggiunto alla politica gestita esistente. `AmazonTimestreamInfluxDBFullAccess` Per ulteriori informazioni, consulta le [politiche AWS gestite per Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol-influxdb.html) for InfluxDB. | 16 aprile 2025 | 
| [`AmazonTimestreamInfluxDBFullAccess`— Aggiornamento a una politica esistente](doc-history-influxdb.md) | Amazon Timestream for InfluxDB ha aggiunto l'accesso per creare, aggiornare, eliminare ed elencare i cluster Amazon Timestream InfluxDB alla politica gestita esistente. `AmazonTimestreamInfluxDBFullAccess` Per ulteriori informazioni, consulta le [politiche AWS gestite per Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol-influxdb.html) for InfluxDB. | 17 febbraio 2025 | 
| [Aggiornamento solo della documentazione](https://docs.aws.amazon.com/timestream/latest/developerguide/ts-limits.html) | È stato aggiornato l'argomento Quote per separare le quote predefinite dai limiti di sistema. | 22 ottobre 2024 | 
| [Amazon Timestream ora supporta le analisi delle query](https://docs.aws.amazon.com/timestream/latest/developerguide/using-query-insights.html) | Timestream ora include il supporto per la funzionalità Query Insights che ti aiuta a ottimizzare le query, migliorarne le prestazioni e ridurre i costi. | 22 ottobre 2024 | 
| [Amazon Timestream for InfluxDB si aggiorna a una policy esistente.](doc-history-influxdb.md) | Amazon Timestream for InfluxDB ha aggiunto `ec2:DescribeRouteTables` l'azione alla politica gestita `AmazonTimestreamInfluxDBFullAccess` esistente per descrivere le tabelle di routing. Per ulteriori informazioni, consulta le [politiche AWS gestite per Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol-influxdb.html) for InfluxDB.  | 8 ottobre 2024 | 
| [`AmazonTimestreamInfluxDBFullAccess`— Aggiornamento a una politica esistente](doc-history-influxdb.md) | Amazon Timestream for InfluxDB ha aggiunto `ec2:DescribeRouteTables` l'azione alla politica gestita esistente. `AmazonTimestreamInfluxDBFullAccess` Questa azione viene utilizzata per descrivere le tabelle di routing. Vedi [AmazonTimestreamInfluxDBFullAccess](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol-influxdb.html#iam.identitybasedpolicies.predefinedpolicies). | 12 settembre 2024 | 
| [`AmazonTimestreamReadOnlyAccess`— Aggiornamento a una politica esistente](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonTimestreamReadOnlyAccess) | Timestream for LiveAnalytics ha aggiunto l'`DescribeAccountSettings`autorizzazione alla politica `AmazonTimestreamReadOnlyAccess` gestita per la descrizione Account AWS delle impostazioni. | 3 giugno 2024 | 
| [Amazon Timestream LiveAnalytics per ora supporta le unità di calcolo Timestream () TCUs](https://docs.aws.amazon.com/timestream/latest/developerguide/tcu.html) | Amazon Timestream LiveAnalytics per ora include il supporto per Timestream Compute Units TCUs () per misurare la capacità di calcolo allocata per le tue esigenze di query. | 29 aprile 2024 | 
| [Nuove politiche aggiunte](doc-history-influxdb.md) | Amazon Timestream per InfluxDB ha aggiunto due nuove politiche: una che consente al servizio di gestire interfacce di rete e gruppi di sicurezza nel tuo account. Per ulteriori informazioni, consulta [AmazonTimestreamInfluxDBServiceRolePolicy](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol-influxdb.html#security-iam-awsmanpol-timestreamforinfluxdbServiceRolePolicy). Un altro che fornisce l'accesso amministrativo completo per creare, aggiornare, eliminare ed elencare istanze Amazon Timestream InfluxDB e creare ed elencare gruppi di parametri. [Per ulteriori informazioni, consulta Access. AmazonTimestreamInflux DBFull](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol-influxdb.html#iam.identitybasedpolicies.predefinedpolicies) | 14 marzo 2024 | 
| [Amazon Timestream per InfluxDB è ora disponibile a livello generale.](https://docs.aws.amazon.com/timestream/latest/developerguide/timestream-for-influxdb.html) | Questa documentazione riguarda la versione iniziale di Amazon Timestream per InfluxDB. | 14 marzo 2024 | 
| [Gli eventi di Amazon Timestream LiveAnalytics for Query sono disponibili in AWS CloudTrail](https://docs.aws.amazon.com/timestream/latest/developerguide/logging-using-cloudtrail.html) | Amazon Timestream LiveAnalytics per ora pubblica gli eventi dei dati dell'API Query su. AWS CloudTrail I clienti possono controllare tutte le richieste API di Query effettuate nei propri AWS account e visualizzare informazioni come chi IAM User/Role ha effettuato la richiesta, quando è stata effettuata la richiesta, quali database e tabelle sono state interrogate e l'ID Query della richiesta. | 12 settembre 2023 | 
| [Amazon LiveAnalytics Timestream per UNLOAD](https://docs.aws.amazon.com/timestream/latest/developerguide/export-unload.html) | Amazon Timestream LiveAnalytics per ora supporta UNLOAD per esportare i risultati delle query su S3. | 12 maggio 2023 | 
| [Amazon Timestream LiveAnalytics per l'aggiornamento a una politica esistente.](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol.html) | Autorizzazioni di caricamento in batch aggiunte a una policy gestita. | 24 febbraio 2023 | 
| [Amazon Timestream LiveAnalytics per il caricamento in batch.](https://docs.aws.amazon.com/timestream/latest/developerguide/batch-load.html) | Amazon Timestream LiveAnalytics per ora supporta la funzionalità di caricamento in batch. | 24 febbraio 2023 | 
| [Amazon Timestream LiveAnalytics per ora supporta. AWS Backup](https://docs.aws.amazon.com/timestream/latest/developerguide/backups.html) | Amazon Timestream LiveAnalytics per ora supporta. AWS Backup | 14 dicembre 2022 | 
| [Amazon Timestream LiveAnalytics per gli aggiornamenti delle politiche gestite AWS](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol.html) | Nuove informazioni sulle politiche AWS gestite e Amazon Timestream LiveAnalytics for, inclusi gli aggiornamenti alle politiche gestite esistenti. | 29 novembre 2021 | 
| [Amazon Timestream LiveAnalytics per il supporto delle query pianificate](https://docs.aws.amazon.com/timestream/latest/developerguide/scheduledqueries.html) | Amazon Timestream LiveAnalytics per ora supporta l'esecuzione di una query per tuo conto, in base a una pianificazione.  | 29 novembre 2021 | 
| [Amazon Timestream LiveAnalytics for supporta l'archiviazione magnetica.](https://docs.aws.amazon.com/timestream/latest/developerguide/writes.html) | Amazon Timestream LiveAnalytics per ora supporta l'utilizzo dello storage magnetico per le scritture da tavolo. | 29 novembre 2021 | 
| [Amazon Timestream per record multimisura LiveAnalytics .](https://docs.aws.amazon.com/timestream/latest/developerguide/writes.html#writes.writing-data-multi-measure) | Amazon Timestream LiveAnalytics per ora supporta un formato più compatto per l'archiviazione dei dati delle serie temporali. | 29 novembre 2021 | 
| [Amazon Timestream LiveAnalytics per gli aggiornamenti delle politiche gestite AWS](https://docs.aws.amazon.com/timestream/latest/developerguide/security-iam-awsmanpol.html) | Nuove informazioni sulle politiche AWS gestite e Amazon Timestream LiveAnalytics for, inclusi gli aggiornamenti alle politiche gestite esistenti. | 24 maggio 2021 | 
| [Amazon Timestream LiveAnalytics for è ora disponibile nella regione Europa (Francoforte).](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) | Amazon Timestream LiveAnalytics for è ora disponibile a livello generale nella regione Europa (Francoforte) (). `eu-central-1` | 23 Aprile 2021 | 
| [Amazon Timestream per LiveAnalytics ora supporta gli endpoint VPC ().AWS PrivateLink](https://docs.aws.amazon.com/timestream/latest/developerguide/VPCEndpoints.html) | Amazon Timestream LiveAnalytics per ora supporta l'uso di endpoint VPC ().AWS PrivateLink | 23 marzo 2021 | 
| [Amazon Timestream ora supporta le query tra tabelle.](https://docs.aws.amazon.com/timestream/latest/developerguide/supported-sql-constructs.SELECT.html) | Puoi utilizzare Amazon Timestream LiveAnalytics per eseguire query tra tabelle.  | 10 febbraio 2021 | 
| [Amazon Timestream LiveAnalytics per ora supporta statistiche avanzate sull'esecuzione delle query.](https://docs.aws.amazon.com/timestream/latest/developerguide/API_query_Query.html) | Amazon Timestream LiveAnalytics per ora supporta statistiche avanzate sull'esecuzione delle query, come la quantità di dati scansionati.  | 10 febbraio 2021 | 
| [Amazon Timestream LiveAnalytics per ora supporta funzioni avanzate di serie temporali.](https://docs.aws.amazon.com/timestream/latest/developerguide/timeseries-specific-constructs.functions.html) | Puoi utilizzare Amazon Timestream LiveAnalytics per eseguire query SQL con funzioni avanzate di serie temporali, come derivati, integrali e correlazioni.  | 10 febbraio 2021 | 
| [Amazon Timestream LiveAnalytics for è ora conforme a HIPAA, ISO e PCI.](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) | Ora puoi utilizzare Amazon Timestream LiveAnalytics per carichi di lavoro che richiedono un'infrastruttura conforme a HIPAA, ISO e PCI.  | 27 gennaio 2021 | 
| [Amazon Timestream LiveAnalytics per ora supporta Telegraf e Grafana open source.](https://docs.aws.amazon.com/timestream/latest/developerguide/OtherServices.html) | Ora puoi usare Telegraf, l'agente server open source basato su plug-in per la raccolta e il reporting dei parametri, e Grafana, la piattaforma di analisi e monitoraggio open source per i database, con Amazon Timestream per. LiveAnalytics  | 25 novembre 2020 | 
| [Amazon Timestream LiveAnalytics for è ora disponibile a livello generale.](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) | Questa documentazione riguarda la versione iniziale di Amazon LiveAnalytics Timestream per. | 30 settembre 2020 | 