Partitionnement personnalisé dans Azure Synapse Link pour Azure Cosmos DB

S’APPLIQUE À : NoSQL MongoDB Gremlin

Le partitionnement personnalisé vous permet de partitionner des données de magasin analytique sur des champs couramment utilisés comme filtres dans des requêtes analytiques, ce qui améliore les performances des requêtes.

Dans cet article, vous allez apprendre à partitionner vos données dans le magasin analytique Azure Cosmos DB avec des clés qui sont essentielles pour vos charges de travail analytiques. Elle explique également comment tirer parti des performances de requête améliorées avec le nettoyage de partition. Vous allez également découvrir comment le partitionnement personnalisé améliore les performances des requêtes lorsque vos charges de travail ont un nombre important de mises à jour ou de suppressions.

Remarque

Les comptes et les conteneurs Azure Cosmos DB doivent avoir Azure Synapse Link activé pour tirer parti du partitionnement personnalisé.

Comment fonctionne-t-il ?

Le partitionnement du magasin analytique est indépendant du partitionnement dans le magasin transactionnel. Par défaut, le magasin analytique n’est pas partitionné. Si vous souhaitez interroger fréquemment le magasin analytique sur la base de champs tels que Date, Heure, Catégorie, etc., vous pouvez utiliser le partitionnement personnalisé pour créer un magasin partitionné distinct basé sur ces clés. Vous pouvez choisir un champ unique ou une combinaison de champs de votre jeu de données en tant que clé de partition du magasin analytique.

Vous pouvez déclencher le partitionnement à partir d’un bloc-notes Spark Azure Synapse en utilisant Azure Synapse Link. Vous pouvez planifier son exécution en tant que travail en arrière-plan une ou deux fois par jour, mais pouvez l’exécuter plus souvent si nécessaire.

Notes

Le magasin partitionné pointe vers le compte de stockage principal ADLS Gen2 qui est lié à l’espace de travail Azure Synapse.

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

Le magasin partitionné contient des données analytiques Azure Cosmos DB jusqu’au dernier timestamp d’exécution de votre travail de partitionnement. Lorsque vous interrogez des données analytiques à l’aide des filtres de clé de partition, Synapse Link fusionne automatiquement les données de magasin partitionnée avec les modifications les plus récentes dans le magasin analytique. Vous obtenez ainsi les résultats les plus récents pour vos requêtes. Bien qu’il fusionne les données avant d’effectuer des requêtes, le delta n’est pas réécrit dans le magasin partitionné. Au fur et à mesure que le delta entre les données du magasin analytique et du magasin partitionné s’étend, les temps de requête sur les données partitionnées peuvent varier. Le déclenchement plus fréquent du travail de partitionnement réduit ce delta. Chaque fois que vous exécutez le travail de partitionnement, seules les modifications incrémentielles dans le magasin analytique sont traitées, et non le jeu de données complet.

Quand l’utiliser ?

L’utilisation d’un magasin partitionné est facultative lors de l’interrogation de données analytiques dans Azure Cosmos DB. Vous pouvez interroger directement les mêmes données à l’aide de Synapse Link avec le magasin analytique existant. Vous pouvez activer le magasin partitionné si vous avez les exigences suivantes :

  • Filtres de requêtes analytiques courants pouvant être utilisés comme colonnes de partition
  • Colonnes de partition à faible cardinalité
  • Une colonne de partition distribue les données de manière égale entre les partitions
  • Volume élevé d’opérations de mise à jour ou de suppression
  • Ingestion de données lente

Si vous interrogez des données actives à l’aide de filtres de requête différents des clés de partition, nous vous recommandons de interroger directement le magasin analytique.

Avantages

Analyse des données réduite à partir du nettoyage de partition

Étant donné que les données correspondant à chaque clé de partition unique sont colocalisées dans le magasin partitionné, lorsque vous utilisez la clé de partition en tant que filtre de requête, les exécutions de requête peuvent nettoyer les données sous-jacentes et analyser uniquement les données requises. En analysant les données limitées, le nettoyage de partition améliore les performances des requêtes analytiques.

Flexibilité pour partitionner vos données analytiques

Vous pouvez avoir plusieurs stratégies de partitionnement pour un conteneur de magasin analytique donné. Vous pouvez utiliser des clés de partition composites ou séparées en fonction de vos besoins en matière de requêtes.

Améliorations des performances des requêtes

En plus des améliorations apportées aux requêtes par le biais du nettoyage de partition, le partitionnement personnalisé permet également d’améliorer les performances des requêtes pour les charges de travail suivantes :

  • Mettre à jour/supprimer des charges de travail lourdes : au lieu de suivre plusieurs versions d’enregistrements dans le magasin analytique et de les charger lors de chaque exécution de requête, le magasin partitionné contient uniquement la dernière version des données. Cette capacité améliore de manière considérable les performances des requêtes en cas de charges de travail volumineuses de mise à jour ou de suppression.

  • Ralentissement des charges de travail d’ingestion de données : le partitionnement compacte les données analytiques. Par conséquent, si votre charge de travail est en cours d’ingestion de données, cette compression peut entraîner de meilleures performances de requête.

Garantie transactionnelle

Il est important de noter que le partitionnement personnalisé assure une garantie transactionnelle complète. Le chemin d’accès de la requête n’est pas bloqué durant l’exécution du partitionnement. Chaque exécution de requête lit les données partitionnées à partir du dernier partitionnement réussi. Elle lit les données les plus récentes provenant du magasin analytique, ce qui permet de s’assurer que les requêtes retournent toujours les données les plus récentes disponibles lors de l’utilisation du magasin partitionné.

Sécurité

