Ajuster la configuration de la sync incrémentale
La configuration d'une sync vit sur ExternalDataSchema et peut être modifiée à tout moment via
external-data-schemas-partial-update. La plupart des changements sont non-destructifs (prennent effet à la prochaine sync), mais quelques-uns
(changer sync_type, modifier les clés primaires) nécessitent une manipulation prudente pour éviter de corrompre les données synchronisées.
Quand utiliser cette skill
- L'utilisateur veut changer comment une table déjà connectée est synchronisée
- Un diagnostic a signalé que le champ incrémental ou la clé primaire est incorrect
- La table se synchronise trop souvent / pas assez souvent
- Basculer une table incrémentale vers CDC (ou vice versa)
- La table source a été modifiée de l'autre côté (nouvelles colonnes, colonnes supprimées) et la config de sync doit être mise à jour
Si l'utilisateur configure une source toute nouvelle, utilisez plutôt setting-up-a-data-warehouse-source — la configuration
est choisie au moment de la création là-bas.
Outils disponibles
| Outil | Objectif |
|---|---|
external-data-schemas-retrieve |
sync_type, incremental_field, PKs, sync_frequency actuels |
external-data-schemas-incremental-fields-create |
Actualiser les candidats de champs incrémentaux depuis la source en direct |
external-data-schemas-partial-update |
Appliquer le changement de config |
external-data-schemas-reload |
Déclencher une sync avec la nouvelle config |
external-data-schemas-resync |
Effacer et réimporter depuis zéro quand le changement invalide les données existantes |
external-data-schemas-delete-data |
Supprimer la table synchronisée tout en conservant l'entrée de schéma |
external-data-sources-check-cdc-prerequisites-create |
Vérifications préalables Postgres CDC (seulement quand basculer vers/depuis CDC) |
external-data-sources-webhook-info-retrieve |
État du webhook actuel (quand basculer vers/depuis sync_type=webhook) |
external-data-sources-create-webhook-create |
Enregistrer un webhook après basculer un schéma vers sync_type=webhook |
external-data-sources-update-webhook-inputs-create |
Renouveler un secret de signature webhook |
external-data-sources-delete-webhook-create |
Désenregistrer le webhook quand basculer des schémas hors sync_type=webhook |
Les champs que vous pouvez ajuster
Depuis l'endpoint partial-update :
| Champ | Valeurs | Notes |
|---|---|---|
sync_type |
full_refresh, incremental, append, cdc, webhook |
La source doit supporter le type cible — vérifier via incremental-fields |
incremental_field |
Nom de colonne de la source | Doit apparaître dans la liste incremental_fields pour le schéma |
incremental_field_type |
datetime, date, timestamp, integer, numeric, objectid |
Doit correspondre au type réel de la colonne |
primary_key_columns |
Tableau de noms de colonnes | Requis pour CDC. Utilisé pour la dédup upsert sur incremental |
cdc_table_mode |
consolidated, cdc_only, both |
Significatif seulement quand sync_type=cdc |
sync_frequency |
1min, 5min, 15min, 30min, 1hour, 6hour, 12hour, 24hour, 7day, 30day, never |
S'applique à tous les types non-CDC |
sync_time_of_day |
HH:MM:SS |
Quand sync_frequency est à l'échelle quotidienne/hebdomadaire |
should_sync |
true / false |
Suspendre le schéma sans le supprimer |
Flux de travail
Étape 1 — Lire la configuration actuelle
Commencez toujours par external-data-schemas-retrieve({id}). Comprendre l'état actuel prévient les erreurs comme
« corriger » un incremental_field qui est en fait correct.
Notez :
sync_type,incremental_field,incremental_field_type,primary_key_columnsactuelsstatusactuel (ne pas ajuster un schéma actuellementRunning— attendre ou annuler d'abord)last_synced_at(pour pouvoir dire si la prochaine sync a fonctionné)latest_errors'il existe (l'erreur vous indique souvent exactement quoi changer)
Étape 2 — Si vous changez sync_type ou incremental_field, actualiser les candidats
Appelez external-data-schemas-incremental-fields-create({id}). Bien que le nom de l'opération dise « create », elle
relit la source et retourne les champs candidats actuels — utilisez-la pour confirmer que le champ que vous voulez définir existe réellement
sur la source et quels sync types sont maintenant disponibles pour cette table.
La réponse :
{
"incremental_fields": [{"field": "updated_at", "type": "datetime", ...}, ...],
"incremental_available": true,
"append_available": true,
"cdc_available": true,
"full_refresh_available": true,
"detected_primary_keys": ["id"],
"available_columns": [...]
}
Si votre incremental_field cible n'est pas dans la liste, dites-le à l'utilisateur — il doit soit choisir un champ différent, soit
modifier la table source pour en ajouter un.
Étape 3 — Appliquer le changement
Appelez external-data-schemas-partial-update({id}, {...champs modifiés}).
Envoyez uniquement les champs qui changent réellement. Partial update signifie que les champs non spécifiés restent comme ils sont.
Exemples :
// Basculer de full_refresh à incremental
{
"sync_type": "incremental",
"incremental_field": "updated_at",
"incremental_field_type": "datetime"
}
// Changer la fréquence de sync à horaire
{"sync_frequency": "1hour"}
// Corriger une mauvaise PK sur une table CDC
{"primary_key_columns": ["tenant_id", "order_id"]}
// Suspendre un schéma
{"should_sync": false}
Étape 4 — Décider si les données existantes sont toujours valides
C'est l'étape facile à rater. Certains changements de config invalident les données synchronisées ; d'autres non.
Les changements qui N'INVALIDENT PAS les données existantes :
sync_frequency,sync_time_of_day— planification seulementshould_sync— marche/arrêtcdc_table_modedans la plupart des cas — la prochaine sync commencera à écrire dans la nouvelle forme, mais les lignes consolidées historiques restent valides- Basculer entre
incrementaletfull_refreshavec le mêmeincremental_field— la prochaine sync refait juste à zéro - Basculer vers ou depuis
sync_type: "webhook"— les données synchronisées restent valides ; seul le chemin d'ingestion change. N'oubliez pas d'enregistrer ou désenregistrer le webhook (voir sections ci-dessous) aux côtés du changement sync_type.
Les changements qui PEUVENT invalider les données existantes et nécessitent une resync :
- Changer
incremental_fieldvers une colonne différente — le repère de limite haute provient de l'ancienne colonne et ne correspondra pas. Sans resync, vous manquerez les lignes qui ont été mises à jour entre les historiques des deux champs. - Changer
primary_key_columns— les lignes existantes peuvent être déduplicatées incorrectement par rapport aux nouvelles définitions de PK. - Basculer de
full_refreshàappend— les lignes existantes n'ont pas la forme d'historique de version qu'append attend. - Basculer de
appendàfull_refresh— problème opposé ; vous vous retrouverez avec des versions historiques dupliquées. - Basculer vers/depuis
cdc— la forme de la table change fondamentalement.
Quand le changement invalide les données, le flux propre est :
external-data-schemas-partial-updateavec la nouvelle config- Avertir l'utilisateur que c'est destructif
external-data-schemas-resyncpour effacer et réimporter sous la nouvelle config
Ou de manière équivalente, external-data-schemas-delete-data → external-data-schemas-reload. delete-data + reload est
plus propre quand la table est grande et l'utilisateur veut recommencer de zéro.
Étape 5 — Déclencher et confirmer
Pour les changements non-destructifs, appelez external-data-schemas-reload({id}) pour appliquer la nouvelle config immédiatement plutôt que
d'attendre le calendrier.
Attendez un moment, puis external-data-schemas-retrieve({id}) pour confirmer status = Running puis Completed. Rapportez
last_synced_at et tout nouveau latest_error.
Changements spécifiques courants
Basculer full_refresh → incremental
incremental-fields-createpour confirmer que le champ désiré existe etincremental_available: true.partial-update:{sync_type: "incremental", incremental_field, incremental_field_type}.- Pas d'effacement de données nécessaire — la prochaine sync change juste de stratégie. Si la source grandit vite, la prochaine sync incrémentale est la moins chère.
Basculer incremental → cdc (Postgres seulement)
- Exécutez
external-data-sources-check-cdc-prerequisites-createsur la source parent. Procédez seulement sivalid: true. incremental-fields-createpour confirmercdc_available: trueet voirdetected_primary_keys.partial-update:{sync_type: "cdc", primary_key_columns: [...], cdc_table_mode: "consolidated"}.- Resync requise — les tables CDC ont une forme différente. Déclenchez
external-data-schemas-resyncaprès la mise à jour. Avertissez l'utilisateur que cela efface les données existantes.
Corriger un champ incrémental obsolète après dérive de schéma
La source a supprimé la colonne updated_at. La sync échoue avec « column does not exist ».
incremental-fields-createpour voir quels champs restent.- Choisissez un remplacement (ou basculez vers
full_refreshsi aucun ne convient). partial-updateavec le nouveau champ + type (ou nouveau sync_type).reloadpour réessayer.
Changer les clés primaires sur une table CDC
partial-update:{primary_key_columns: [...]}.- Resync requise — les pierres tombales CDC existantes et les clés d'upsert ne correspondent pas à la nouvelle définition de PK, menant à la duplication de lignes ou à des mises à jour manquées.
resync, avertissez l'utilisateur.
Changer sync_frequency
partial-update:{sync_frequency: "1hour"}.- Pas de reload nécessaire — la prochaine sync planifiée applique la nouvelle cadence. Ou reload manuellement si l'utilisateur veut confirmer que rien n'a cassé.
Basculer un schéma vers sync_type: "webhook"
Fonctionne seulement pour les sources qui implémentent WebhookSource (aujourd'hui : Stripe) et les tables où supports_webhooks: true
depuis incremental-fields-create.
incremental-fields-createpour confirmersupports_webhooks: truepour la table.partial-update:{sync_type: "webhook"}.- Si la source n'a pas déjà un webhook enregistré (vérifier avec
webhook-info-retrieve), appelezexternal-data-sources-create-webhook-create({source_id})pour l'enregistrer. - Pas de resync requise — les données de bulk-sync existantes du schéma restent, et le webhook devient le chemin d'ingestion principal une fois la prochaine réconciliation terminée.
- Gardez
sync_frequencydéfini (ex.24hour) — il agit comme une réconciliation de filet de sécurité au cas où une livraison webhook serait manquée.
Basculer hors de sync_type: "webhook"
partial-update:{sync_type: "incremental"}(ou quel que soit le type bulk approprié) avec leincremental_field+incremental_field_typerequis.- Si aucun autre schéma sur la source n'utilise toujours
sync_type: "webhook", appelezexternal-data-sources-delete-webhook-create({source_id})pour désenregistrer. Laisser un webhook orphelin enregistré du côté source signifie juste que les événements seront reçus et supprimés — pas nuisible, mais désordonné. - Si d'autres schémas sur la source sont toujours en webhook, laissez le webhook enregistré — il est partagé entre tous les schémas de type webhook sur la source.
Renouveler un secret de signature webhook
Le secret de signature de la source (ex. whsec_... de Stripe) a été renouvelé, et les payloads échouent maintenant la vérification
de signature.
- Récupérez le nouveau secret du tableau de bord de la source.
external-data-sources-update-webhook-inputs-create({source_id}, {inputs: {signing_secret: "whsec_..."}}).- Pas de reload nécessaire — le prochain payload webhook entrant vérifiera le nouveau secret.
Suspendre un schéma
partial-update:{should_sync: false}. Le schéma arrête la synchronisation mais reste configuré.- Pour reprendre plus tard :
partial-update:{should_sync: true}, puisreloadpour une exécution immédiate.
Notes importantes
- Lisez avant d'écrire. Récupérez toujours la configuration actuelle en premier.
partial-updatene se plaindra pas si vous définissez un champ à la valeur qu'il avait déjà, mais vous pourriez être sur le point de changer quelque chose dont vous n'aviez pas réalisé qu'il était déjà défini. - Pas chaque sync_type n'est disponible sur chaque schéma. La réponse
incremental-fields-createvous indique ce qui est disponible maintenant, ce qui peut être différent de ce qui était disponible à la création (ex. CDC peut avoir été activé pour l'équipe depuis). - Effacez quand la forme change. Basculer la stratégie de sync change souvent la table physique. Si vous ne resync pas, vous mélangez les formes de lignes et les requêtes retourneront des ordures.
- CDC a besoin de prérequis. Ne basculez jamais vers
sync_type: "cdc"sans exécutercheck-cdc-prerequisites-createen premier. La sync échouera juste immédiatement. - Ne touchez pas un schéma Running. Si le schéma s'exécute actuellement, attendez qu'il se termine ou
external-data-schemas-cancelavant d'appliquer le changement. Mettre à jour la config en cours de sync peut laisser le repère de limite haute incrémental incohérent. - La fréquence de sync est bon marché à changer. Encouragez l'expérimentation là-bas. Sync_type et incremental_field sont coûteux à changer — encouragez la prudence.
- Les webhooks sont enregistrés au niveau de la source, pas au niveau du schéma. Plusieurs schémas de type webhook sur la même source partagent un seul enregistrement webhook. Supprimez le webhook seulement quand le dernier schéma de type webhook sur cette source est en train d'être basculé, sinon les autres schémas arrêtent de recevoir les pushes.