Partizionamento personalizzato in Collegamento ad Azure Synapse per Azure Cosmos DB

SI APPLICA A: NoSQL MongoDB Gremlin

Il partizionamento personalizzato consente di partizionare i dati dell'archivio analitico nei campi comunemente usati come filtri nelle query analitiche, con un conseguente miglioramento delle prestazioni delle query.

Questo articolo illustra come partizionare i dati nell'archivio analitico di Azure Cosmos DB usando chiavi critiche per i carichi di lavoro analitici. Viene inoltre illustrato come sfruttare le prestazioni delle query migliorate con l'eliminazione delle partizioni. Si apprenderà anche come il partizionamento personalizzato migliora le prestazioni delle query quando i carichi di lavoro hanno un numero significativo di aggiornamenti o eliminazioni.

Nota

Gli account e i contenitori di Azure Cosmos DB devono avere Collegamento ad Azure Synapse abilitato per sfruttare il partizionamento personalizzato.

Come funziona?

Il partizionamento dell'archivio analitico è indipendente dal partizionamento nell'archivio transazionale. Per impostazione predefinita, l'archivio analitico non è partizionato. Se si desidera eseguire spesso query sull'archivio analitico in base a campi come Data, Ora, Categoria e così via, è possibile usare il partizionamento personalizzato per creare un archivio partizionato separato in base a queste chiavi. È possibile scegliere un singolo campo o una combinazione di campi dal set di dati come chiave di partizione dell'archivio analitico.

È possibile attivare il partizionamento da un notebook di Azure Synapse Spark usando Collegamento ad Azure Synapse. È possibile pianificarla per l'esecuzione come processo in background, una o due volte al giorno, ma può essere eseguita più spesso, se necessario.

Nota

L'archivio partizionato punta all'account di archiviazione primario di ADLS Gen2 collegato all'area di lavoro di Azure Synapse.

Architecture of partitioned store in Azure Synapse Link for Azure Cosmos DB

L'archivio partizionato contiene dati analitici di Azure Cosmos DB fino all'ultimo timestamp di esecuzione del processo di partizionamento. Quando si eseguono query sui dati analitici usando i filtri della chiave di partizione, Collegamento a Synapse unisce automaticamente i dati dell'archivio partizionato con le modifiche più recenti nell'archivio analitico. In questo modo vengono visualizzati i risultati più recenti per le query. Anche se unisce i dati prima dell'esecuzione di query, il delta non viene riscritto nell'archivio partizionato. Man mano che il delta tra i dati nell'archivio analitico e l'archivio partizionato si estende, i tempi di query sui dati partizionati possono variare. L'attivazione del processo di partizionamento con maggiore frequenza riduce questo delta. Ogni volta che si esegue il processo di partizione, vengono elaborate solo le modifiche incrementali nell'archivio analitico, anziché il set di dati completo.

Quando usare la strategia

L'uso dell'archivio partizionato è facoltativo quando si eseguono query sui dati analitici in Azure Cosmos DB. È possibile eseguire direttamente query sugli stessi dati usando Collegamento a Synapse con l'archivio analitico esistente. Se si hanno i requisiti seguenti, è consigliabile attivare l'archivio partizionato:

  • Filtri comuni di query analitiche che possono essere usati come colonne di partizione
  • Colonne di partizione a cardinalità bassa
  • La colonna di partizione distribuisce i dati equamente tra le partizioni
  • Volume elevato di operazioni di aggiornamento o eliminazione
  • Inserimento dati lento

Se si eseguono query sui dati in tempo reale usando filtri di query diversi dalle chiavi di partizione, è consigliabile eseguire query direttamente sull'archivio analitico.

Vantaggi

Riduzione dell'analisi dei dati dall'eliminazione delle partizioni

Poiché i dati corrispondenti a ogni chiave di partizione univoca vengono inseriti nell'archivio partizionato, quando si usa la chiave di partizione come filtro di query, le esecuzioni di query possono eliminare i dati sottostanti ed eseguire l'analisi solo dei dati necessari. Analizzando dati limitati, l'eliminazione delle partizioni migliora le prestazioni delle query analitiche.

Flessibilità per partizionare i dati analitici

È possibile avere più strategie di partizionamento per un determinato contenitore di archivi analitici. È possibile usare chiavi di partizione composite o separate in base ai requisiti di query.

Miglioramenti delle prestazioni delle query

Oltre ai miglioramenti apportati alle query dall'eliminazione della partizione, il partizionamento personalizzato comporta anche un miglioramento delle prestazioni delle query per i carichi di lavoro seguenti:

  • Carichi di lavoro pesanti di aggiornamento/eliminazione: invece di tenere traccia di più versioni di record nell'archivio analitico e caricarli durante ogni esecuzione di query, l'archivio partizionato contiene solo la versione più recente dei dati. Questa funzionalità migliora significativamente le prestazioni delle query quando si dispone di carichi di lavoro elevati di aggiornamento/eliminazione.

  • Carichi di lavoro di inserimento dati lenti: il partizionamento compatta i dati analitici e quindi, se il carico di lavoro ha un inserimento dati lento, questa compattazione potrebbe comportare prestazioni migliori delle query

Garanzia transazionale

È importante notare che il partizionamento personalizzato assicura una garanzia transazionale completa. Il percorso della query non viene bloccato mentre è in corso l'esecuzione del partizionamento. Ogni esecuzione di query legge i dati partizionati dall'ultimo partizionamento riuscito. Legge i dati più recenti dall'archivio analitico, assicurandosi che le query restituisca sempre i dati più recenti disponibili quando si usa l'archivio partizionato.

Sicurezza

