Configurare il partizionamento personalizzato per partizionare i dati dell'archivio analitico

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. Per altre informazioni sul partizionamento personalizzato, vedere l'articolo Informazioni sul partizionamento personalizzato.

Per usare il partizionamento personalizzato, è necessario abilitare Collegamento ad Azure Synapse nell'account Azure Cosmos DB. Per altre informazioni, vedere ome configurare Collegamento ad Azure Synapse. L'esecuzione del partizionamento personalizzata può essere attivata dal notebook di Azure Synapse Spark usando Collegamento ad Azure Synapse per Azure Cosmos DB.

Nota

Gli account Azure Cosmos DB devono avere Collegamento ad Azure Synapse abilitato per sfruttare i vantaggi del partizionamento personalizzato. Il partizionamento personalizzato è attualmente supportato solo per Azure Synapse Spark 2.0.

Nota

Collegamento a Synapse per l'API Gremlin è ora disponibile in anteprima. È possibile abilitare Collegamento a Synapse nei grafici nuovi o esistenti usando l'interfaccia della riga di comando di Azure. Per altre informazioni su come configurarla, fare clic qui.

Attivare un processo di partizionamento personalizzato

Il partizionamento può essere attivato da un notebook di Azure Synapse Spark usando Collegamento ad Azure Synapse. È possibile pianificarlo per l'esecuzione come processo in background, una o due volte al giorno oppure può essere eseguito più spesso, se necessario. È anche possibile scegliere uno o più campi dal set di dati come chiave di partizione dell'archivio analitico.

Di seguito sono riportate le opzioni di configurazione obbligatorie necessarie per attivare l'esecuzione personalizzata del partizionamento:

  • spark.cosmos.asns.execute.partitioning : valore booleano che attiva l'esecuzione del partizionamento personalizzata. Il valore predefinito è false.

  • spark.cosmos.asns.partition.keys : chiave/i di partizione con stringa formattata DDL. Ad esempio: ReadDate String.

  • spark.cosmos.asns.basePath : percorso di base per l'archivio partizionato nell'account di archiviazione primario di Synapse.

Nota

Se si scelgono più chiavi di partizione, è possibile accedere a questi record dallo stesso archivio partizionato con basePath che indica la chiave.

Di seguito sono riportate le opzioni di configurazione facoltative che è possibile usare quando si attiva l'esecuzione del partizionamento personalizzato:

  • spark.cosmos.asns.merge.partitioned.files: valore booleano che consente di creare un singolo file per valore di partizione per esecuzione. Il valore predefinito è false.

  • spark.cosmos.asns.partitioning.maxRecordsPerFile : numero massimo di record in un file partizionato singolo nell'archivio partizionato. Se questa configurazione e spark.cosmos.asns.merge.partitioned.files vengono specificati, i nuovi file vengono creati dopo che il numero di record supera il valore maxRecordsPerFile. Questa configurazione è in genere necessaria solo per il partizionamento iniziale per le raccolte di grandi dimensioni. Il valore predefinito è 1.000.000.

    Quando si imposta maxRecordsPerFile ma non si configura spark.cosmos.asns.merge.partitioned.files, i record potrebbero essere suddivisi tra i file prima di raggiungere maxRecordsPerFile. La suddivisione del file dipende anche dal parallelismo disponibile nel pool.

  • spark.cosmos.asns.partitioning.shuffle.partitions: controlla il parallelismo durante le scritture partizionate nell'archivio partizionato. Questa configurazione è necessaria solo per il partizionamento iniziale per le raccolte di grandi dimensioni. È impostata sul numero di core disponibili nel pool di Spark. Il valore predefinito è 200. I valori inferiori potrebbero sprecare risorse se il pool non viene usato per altri carichi di lavoro. Un valore più elevato in genere non causa problemi, perché alcune attività vengono completate in anticipo e possono avviare più attività mentre quelle lente sono in esecuzione. Se si vuole che il processo di partizionamento venga completato più velocemente, è consigliabile aumentare le dimensioni del pool.

spark.read\
    .format("cosmos.olap") \
    .option("spark.synapse.linkedService", "<enter linked service name>") \
    .option("spark.cosmos.container", "<enter container name>") \
    .option("spark.cosmos.asns.execute.partitioning", "true") \
    .option("spark.cosmos.asns.partition.keys", "readDate String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    .option("spark.cosmos.asns.merge.partitioned.files", "true") \
    .option("spark.cosmos.asns.partitioning.maxRecordsPerFile", "2000000") \
    .option("spark.cosmos.asns.partitioning.shuffle.partitions", "400") \
    .load()

Esecuzione di query con archivio partizionato

Per eseguire query con il supporto dell'archivio partizionato sono necessarie le due configurazioni seguenti:

  • spark.cosmos.asns.partition.keys
  • spark.cosmos.asns.basePath

Nell'esempio seguente viene illustrato come usare queste configurazioni per eseguire query nell'archivio partizionato precedente e come il filtro tramite la chiave di partizione può sfruttare l'eliminazione della partizione. Questo archivio viene partizionato usando il campo "ReadDate".

df = spark.read\
    .format("cosmos.olap") \
    .option("spark.synapse.linkedService", "<enter linked service name>") \
    .option("spark.cosmos.container", "<enter container name>") \
    .option("spark.cosmos.asns.partition.keys", "readDate String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    .load()

df_filtered = df.filter("readDate='2020-11-01 00:00:00.000'")
display(df_filtered.limit(10))

Il filtro ReadDate = '2021-11-01' eliminerà i dati corrispondenti ai valori ReadDate diversi da 2021-11-01 dall'analisi durante l'esecuzione.

Nota

I miglioramenti delle query che usano l'archivio partizionato sono applicabili quando le query vengono eseguite nel modo seguente:

  • I dataframe Spark creati dal contenitore dell'archivio analitico di Azure Cosmos DB e
  • Le tabelle Spark che puntano al contenitore dell'archivio analitico di Azure Cosmos DB.

Passaggi successivi

Per altre informazioni, vedere la documentazione seguente: