Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'output di Azure Cosmos DB in Analisi di flusso di Azure scrive i risultati dell'elaborazione del flusso come documenti JSON in un container Azure Cosmos DB. Supporta l'archiviazione dei dati e le query a bassa latenza su dati JSON non strutturati. Capire come si comporta questo output ti aiuta a configurarlo per la velocità di throughput, la coerenza e la partizionazione che il tuo scenario richiede.
Nozioni di base di Azure Cosmos DB come destinazione di output
L'output di Azure Cosmos DB di Stream Analytics scrive i risultati dell'elaborazione del flusso in formato JSON nei contenitori di Azure Cosmos DB. Se non si ha familiarità con Azure Cosmos DB, vedere la documentazione di Azure Cosmos DB per iniziare.
Stream Analytics si collega ad Azure Cosmos DB solo tramite l'API SQL. Altre API di Azure Cosmos DB non sono ancora supportate. Se Analisi di flusso punta agli account Azure Cosmos DB creati con altre API, i dati potrebbero non essere archiviati correttamente. Quando usi Azure Cosmos DB come output, imposta il tuo lavoro al livello di compatibilità 1.2.
Analisi di flusso non crea contenitori nel database. È invece necessario crearli in anticipo. È quindi possibile controllare i costi di fatturazione dei contenitori di Azure Cosmos DB. È anche possibile ottimizzare le prestazioni, la coerenza e la capacità dei contenitori direttamente usando l'API di Azure Cosmos DB. Le sezioni seguenti illustrano in dettaglio alcune opzioni del contenitore per Azure Cosmos DB.
Ottimizzare coerenza, disponibilità e latenza
Per soddisfare le esigenze della tua applicazione, ottimizza il database e i contenitori in Azure Cosmos DB e fai compromessi tra coerenza, disponibilità, latenza e throughput.
A seconda dei livelli di coerenza di lettura che il tuo scenario richiede rispetto alla latenza di lettura e scrittura, scegli un livello di coerenza sul tuo account database. Per migliorare la capacità di produttività, aumenta le Unità di Richiesta (RU) sul container. Per impostazione predefinita, Azure Cosmos DB consente anche l'indicizzazione sincrona per ogni operazione CRUD nel contenitore. Questa opzione è un altro modo utile per controllare le prestazioni di lettura e scrittura in Azure Cosmos DB. Per altre informazioni, rivedere l'articolo Modificare i livelli di coerenza del database e delle query.
Upsert di Analisi di flusso
Utilizzando l'integrazione di Stream Analytics con Azure Cosmos DB, puoi inserire o aggiornare i record nel tuo container in base a una determinata colonna Document ID. L'operazione viene definita anche upsert. Analisi di flusso usa un approccio upsert ottimistico. Gli aggiornamenti avvengono solo quando un inserimento fallisce a causa di un conflitto di ID documento.
Utilizzando il livello di compatibilità 1.0, Stream Analytics esegue questo aggiornamento come operazione PATCH, supportando quindi aggiornamenti parziali al documento. Analisi di flusso aggiunge nuove proprietà o sostituisce in modo incrementale una proprietà esistente. Le modifiche apportate ai valori delle proprietà di matrice nel documento JSON comportano, tuttavia, la sovrascrittura dell'intera matrice, cioè, la matrice non viene unita.
Utilizzando il livello di compatibilità 1.2, il comportamento dell'upsert cambia per inserire o sostituire il documento. La sezione successiva sul livello di compatibilità 1.2 descrive ulteriormente questo comportamento.
Se il documento JSON in entrata ha un campo ID esistente, Azure Cosmos DB usa automaticamente quel campo come colonna ID del documento. Stream Analytics gestisce eventuali scritture successive in questo modo, portando a una di queste situazioni:
- Gli ID univoci generano operazioni di inserimento.
- ID duplicati e ID documento impostati su ID generano operazioni di upsert.
- ID duplicati e ID documento non impostati generano un errore dopo il primo documento.
Se si desidera salvare tutti i documenti, inclusi quelli che hanno un ID duplicato, rinominare il campo ID nella query (usando la parola chiave AS). Consentire ad Azure Cosmos DB di creare il campo ID o sostituire l'ID con il valore di un'altra colonna (usando la parola chiave AS o usando l'impostazioneID documento).
Partizionamento dei dati in Azure Cosmos DB
Con Azure Cosmos DB le partizioni vengono scalate automaticamente in base al carico di lavoro. Usa contenitori illimitati per partizionare i tuoi dati. Durante la scrittura in contenitori illimitati, Stream Analytics utilizza un numero di scrittori paralleli uguale a quello usato nel passaggio di query precedente o nello schema di partizionamento degli input.
Nota
Analisi di flusso di Azure supporta solo un numero illimitato di contenitori con chiavi di partizione di primo livello. Ad esempio, /region è supportata. Le chiavi di partizione annidate (ad esempio, /region/name) non sono supportate.
A seconda della chiave di partizione scelta, è possibile che venga visualizzato questo avviso:
CosmosDB Output contains multiple rows and just one row per partition key. If the output latency is higher than expected, consider choosing a partition key that contains at least several hundred records per partition key.
Scegli una proprietà della chiave di partizione che abbia molti valori distinti e che distribuisca il carico di lavoro in modo uniforme tra questi valori. Come artefatto naturale del partizionamento, la massima capacità di una singola partizione limita le richieste che coinvolgono la stessa chiave di partizione.
Le dimensioni di archiviazione per i documenti che appartengono allo stesso valore della chiave di partizione sono limitate a 20 GB (il limite di dimensioni della partizione fisica è 50 GB). Una chiave di partizione ideale è quella che appare frequentemente come filtro nelle tue query e ha una cardinalità sufficiente per garantire che la tua soluzione sia scalabile.
Le chiavi di partizione usate per le query di Analisi di flusso e Azure Cosmos DB non devono essere identiche. Per topologie completamente parallele, usa la chiave di partizione Input, PartitionId, come chiave di partizione della query Stream Analytics, ma questa scelta potrebbe non essere la scelta raccomandata per la chiave di partizione di un container Azure Cosmos DB.
Una chiave di partizione è anche il limite per le transazioni nelle *stored procedure* e nei *trigger* per Azure Cosmos DB. Scegli la chiave di partizione in modo che i documenti che si trovano insieme nelle transazioni condividano lo stesso valore della chiave di partizione. L'articolo Partizionamento in Azure Cosmos DB fornisce altri dettagli sulla scelta di una chiave di partizione.
Per i container Azure Cosmos DB fissi, Stream Analytics non offre alcun modo per scalare o uscire dopo che sono pieni. Tali contenitori hanno un limite massimo di 10 GB e velocità effettiva di 10.000 UR al secondo. Per eseguire la migrazione dei dati da un contenitore fisso a un contenitore illimitato, ad esempio con una velocità effettiva di almeno 1000 UR al secondo e una chiave di partizione, usare lo strumento di migrazione dati o la libreria di feed di modifiche.
La possibilità di scrivere in più contenitori fissi è in fase di deprecazione. Non usarlo per scalare il tuo lavoro di Stream Analytics.
Velocità effettiva migliorata con il livello di compatibilità 1.2
Utilizzando il livello di compatibilità 1.2, Stream Analytics supporta l'integrazione nativa per la scrittura in massa in Azure Cosmos DB. Utilizzando questa integrazione, Stream Analytics scrive efficacemente su Azure Cosmos DB massimizzando il throughput e gestendo in modo efficiente le richieste di throttling.
Il meccanismo di scrittura migliorato è disponibile con un nuovo livello di compatibilità a causa della differenza nel comportamento di upsert. Utilizzando livelli precedenti a 1.2, il comportamento dell'upsert è inserire o unire il documento. Utilizzando la versione 1.2, il comportamento dell'upsert cambia per inserire o sostituire il documento.
Con i livelli precedenti alla versione 1.2, Stream Analytics usa una procedura archiviata personalizzata per eseguire l'upsert in blocco dei documenti per chiave di partizione in Azure Cosmos DB. A quel punto, Stream Analytics scrive un lotto come una transazione. Anche quando un singolo record ha un errore transitorio (throttling), Stream Analytics deve riprovare l'intero lotto. Questo comportamento rende gli scenari anche con un throttling ragionevole più lenti.
L'esempio seguente mostra due processi di Analisi di flusso identici che leggono dallo stesso input di Hub eventi di Azure. Entrambi i processi di Stream Analytics sono completamente partizionati utilizzando una query pass-through e scrivono su contenitori identici di Azure Cosmos DB. Le metriche a sinistra provengono dall'attività configurata con il livello di compatibilità 1.0. Le metriche a destra provengono dal lavoro configurato con la 1.2. Una chiave di partizione di un contenitore Azure Cosmos DB è un GUID univoco che proviene dall'evento di input.
Il tasso di eventi in entrata negli Event Hub è due volte superiore a quello configurato per ricevere i container di Azure Cosmos DB (20.000 RU), quindi puoi aspettarti un throttling in Azure Cosmos DB. Tuttavia, il processo con 1.2 sta scrivendo in modo coerente a una velocità effettiva superiore (eventi di output al minuto) e con una media inferiore di % di utilizzo unità di streaming. Nel tuo ambiente, questa differenza dipende da qualche altro fattore. Questi fattori includono la scelta del formato dell'evento, la dimensione degli eventi/messaggi di input, le chiavi di partizione e la query.
Utilizzando la versione 1.2, Stream Analytics utilizza in modo più intelligente il 100% della produttività disponibile in Azure Cosmos DB, con poche resubmission dovute a throttling o limitazione di velocità. Questo comportamento offre un'esperienza migliore per altri carichi di lavoro come le query in esecuzione nel contenitore contemporaneamente. Per informazioni sull'aumento delle dimensioni di Analisi di flusso con Azure Cosmos DB come sink da 1.000 fino a 10.000 messaggi al secondo, provare questo progetto di esempio di Azure.
La velocità di output di Azure Cosmos DB è identica utilizzando 1.0 e 1.1. È consigliabile usare il livello di compatibilità 1.2 in Analisi di flusso con Azure Cosmos DB.
Impostazioni di Azure Cosmos DB per l'output JSON
Quando configuri Azure Cosmos DB come output in Stream Analytics, le seguenti proprietà definiscono l'output.
| Campo | Descrizione |
|---|---|
| Alias di output | Alias per fare riferimento a questo output nella query di Analisi di flusso di Azure. |
| Abbonamento | Sottoscrizione di Azure. |
| ID del conto | Nome o URI endpoint dell'account Azure Cosmos DB. |
| Chiave dell'account | Chiave di accesso condiviso per l'account Azure Cosmos DB. |
| Banca dati | Nome del database Azure Cosmos DB. |
| Nome contenitore | Il nome del contenitore, ad esempio MyContainer. Deve esistere un contenitore denominato MyContainer. |
| ID documento | Facoltativo. Il nome della colonna negli eventi di output che funge da chiave unica per le operazioni di inserimento o aggiornamento. Se lo lasci vuoto, Stream Analytics inserisce tutti gli eventi senza opzione di aggiornamento. |
Dopo aver configurato l'output di Azure Cosmos DB, è possibile usarlo nella query come destinazione di un'istruzione INTO. Quando usi un output Azure Cosmos DB in questo modo, devi impostare esplicitamente una chiave di partizione.
Il record di output deve contenere una colonna con distinzione tra maiuscole e minuscole denominata in base alla chiave di partizione in Azure Cosmos DB. Per ottenere una maggiore parallelizzazione, è possibile che l'istruzione richieda una clausola PARTITION BY che usa la stessa colonna.
Ecco una query di esempio:
SELECT TollBoothId, PartitionId
INTO CosmosDBOutput
FROM Input1 PARTITION BY PartitionId
Gestione degli errori e tentativi
Se si verifica un errore temporaneo, l'indisponibilità del servizio o la limitazione del traffico quando Stream Analytics invia eventi ad Azure Cosmos DB, Stream Analytics ritenta indefinitamente di completare correttamente l'operazione. Ma non effettua nuovi tentativi in caso di errori Non autorizzato (codice di errore HTTP 401), Non trovato (codice di errore HTTP 404), Proibito (codice di errore HTTP 403) o Richiesta non valida (codice di errore HTTP 400).
Problemi comuni che causano il guasto dell'output di Azure Cosmos DB
Diverse condizioni possono causare il fallimento dell'output di Azure Cosmos DB. I dati di output di Stream Analytics potrebbero violare un vincolo unico di indice sul container, la PartitionKey colonna potrebbe non esistere o la Id colonna potrebbe non esistere. Per maggiori informazioni sui vincoli degli indici unici, vedi Vincoli di chiave uniche in Azure Cosmos DB.