Se sono stati configurati endpoint privati gestiti per l'archivio analitico, è consigliabile aggiungere anche endpoint privati gestiti per l'archivio partizionato. L'archivio partizionato è l'account di archiviazione primario associato all'area di lavoro di Synapse.

Analogamente, se sono state configurate chiavi gestite dal cliente nell'archivio analitico, è necessario abilitarle direttamente nell'account di archiviazione primario dell'area di lavoro Synapse, che è anche l'archivio partizionato.

Strategie di partizionamento

È possibile usare una o più chiavi di partizione per i dati analitici. Se si usano più chiavi di partizione, ecco alcuni consigli su come partizionare i dati:

  • Uso di chiavi composite:

    Si supponga di voler eseguire spesso query basate su Key1 e Key2.

    Ad esempio, "Query per tutti i record in cui ReadDate = ‘2021-10-08' e Location = ‘Sydney'".

    In questo caso, l'uso di chiavi composite è più efficiente, per cercare tutti i record che corrispondono a ReadDate e i record corrispondenti a Location all'interno di Tale ReadDate.

    Opzioni di configurazione di esempio:

    .option("spark.cosmos.asns.partition.keys", "ReadDate String, Location String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    

    Ora è possibile eseguire query in base al filtro "Posizione":

    • È possibile eseguire query direttamente nell'archivio analitico. L'archivio partizionato analizza prima tutti i record in base a ReadDate e quindi in base alla posizione. Pertanto, a seconda del carico di lavoro e della cardinalità dei dati analitici, è possibile ottenere risultati migliori eseguendo direttamente query sull'archivio analitico.
    • È anche possibile eseguire un altro processo di partizione per partizionare in base alla "posizione" nello stesso archivio partizionato.
  • Uso di più chiavi separatamente:

    Si supponga di voler eseguire spesso query in base a 'ReadDate' e altre volte, in base a 'Location'.

    ad esempio:

    • Query per tutti i record in cui ReadDate = ‘2021-10-08'
    • Query per tutti i record in cui Location = ‘Sydney'

    Eseguire due processi di partizione con chiavi di partizione, come definito di seguito per questo scenario:

    Processo 1:

    .option("spark.cosmos.asns.partition.keys", "ReadDate String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    

    Processo 2:

    .option("spark.cosmos.asns.partition.keys", "Location String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    

    Si noti che non è efficiente eseguire spesso query in base ai filtri "ReadDate" e "Location" insieme, al partizionamento precedente. Le chiavi composite consentono prestazioni migliori delle query in questo caso.

Limiti

  • Il partizionamento personalizzato è disponibile solo per Azure Synapse Spark. Il partizionamento personalizzato non è attualmente supportato per i pool SQL serverless.

  • Attualmente l'archivio partizionato può puntare solo all'account di archiviazione primario associato all'area di lavoro di Synapse. La selezione di account di archiviazione personalizzati non è supportata a questo punto.

  • Il partizionamento personalizzato è disponibile solo per l'API per NoSQL in Azure Cosmos DB. Le API per MongoDB, Gremlin e Cassandra sono attualmente in anteprima.

Prezzi

Oltre ai prezzi di Collegamento ad Azure Synapse, vengono addebitati i costi seguenti quando si usa il partizionamento personalizzato:

  • Viene fatturato l'uso dei pool di Apache Spark di Synapse quando si eseguono processi di partizionamento nell'archivio analitico.

  • I dati partizionati vengono archiviati nell'account di Azure Data Lake Storage Gen2 primario associato all'area di lavoro di Azure Synapse Analytics. Vengono addebitati i costi associati all'uso dell'archiviazione e delle transazioni di ADLS Gen2. Questi costi sono determinati dalla risorsa di archiviazione richiesta rispettivamente dai dati analitici partizionati e dai dati elaborati per le query analitiche in Synapse. Per altre informazioni sui prezzi, vedere la pagina dei prezzi di Azure Data Lake Storage.

Domande frequenti

Con quale frequenza è necessario eseguire il processo di partizionamento personalizzato?

Esistono diversi fattori, ad esempio volume di dati incrementali, requisiti di latenza delle query e così via, che determinano la frequenza con cui è possibile eseguire il processo di partizionamento personalizzato. Potrebbe essere eseguito una volta al giorno o una volta in poche ore. È possibile pianificare il processo di partizionamento più spesso se il volume di dati in ingresso è elevato e la latenza di query prevista è bassa. È anche necessario prima accumulare dati incrementali nell'archivio analitico per rendere effettiva l'eliminazione della partizione.

I risultati della query includono i dati più recenti mentre è in corso l'esecuzione del processo di partizionamento?

Sì, il partizionamento personalizzato offre una garanzia transazionale completa. Pertanto, i risultati della query in qualsiasi momento combinano i dati partizionati esistenti con i dati della parte finale che restituiscono il set di dati dell'archivio analitico più recente.

Il partizionamento personalizzato può usare l'autenticazione del servizio collegato in Azure Synapse Analytics?

Sì, l'autenticazione del servizio collegato può essere usata per il partizionamento dell'archivio analitico.

È possibile modificare la chiave di partizione per un determinato contenitore in un secondo momento?

Sì, la chiave di partizione per il contenitore specificato può essere modificata e la nuova definizione della chiave di partizione creerà un nuovo archivio partizionato.

Nota

La definizione della chiave di partizione fa parte del percorso dell'archivio partizionato.

Le chiavi di partizione diverse possono puntare allo stesso BasePath?

Sì, è possibile specificare più chiavi di partizione nello stesso archivio partizionato come indicato di seguito:

.option("spark.cosmos.asns.partition.keys", "ReadDate String, Location String") \
.option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \

Passaggi successivi

Per altre informazioni, vedere la documentazione seguente: