Les Mapping Data Flows d'Azure Data Factory coûtent-ils plus cher que les données qu'ils déplacent ?
Les Mapping Data Flows tournent sur un cluster Spark managé qui met plusieurs minutes à démarrer et se facture à l'heure de vCore. Pour une grosse transformation nocturne, c'est un choix raisonnable. Pour quelques centaines de milliers de lignes, c'est un cluster démarré pour faire ce qu'une seule instruction SQL ferait à l'intérieur de l'entrepôt.
Cela vous semble familier ?
- De petites transformations nocturnes constituent la plus grosse ligne de la facture Data Factory.
- Chaque exécution de Data Flow attend plusieurs minutes qu'un cluster démarre avant de faire le moindre travail.
- L'integration runtime garde un cluster chaud pour éviter l'attente, et il est désormais facturé même inactif.
- La même transformation existe en Data Flow et en procédure stockée, parce que quelqu'un l'a réécrite pour réduire la facture.
Les Mapping Data Flows sont la façon dont Azure Data Factory transforme les données sans écrire de code, et sous le canvas chacun tourne sur un cluster Spark managé. Le cluster démarre, le flow s’exécute, le cluster s’arrête, et la facture est à l’heure de vCore. Pour une grosse transformation, le compromis se justifie. Pour un chargement d’entrepôt ordinaire, c’est un cluster démarré pour faire le travail d’une seule instruction SQL.
Pourquoi le coût dérive
- Chaque exécution entraîne le coût d’un cluster. Le démarrage prend plusieurs minutes, et ces minutes sont facturées que le flow traite un million de lignes ou dix mille.
- Le garder chaud déplace le coût, il ne le supprime pas. Un time to live sur l’integration runtime évite l’attente et facture le cluster inactif à la place.
- Les petits chargements sont les plus nombreux. La plupart des chargements d’entrepôt sont petits et fréquents, ce qui est la pire configuration pour une tarification par cluster.
- Les données sont déjà dans une base. Elles sont extraites de l’entrepôt vers Spark, transformées, puis réécrites, alors que le moteur de l’entrepôt aurait pu faire le travail sur place.
Rien de tout cela n’est la faute des Data Flows. Spark est tarifé pour de la transformation lourde. Les chargements standards d’un entrepôt ne sont pas lourds.
Où la transformation devrait se situer
- Dans le moteur qui détient les données. Fabric, Synapse, Azure SQL et SQL Server sont tous des moteurs ensemblistes. Un chargement delta est une instruction qu’ils exécutent bien.
- En delta, pas en passe complète. Un chargement de vault généré compare avec ce qui est déjà historisé et ne touche que ce qui a changé.
- Généré une fois par plateforme. Du SQL ensembliste ajusté au moteur cible, plutôt qu’ajusté flow par flow au gré de celui qui l’a construit.
Ce qui change avec Datavault Builder
Datavault Builder génère des chargements delta ensemblistes pour les hubs, les links et les satellites, compilés pour Fabric, Synapse, Azure SQL ou SQL Server, de sorte que les transformations standards s’exécutent dans l’entrepôt sans qu’aucun cluster n’intervienne.
- Pas de cluster pour les chargements standards. Le chargement est une instruction dans le moteur qui détient déjà les données. Pas de démarrage, pas de temps d’inactivité.
- Chaque chargement est un delta. Seules les lignes nouvelles et modifiées circulent, donc le coût suit l’ampleur des changements de la source plutôt que sa taille.
- L’historique est un satellite, pas un recalcul. Les questions sur l’état passé trouvent leur réponse dans les changements stockés, sans recalculer le passé chaque nuit.
- Spark reste pour le travail qui relève de Spark. Les transformations très volumineuses ou non relationnelles peuvent garder un cluster. Elles sont l’exception, et elles ne fixent plus le prix de tout le reste.
- Le calcul devient une question de dimensionnement. La capacité de l’entrepôt se réserve et se prévoit. Des minutes de cluster par exécution, non.
Ce qu’il faut décider
Prenez les lignes Mapping Data Flow de la facture Azure et triez les flows par nombre de lignes traitées par exécution. Tout ce qui se trouve sous le point où le démarrage d’un cluster coûte plus cher que le travail lui-même est un chargement qui devrait être généré en SQL.
Voyez-le fonctionner sur l'une de vos sources
Réservez une démo gratuite et apportez le connecteur qui vous coûte le plus cher, en argent ou en temps.
Trois étapes vers un pipeline que vous maîtrisez
-
Lister les Data Flows par nombre de lignes traitées
La plupart sont petits. Un cluster par exécution pour une petite table, c’est le problème de coût résumé en une ligne.
-
Générer les chargements en SQL
Datavault Builder compile des chargements delta ensemblistes pour Fabric, Synapse, Azure SQL ou SQL Server. Ils s’exécutent là où sont les données.
-
Garder Spark pour le travail qui relève de Spark
Les transformations réellement volumineuses ou non structurées peuvent rester sur un cluster. Les chargements standards de l’entrepôt n’en ont pas besoin.
Comment Datavault Builder supprime les frictions de l'ingestion
-
L'ingestion est intégrée
Chargements batch, delta et CDC depuis les bases de données, les fichiers, les API REST, les sources NoSQL et Python, les flux comme Kafka arrivant en micro-batches. La même plateforme qui génère le warehouse, sans seconde facture.
-
Votre schéma, pas celui du fournisseur
Les tables source sont mappées vers un modèle Data Vault 2.0 que vous avez conçu. Une nouvelle colonne ou une table renommée change un mapping, pas une chaîne de scripts post-chargement.
-
Seuls les deltas circulent
Les Hubs, Links et Satellites chargent ce qui a changé. Les rechargements complets restent en staging au lieu d’être retraités en aval chaque nuit.
-
L'historique est conservé par conception
Chaque changement est conservé tel qu’il arrive, donc le reporting historique fonctionne même là où la source écrase ses propres lignes.
-
Du code que vous n'écrivez jamais
Le chargement, l’historisation et la traçabilité sont générés depuis le modèle en temps réel et s’exécutent nativement sur Snowflake, Databricks, BigQuery, SQL Server, Fabric, Oracle ou PostgreSQL.
-
Une plateforme, jusqu'à neuf outils en moins
Modélisation, ETL, CI/CD, documentation et traçabilité au même endroit. C’est ce qui rend possible les 14,7 minutes entre le besoin et la production.
Rencontrez notre expert
Vingt minutes avec notre Sales Director et une réponse honnête sur l’adéquation avec votre stack.
Matt Collett
Sales Director
Parfait, choisissez un créneau qui vous convient :
Les autres problèmes traités par cette série
-
Les limites d'Azure Data Factory : le coût caché des pipelines assemblés à la main et des transformations Spark
Azure Data Factory est une bonne couche de transport dans Azure et un mauvais endroit où loger un entrepôt de données. Utilisé comme suite de modélisation et de transformation, il apporte un canvas que personne ne sait lire, des releases qui échouent sur les templates ARM et des clusters Spark pour des chargements qui tiennent en une instruction SQL. Et chacun de ces pipelines n’existe que dans Azure.
-
Chaque release Azure Data Factory tourne-t-elle à la bataille de templates ARM ?
Sous l’éditeur visuel, une Azure Data Factory est du JSON : pipelines, datasets, linked services et le template ARM qui les déploie. Faire passer un changement de Dev à Prod implique des fichiers de paramètres, des paramètres globaux et un template qui échoue sur une seule incohérence de type. Les releases devraient être générées à partir d’un modèle, rollback inclus.
-
Votre canvas Azure Data Factory est-il devenu trop grand pour ceux qui l'ont construit ?
Un pipeline en glisser-déposer est rapide à construire et lent à changer. Au-delà de quelques dizaines d’activités, le canvas devient la documentation, le câblage prend le pas sur la logique, et chaque nouvelle source est une copy activity de plus que personne ne veut toucher. La solution n’est pas un canvas plus ordonné. C’est un modèle qui génère les pipelines.
Questions et réponses
- Cela supprime l’attente en gardant le cluster chaud, et facture le cluster chaud. Le coût passe du démarrage au temps d’inactivité. La vraie question est de savoir pourquoi un chargement standard d’entrepôt a besoin d’un cluster.
- Non. Ils tournent sur des clusters Spark gérés par l’Azure Integration Runtime, facturés à l’heure de vCore. Databricks est un service distinct avec sa propre tarification.
- Oui. Les activités Stored Procedure et Script font exactement cela, et ce sont elles qui constituent la comparaison honnête. Le problème porte sur les Mapping Data Flows pour les chargements standards de l’entrepôt, et sur le fait que les procédures appelées par ces activités restent écrites et maintenues à la main, une par table. Un chargement généré permet l’exécution dans le moteur sans les procédures écrites à la main.
- Pour des chargements ensemblistes de données relationnelles, presque toujours : le moteur détient déjà les données et son tarif correspond exactement à ce travail. Spark a sa place sur les transformations très volumineuses ou non relationnelles, qui sont une minorité des chargements d’entrepôt.