Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour,
Je travaille actuellement sur un projet de traitement de données avec une architecture en médaillon (Bronze → Silver → Gold).
Dans la couche Bronze, nous recevons plusieurs fichiers CSV provenant de différentes sources (fichiers journaliers avec des schémas qui peuvent évoluer).
Nous utilisons tFileList pour parcourir tous les fichiers de la couche Bronze.
Chaque fichier est lu en schéma dynamique, nous stockons les données de chaque fichier sur un champ de type dynamique .
Nous ajoutons des colonnes techniques (dedupKey, fileDate, srcFile) pour la gestion de l’historique et la déduplication.
Ensuite, via tSortRow + tUniqueRow, nous gardons uniquement la version la plus récente par dedupKey.
Enfin, nous écrivons un seul fichier CSV en Silver, qui doit contenir l’union de toutes les colonnes rencontrées dans les fichiers sources.
Lorsque certains fichiers de Bronze contiennent de nouvelles colonnes (par exemple classification dans un fichier du 02/01/2025), le job ne les gère pas correctement :
Soit la colonne n’apparaît pas dans le fichier final,
Soit les données sont mal alignées (décalage des colonnes),
Soit seul le dernier fichier traité est écrit dans Silver (selon la configuration de tHashInput et tFileOutputDelimited).
J’ai testé plusieurs combinaisons :
Avec et sans l’option "vider le cache après lecture" dans tHashInput.
Avec et sans l’option "écrire à la suite" dans tFileOutputDelimited.
Avec des tLogRow intermédiaires pour tracer les résultats.
Résultats :
Selon les options, j’obtiens soit des fichiers tronqués, soit des doublons, soit une perte des colonnes nouvelles.
En résumé, l’approche actuelle ne permet pas d’avoir un fichier Silver complet et aligné dès qu’un schéma évolue.
Nous avons envisagé d’écrire une routine personnalisée pour scanner automatiquement les en-têtes des CSV de Bronze et construire dynamiquement l’union des colonnes, afin d’imposer un schéma unique dans Silver.
L’idée :
Détecter les colonnes de chaque fichier,
Construire l’union de toutes les colonnes,
Réécrire toutes les lignes alignées sur ce schéma global.
Existe-t-il une méthode recommandée / best practice officielle Talend pour gérer ce cas de figure (schémas CSV hétérogènes et évolutifs) ?
Peut-on s’appuyer sur des composants standards (tSchemaComplianceCheck, tFileOutputDelimited en dynamique, etc.) plutôt que de développer une routine maison ?
Comment garantir que toutes les colonnes sont bien présentes et alignées dans le fichier final Silver, sans perdre de données ni dupliquer inutilement ?
Merci d’avance pour votre aide.
Hello @DEV-Talend1
Ce lien devrait vous aider grandement ou vous donnera des pistes sur comment gérés les CSV avec schéma dynamique.
Bonne journée