Ce document explique le fonctionnement de la synchronisation des données dans Data Integration et vous aide à évaluer les résultats des tâches, tels que le volume de données et le nombre d'enregistrements de destination. Il présente également des scénarios courants liés à la qualité des données et fournit des solutions pour les résoudre.
Fonctionnement
DataWorks Data Integration utilise une architecture de traitement parallèle basée sur des plugins pour assurer une synchronisation des données efficace et stable.
Modèle d'exécution parallèle (job et task)
Pour maximiser le débit des données, une tâche de synchronisation utilise une structure d'exécution à deux niveaux :
Job : instance en cours d'exécution d'une tâche de synchronisation.
Task : plus petite unité d'exécution d'un job. Un job est divisé en plusieurs tasks qui peuvent s'exécuter simultanément sur une ou plusieurs machines.
Chaque task traite un shard de données indépendant. Ce mécanisme de traitement parallèle améliore considérablement l'efficacité globale de la synchronisation des données.
Flux de données basé sur des plugins (reader et writer)
Au sein de chaque task, le flux de données est orchestré par un reader plugin et un writer plugin connectés par un tampon en mémoire :
reader plugin : se connecte au magasin de données source, lit les données et les transfère vers le tampon interne.
writer plugin : consomme les données du tampon et les écrit dans le magasin de données de destination.
Le reader plugin et le writer plugin respectent strictement les protocoles natifs et les contraintes, tels que les types de données et les restrictions de clé primaire, de leurs sources de données respectives. Par conséquent, le comportement final de la synchronisation et la cohérence des données dépendent de l'implémentation des systèmes source et cible.
Dépannage de la cohérence des données côté writer
Le writer plugin de Data Integration écrit les données de la source vers la destination. Chaque type de source de données de destination dispose d'un writer plugin correspondant. Le writer plugin soumet les données à la destination en utilisant JDBC ou le SDK de la source de données, selon le mode d'écriture configuré, y compris les stratégies de résolution des conflits.
Les résultats d'écriture réels et le contenu des données à la destination dépendent du mode d'écriture et des contraintes de la table de destination.
Si vous rencontrez des problèmes de qualité des données, tels que des écarts dans le nombre d'enregistrements ou le contenu des données, après l'achèvement d'une tâche de synchronisation, examinez les problèmes courants suivants côté writer.
|
Cause |
Description |
Solution |
|
|
write mode mal configuré |
Le writer plugin écrit les données source dans la destination en utilisant le mode d'écriture sélectionné. Si les données source entrent en conflit avec les contraintes de la table de destination, cela peut entraîner des échecs d'insertion (données incorrectes), des rejets silencieux ou le remplacement d'enregistrements. |
Sélectionnez le mode d'écriture approprié pour votre cas d'utilisation. Pour plus d'informations, consultez Annexe : Modes d'écriture pour les bases de données relationnelles. |
|
|
Seuil de données incorrectes atteint |
La quantité de données incorrectes, causée par des problèmes tels que des incompatibilités de type de données ou un contenu trop volumineux, dépasse le seuil configuré, ce qui entraîne l'échec de la tâche et empêche l'écriture de certaines données. |
Identifiez la cause des données incorrectes et résolvez le problème. Vous pouvez également déterminer si les données incorrectes peuvent être tolérées et ignorées. Remarque
Si votre tâche ne peut pas tolérer les données incorrectes, modifiez le seuil de données incorrectes dans . Pour plus d'informations sur la configuration du seuil de données incorrectes, consultez configuration sans code via l'interface utilisateur. Pour plus d'informations sur ce qui constitue des données incorrectes, consultez Data Integration. |
|
|
Interrogation des données trop précoce |
Les données sont interrogées avant la fin de la tâche de synchronisation. Pour certaines sources de données, telles que Hive et MaxCompute (configurable), les données peuvent être partiellement ou totalement indisponibles jusqu'à la fin de la tâche. |
Vérifiez toujours les données dans la table cible après avoir confirmé que l'instance de la tâche de synchronisation s'est exécutée avec succès. |
|
|
Dépendance de nœud manquante |
Si aucune dépendance explicite de graphe acyclique dirigé (DAG) n'est configurée entre une tâche d'analyse en aval et une tâche de synchronisation en amont, la tâche en aval peut démarrer prématurément et lire des données incomplètes. |
Dans DataStudio, configurez une dépendance explicite parent-enfant entre les tâches en amont et en aval. Évitez d'utiliser des dépendances faibles, telles que |
|
|
Plusieurs tâches de synchronisation écrivent simultanément dans la même table ou partition, provoquant des interférences. |
Exécution concurrente non sécurisée des tâches de synchronisation.
|
|
|
|
Tâche non configurée pour une exécution idempotente |
La tâche n'est pas idempotente, ce qui signifie que plusieurs exécutions produisent des résultats différents. La réexécution de la tâche peut entraîner l'insertion de données en double ou l'écrasement incorrect des données. |
1. Dans la mesure du possible, concevez la tâche pour qu'elle soit idempotente. Par exemple, utilisez le mode |
|
|
Expression de partition incorrecte |
Dans MaxCompute, la plupart des tables de données sont partitionnées et les valeurs de partition sont souvent des paramètres de planification DataWorks comme $bizdate. Les erreurs courantes incluent :
|
Vérifiez les expressions de variables dans la tâche de synchronisation des données. Assurez-vous que la configuration du paramètre de planification est correcte et que les paramètres d'exécution dans l'instance de tâche sont évalués aux valeurs attendues. |
|
|
Incompatibilité de type de données ou de fuseau horaire |
Des types de données ou des paramètres de fuseau horaire incohérents entre la source et la destination peuvent entraîner la troncature des données, une conversion incorrecte ou des écarts lors des comparaisons. |
|
|
|
Données de destination modifiées par d'autres processus |
Si d'autres applications modifient simultanément la source de données de destination, son contenu peut devenir incohérent avec les données source. |
Assurez-vous qu'aucun autre processus n'écrit dans la table de destination pendant la fenêtre de synchronisation. Si les écritures simultanées sont un comportement attendu, vous devez accepter les écarts de données résultants. |
|
Annexe : Modes d'écriture pour les bases de données relationnelles
|
Type de protocole |
Mode d'écriture |
Comportement en cas de conflit |
Comportement sans conflit |
Quand l'utiliser |
|
Protocole général/MySQL |
|
L'insertion échoue et génère des données incorrectes. |
Insère de nouvelles données. |
Ajouter des données pour une synchronisation complète ou incrémentielle sans écraser ni modifier les enregistrements existants. |
|
|
Remplace l'ancienne ligne en la supprimant d'abord, puis en insérant la nouvelle ligne. |
Insère de nouvelles données. |
Écraser complètement les anciens enregistrements avec les dernières données. |
|
|
|
Met à jour l'ancienne ligne en mettant à jour uniquement les champs spécifiés avec les nouvelles données. |
Insère de nouvelles données. |
Mettre à jour des champs spécifiques dans un enregistrement tout en conservant les autres, tels qu'un horodatage de création. |
|
|
|
Ignore la nouvelle ligne sans l'écrire ni générer d'erreur. |
Insère de nouvelles données. |
Insérer uniquement les données qui n'existent pas déjà et ne prendre aucune mesure sur les enregistrements existants. |
|
|
PostgreSQL |
|
Ignore la nouvelle ligne sans l'écrire ni générer d'erreur. |
Insère de nouvelles données. |
Insérer uniquement les données qui n'existent pas déjà et ne prendre aucune mesure sur les enregistrements existants. |
|
|
Met à jour l'ancienne ligne en mettant à jour les champs spécifiés dans la ligne en conflit avec les nouvelles données. |
Insère de nouvelles données. |
Mettre à jour des champs spécifiques dans un enregistrement tout en conservant les autres, tels qu'un horodatage de création. |
|
|
|
Rejette les lignes en conflit. Utilise le protocole haute performance |
Insère en masse de nouvelles données. |
Ajouter efficacement de grands lots de données tout en permettant d'ignorer les enregistrements en double. |
|
|
|
Met à jour les lignes en conflit. Utilise le protocole |
Insère en masse de nouvelles données. |
Synchroniser efficacement de grands lots de données en écrasant les anciens enregistrements avec les dernières données. |
|
|
- |
|
Non pris en charge. |
||
Dépannage de la cohérence des données côté reader
Le reader plugin de Data Integration se connecte au magasin de données source, extrait les données et les transmet au writer plugin. Chaque type de source de données source dispose d'un reader plugin correspondant. Le plugin utilise JDBC ou le SDK de la source de données pour extraire les données selon le mode d'extraction configuré, qui peut inclure des filtres, des tables, des partitions et des colonnes.
Les résultats de lecture réels dépendent du mécanisme de synchronisation des données, des modifications apportées aux données source et de la configuration de la tâche.
Si vous rencontrez des problèmes de qualité des données, tels que des écarts dans le nombre d'enregistrements ou le contenu des données, après l'achèvement d'une tâche de synchronisation, examinez les problèmes courants suivants côté reader.
|
Cause |
Description |
Solution |
|
Modifications simultanées des données source |
|
Acceptez ce comportement comme un résultat attendu d'une synchronisation de données à haut débit. La réexécution de la tâche peut donner des résultats différents en raison des modifications en temps réel des données source. |
|
Conditions de filtrage incorrectes |
|
Vérifiez les expressions de variables de planification dans la tâche de synchronisation des données. Assurez-vous que la configuration du paramètre de planification est correcte et que les valeurs des paramètres sont remplacées comme prévu au moment de l'exécution. |
|
Données incorrectes côté reader |
Un échec d'analyse se produit lors de la lecture des données source. Cela est rare dans les bases de données structurées, mais peut se produire avec des sources de données semi-structurées, telles que des fichiers CSV ou JSON dans OSS. Des erreurs de format peuvent entraîner l'ignorance de certains enregistrements. |
|
Dépannage des problèmes environnementaux
|
Cause |
Solution |
|
Interrogation de la mauvaise source de données, table ou partition |
|
|
Dépendances en amont non satisfaites |
Si les données sont générées périodiquement, par exemple par une tâche de synchronisation de données récurrente ou une tâche de fusion, assurez-vous que les tâches en amont qui génèrent ces données ont été exécutées et terminées avec succès. |
En tant qu'étape générale de dépannage, exécutez la tâche plusieurs fois pour observer et comparer les résultats de synchronisation. Vous pouvez également essayer de changer la source ou la destination des données pour des tests comparatifs. Ces tests peuvent vous aider à circonscrire le problème.