Workflow de synchronisation des données
Gardez vos sources de données synchronisées automatiquement
Ce que vous allez construire
Un workflow qui synchronise les données entre systèmes — par exemple, maintenir une Google Sheet synchronisée avec BigQuery, ou pousser les données CRM vers votre entrepôt de données.
Temps de réalisation : 20 minutes
Nodes utilisés : Google Sheets, Loop, BigQuery Writer, Conditional
Le problème
Les données sont dispersées à plusieurs endroits :
- Données marketing dans Google Sheets
- Données commerciales dans le CRM
- Données produits dans les bases de données
- Analytiques dans BigQuery
La synchronisation manuelle est source d’erreurs et chronophage.
Vue d’ensemble du workflow
graph LR
A[Source Data] --> B[Transform]
B --> C[Validate]
C --> D{Valid?}
D -->|Yes| E[Write to Destination]
D -->|No| F[Log Error]
E --> G[Update Sync Log]
Modèles de synchronisation courants
Sheet vers BigQuery
Synchronisez les feuilles marketing vers votre entrepôt de données :
Google Sheets → Transform → BigQuery Writer
CRM vers l’entrepôt
Centralisez les données commerciales :
HubSpot → Transform → BigQuery Writer
Agrégation multi-sources
Combinez des données de plusieurs sources :
Source A ─┐
Source B ─┼→ Merge → Destination
Source C ─┘
Guide pas à pas : Sheet vers BigQuery
Étape 1 : Configurer la source
Créez une Google Sheet avec des données structurées :
| date | campaign | spend | impressions | clicks |
|---|---|---|---|---|
| 2024-01-15 | Brand | 1000 | 50000 | 2500 |
| 2024-01-15 | Search | 2000 | 30000 | 3000 |
Étape 2 : Créer le workflow
- Cliquez sur New Workflow
- Nommez-le « Marketing Data Sync »
Étape 3 : Récupérer les données source
Add Google Sheets Reader
Configurez :
- Spreadsheet ID : votre feuille marketing
- Range :
Marketing!A:E - Include Headers : Yes
Étape 4 : Transformer les données
Add Loop node
Traitez chaque ligne :
- Items :
{{GoogleSheets_0.data}}
Add transformation logic
Utilisez un LLM ou des nodes utilitaires pour :
- Convertir les formats de date
- Calculer les métriques dérivées
- Nettoyer les champs texte
Exemple de transformation :
{
"date": "{{date}}",
"campaign": "{{Lcampaign}}",
"spend": "{{spend}}"
} Étape 5 : Valider les données
Add Conditional node
Vérifiez la validité des données :
Conditions :
daten’est pas videspendest un nombrecampaignn’est pas vide
Acheminer les enregistrements invalides vers la journalisation des erreurs.
Étape 6 : Écrire vers la destination
Add BigQuery Writer node
Configurez :
- Project : votre projet GCP
- Dataset : marketing_data
- Table : campaign_metrics
- Write Mode : Append (ou Replace pour un rafraîchissement complet)
- Data : données de ligne transformées
Étape 7 : Journaliser les résultats de synchronisation
Add Google Sheets Writer for logging
Configurez :
- Spreadsheet ID : votre journal de synchronisation
- Data :
[[
"{{timestamp}}",
"{{totalItems}}",
"{{successCount}}",
"{{errorCount}}",
"success"
]] Gestion des modes de synchronisation
Rafraîchissement complet
Remplacer toutes les données à chaque synchronisation :
1. Supprimer les enregistrements existants
2. Insérer tous les nouveaux enregistrements
Idéal pour : jeux de données réduits, instantanés quotidiens
Synchronisation incrémentale
Ne synchroniser que les enregistrements nouveaux ou modifiés :
1. Suivre l’horodatage de la dernière sync
2. Récupérer uniquement les enregistrements après cet horodatage
3. Insérer ou mettre à jour selon le cas
Idéal pour : gros volumes, besoins en quasi temps réel
Upsert (Update or Insert)
Mettre à jour les enregistrements existants, insérer les nouveaux :
1. Vérifier si l’enregistrement existe (par ID)
2. S’il existe : mise à jour
3. Sinon : insertion
Idéal pour : données CRM, données de référence
Mise en œuvre de la synchronisation incrémentale
Suivre la dernière synchronisation
Stocker l’horodatage de la dernière synchronisation réussie :
graph LR
A[Get Last Sync Time] --> B[Fetch Records Since Then]
B --> C[Process]
C --> D[Update Last Sync Time]
Fetch last sync time
Lire depuis une feuille ou une base de suivi :
SELECT MAX(synced_at) FROM sync_log WHERE table = 'campaigns'Filter source data
Ne récupérer que les nouveaux enregistrements :
WHERE updated_at > '{{lastSyncTime}}'Update sync time on success
Après une synchronisation réussie :
INSERT INTO sync_log (table, synced_at, record_count)
VALUES ('campaigns', NOW(), {{recordCount}}) Gestion des erreurs
Logique de nouvelle tentative
Pour les échecs temporaires :
Loop:
Essayer d’écrire vers BigQuery
En cas d’échec :
Attendre 5 secondes
Nouvelle tentative (max 3 fois)
Si échec persistant :
Journaliser l’erreur
Continuer avec l’enregistrement suivant
File des enregistrements en erreur
Conserver les enregistrements en échec pour revue manuelle :
graph LR
A[Record] --> B{Valid?}
B -->|Yes| C[Write to Destination]
B -->|No| D[Dead Letter Queue]
C -->|Fail| D
Alerte en cas d’échec
Envoyer des notifications quand la synchronisation échoue :
Conditional:
Si error_count > seuil
→ Envoyer un e-mail d’alerte
→ Poster sur Slack
Planification des jobs de synchronisation
| Type de sync | Fréquence | Moment |
|---|---|---|
| Temps réel | Toutes les 5-15 min | Continu |
| Quasi temps réel | Toutes les heures | À l’heure pile |
| Quotidien | Une fois par jour | Hors pointe (2-4 h) |
| Hebdomadaire | Une fois par semaine | Week-end |
Bonnes pratiques
Idempotence
Rendre les synchronisations sûres à relancer :
- Utiliser l’upsert plutôt que l’insert
- Inclure des horodatages pour la déduplication
- Suivre les lots de sync avec des ID
Validation des données
Valider avant d’écrire :
- Vérifier les champs obligatoires
- Contrôler les types de données
- Valider les plages
- Vérifier l’intégrité référentielle
Journalisation
Tout journaliser :
- Heures de début et de fin
- Nombre d’enregistrements
- Statut succès/échec
- Détails des erreurs
Surveillance
Suivre la santé des synchronisations :
| Métrique | Seuil d’alerte |
|---|---|
| Durée de sync | > 2× la normale |
| Taux d’erreur | > 5 % |
| Sync manquées | > 1 manquée |
| Délai des données | > 1 heure |
Résultats attendus
| Métrique | Manuel | Automatisé |
|---|---|---|
| Fréquence de sync | Quotidienne (au mieux) | Toutes les 15 min |
| Taux d’erreur | 5-10 % | < 1 % |
| Temps passé | 2-4 h/semaine | 0 |
| Fraîcheur des données | Heures/jours | Minutes |