Retour aux Insights

La corruption silencieuse : pourquoi vérifier la taille d'un fichier ne suffit pas

Pierre FrinSeptembre 20267 min de lecture
source.csv 412 Mo ✓ SFTP ⚡ coupure destination.csv 412 Mo ✓ mais tronqué Vérification : ✓ Données : ✗ SFTP . AZURE BLOB . INTÉGRITÉ FICHIER . ADOBE CAMPAIGN . SALESFORCE DATA CLOUD

Un fichier arrive. Il pèse 412 Mo. Le fichier attendu pèse 412 Mo. La vérification de taille passe. Le workflow continue. Le chargement se déclenche. Les données intègrent votre Datahub ou votre Data Cloud.

Et quelques heures plus tard, vos équipes marketing remontent que des contacts ont disparu. Des segments sont faux. Des campagnes partent sur des bases tronquées.

La corruption était là depuis le début. Silencieuse.

Ce qui s'est passé réellement

Sur un transfert SFTP vers Azure Blob Storage, la connexion s'est interrompue en cours de route. Le fichier a été créé côté destination. Sa taille correspondait à ce qui avait été transféré jusquà l'interruption. Pas à ce qui aurait dû l'être.

Le fichier source était intact. Le fichier de destination était tronqué. Et les deux pesaient exactement le même nombre d'octets d'après le système de vérification, parce que ce système ne comparait pas la taille source avec la taille destination. Il vérifiait uniquement que la taille destination était supérieure à zéro.

Une vérification de taille de fichier sans référence de comparaison ne détecte pas la troncature. Elle détecte l'absence totale de fichier, et rien d'autre.

Pourquoi la vérification de taille seule ne suffit pas

Il existe plusieurs formes de corruption silencieuse dans un flux de fichiers :

  • La troncature : le transfert s'interrompt, le fichier est créé avec ce qui a été reçu. La taille est inférieure à l'attendu, mais si vous ne connaissez pas la taille attendue, vous ne le verrez pas.
  • La corruption de blocs : le fichier arrive complet en taille mais certains blocs sont altérés pendant le transit. La taille est correcte. Le contenu ne l'est pas.
  • L'encodage partiel : une erreur d'encodage en cours de compression ou de conversion crée un fichier lisible mais incomplet sur certaines plages de lignes.
  • Le fichier vide validé : un fichier de 0 octet avec le bon nom passe une vérification d'existence. Sans seuil minimum, il intègre le pipeline.

Ce que Adobe Campaign Datahub fait nativement : presque rien

Adobe Campaign Classic et Campaign v8 proposent des activités de transfert de fichiers (Transfer File) avec des options de vérification d'existence. Mais la vérification de l'intégrité du fichier, checksum MD5, comparaison taille source/destination, comptage de lignes, n'est pas native. Elle doit être implémentée dans des activités JavaScript ou des scripts Shell appelés depuis le workflow.

Sur un Datahub connecté à un Azure Blob, la responsabilité de la vérification d'intégrité revient intégralement à l'équipe qui conçoit le workflow d'import. La plateforme charge ce qu'elle reçoit, sans valider ce qu'elle aurait dû recevoir.

Ce que Salesforce Data Cloud fait nativement : pas mieux

Salesforce Data Cloud propose des connecteurs d'ingésion (Ingestion API, Cloud Storage Connector) avec des jobs de validation. Ces jobs vérifient le format, le schéma, les types de champs. Ils ne vérifient pas si le fichier reçu correspond au fichier envoyé.

Un fichier tronqué au bon format, avec les bonnes colonnes et les bons types, intègre Data Cloud sans erreur. Le job de validation passe au vert. Les données chargées sont incompletes.

Ni Adobe Campaign ni Salesforce Data Cloud ne comparent nativement la taille ou le checksum du fichier reçu avec le fichier source. La validation de l'intégrité est un chantier d'architecture que vos équipes doivent piloter.

Le workflow robuste : trois couches de protection

01
Vérification de la taille téléchargée vs taille source
Le système source publie un fichier manifeste (ou un header SFTP) avec la taille attendue. Après transfert, la taille destination est comparée à la référence. Un écart de plus de 0 octet déclenche une alerte et bloque le pipeline.
02
Relances automatiques avec backoff exponentiel
Si la vérification échoue, le workflow ne plante pas, il relance le transfert après un délai croissant (1 min, 5 min, 15 min). Trois échecs consécutifs déclenchent une alerte opérationnelle et suspendent le pipeline.
03
Passe de réparation sur les lignes manquantes
Si la troncature est détectée après un premier chargement partiel, une passe de réparation identifie les clés primaires manquantes, re-télécharge uniquement les lignes absentes depuis la source, et les injecte en mode upsert sans recharger l'intégralité du fichier.

Ce que ça change sur Adobe Campaign et Salesforce Data Cloud

Adobe Campaign

  • Activité JavaScript après Transfer File pour comparer taille reçue vs manifeste
  • Transition d'erreur vers activité de relance avec compteur de tentatives
  • Log d'audit dans une table de suivi des transferts
  • Alerte opérationnelle via notification workflow en cas d'échec multiple

Salesforce Data Cloud

  • Validation du checksum MD5 avant déclenchement du job d'ingésion
  • Comparaison du row count après ingésion vs row count attendu (fichier manifeste)
  • Webhook ou Flow déclenché en cas d'écart pour relancer le transfert
  • Upsert ciblé sur les enregistrements manquants via Ingestion API

Le principe à retenir

Un flux de fichiers vers un CRM n'est fiable que si trois conditions sont réunies : la taille reçue est vérifiée contre une référence, l'intégrité du contenu est validée par checksum ou comptage de lignes, et le pipeline sait quoi faire en cas d'échec sans intervention manuelle.

Sans ces trois couches, vous avez un pipeline qui fonctionne jusqu'au jour où il ne fonctionne pas, et vous ne le savez qu'en regardant vos campagnes.

La question à poser sur chaque flux de fichiers en production : « Si ce fichier arrive tronqué de 30%, est-ce que notre système le détecte avant de charger les données ?» Si la réponse n'est pas immédiate, vous avez votre prochaine priorité.

Ce sujet est directement lié à l'architecture d'intégration que j'ai décrite dans mon article sur la synchronisation Salesforce et Snowflake : la robustesse d'un pipeline de données ne se mesure pas quand tout va bien, mais quand une connexion tombe au mauvais moment.

Pierre Frin
Consultant CRM · Adobe Campaign · Salesforce · Imagino · Grokium
Formation en ligne

Aller plus loin avec Adobe Campaign Classic V8

8 modules, 24 leçons pour écrire du code fiable en production : queryDef, workflows JavaScript, JSSP, webApps, API et déploiement. Accès permanent, code complet commenté.

Découvrir la formation →

Un audit de vos pipelines de données CRM ?

Cartographie des flux de fichiers, vérification des mécanismes d'intégrité en place, recommandations d'architecture. Cadrage gratuit, sans engagement.

Contact →
Aller plus loin
Tous les articles techniques Outils gratuits Adobe Campaign Me contacter