Si vous avez configuré des points de terminaison privés managés pour votre magasin analytique, nous vous recommandons également d’ajouter des points de terminaison privés managés pour le magasin partitionné. Le magasin partitionné est un compte de stockage principal associé à votre espace de travail Synapse.

De même, si vous avez configuré des clés managées par le client sur le magasin analytique, vous devez les activer directement sur le compte de stockage principal de l’espace de travail Synapse, qui est également le magasin partitionné.

Stratégies de partitionnement

Vous pouvez utiliser une ou plusieurs clés de partition pour vos données analytiques. Si vous utilisez plusieurs clés de partition, voici des recommandations sur la façon de partitionner les données :

  • Utilisation de clés composites :

    Supposons que vous souhaitez effectuer fréquemment des requêtes basées sur clé1 et clé2.

    Par exemple « Requête pour tous les enregistrements où DateLecture = 2021-10-08 et Emplacement = Sydney ».

    Dans ce cas, l’utilisation de clés composites est plus efficace pour rechercher tous les enregistrements correspondant à DateLecture, et ceux correspondant à Emplacement parmi ceux correspondant à DateLecture.

    Exemples d’options de configuration :

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

    Vous pouvez maintenant interroger en fonction du filtre « Emplacement » :

    • Vous pouvez interroger directement le magasin analytique. Le magasin partitionné analyse tous les enregistrements par DateLecture, puis par Emplacement. Ainsi, en fonction de votre charge de travail et de la cardinalité de vos données analytiques, vous pouvez obtenir de meilleurs résultats en interrogeant directement le magasin analytique.
    • Vous pouvez également exécuter un autre travail de partition pour partitionner également en fonction de « Emplacement » sur le même magasin partitionné.
  • Utilisation de plusieurs clés séparément :

    Supposons que vous souhaitez interroger fréquemment, tantôt sur la base de « DateLecture », tantôt sur la base de « Emplacement ».

    Par exemple,

    • Recherchez tous les enregistrements où DateLecture = ’2021-10-08’
    • Recherchez tous les enregistrements où Emplacement = ’Sydney’

    Exécutez deux travaux de partition avec des clés de partition telles que celles définies ci-dessous pour ce scénario :

    Travail 1 :

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

    Travail 2 :

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

    Notez qu’il n’est pas efficace d’interroger fréquemment sur la base des filtres « DateLecture » et « Emplacement », sur le partitionnement ci-dessus. Dans ce cas, des clés composites produisent de meilleures performances de requête.

Limites

  • Le partitionnement personnalisé n’est disponible que pour Azure Synapse Spark. Le partitionnement personnalisé n’est actuellement pas pris en charge pour les pools de SQL sans serveur.

  • Le magasin actuellement partitionné ne peut pointer que vers le compte de stockage principal associé à l’espace de travail Synapse. La sélection de comptes de stockage personnalisés n’est pas prise en charge à ce stade.

  • LE partitionnement personnalisé n’est disponible que pour l’API pour NoSQL dans Cosmos DB. Les API pour MongoDB, Gremlin et Cassandra sont actuellement en préversion.

Tarification

En plus de la tarification pour Azure Synapse Link, vous devez régler les frais suivants lors de l’utilisation du partitionnement personnalisé :

  • Vous êtes facturé pour l’utilisation de pools Synapse Apache Spark lorsque vous exécutez des travaux de partitionnement sur le magasin analytique.

  • Les données partitionnées sont stockées dans le compte Azure Data Lake Storage Gen2 principal associé à votre espace de travail Azure Synapse Analytics. Vous devez assumer les coûts associés à l’utilisation du stockage et des transactions ADLS Gen2. Ces coûts sont déterminés par le stockage requis pour les données analytiques partitionnées et les données traitées pour les requêtes analytiques dans Synapse, respectivement. Pour plus d’informations sur la tarification, consultez la page Tarification d’Azure Data Lake Storage.

Forum aux questions

À quelle fréquence dois-je exécuter le travail de partitionnement personnalisé ?

Il existe plusieurs facteurs tels que le volume de données incrémentiel, les exigences de latence de requête, etc., qui déterminent la fréquence à laquelle vous pouvez exécuter le travail de partitionnement personnalisé. Il peut être exécuté une fois par jour ou une fois par heure. Vous souhaiterez peut-être planifier le travail de partitionnement plus souvent si le volume de données entrant est élevé et que la latence de requête attendue est faible. Vous devez également accumuler d’abord des données incrémentielles dans le magasin analytique pour que le nettoyage de partition soit effectif.

Les résultats de la requête incluent-ils les données les plus récentes pendant que l’exécution du travail de partitionnement est en cours ?

Oui, le partitionnement personnalisé fournit une garantie transactionnelle complète. Ainsi, les résultats de la requête à tout moment combinent les données partitionnées existantes avec les données de fin qui renvoient le dernier jeu de données du magasin analytique.

Le partitionnement personnalisé peut-il utiliser l’authentification du service lié sur Azure Synapse Analytics ?

Oui, l’authentification du service lié peut être utilisée pour le partitionnement du magasin analytique.

Puis-je modifier ultérieurement la clé de partition d’un conteneur donné ?

Oui, la clé de partition pour le conteneur donné peut être modifiée et la nouvelle définition de clé de partition créera un nouveau magasin partitionné.

Notes

La définition de la clé de partition fait partie du chemin d’accès du magasin partitionné.

Des clés de partition différentes peuvent-elles pointer vers le même BasePath ?

Oui, vous pouvez spécifier plusieurs clés de partition sur le même magasin partitionné, comme ci-dessous :

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

Étapes suivantes

Pour en savoir plus, consultez les documents suivants :