2017-02-10 4 views
-1

J'ai une table avec plus de 30 millions de lignes et cela prend trop de temps pour faire une troncature et recharger. Je peux faire la charge incrémentale en utilisant la sortie SSIS non adaptée, mais j'ai du mal à obtenir les charges de Delta où les enregistrements ont été mis à jour. La table n'a pas de champs Date donc aucun moyen de vérifier quand les données ont été modifiées pour la dernière fois.Delta Load - processus ETL pour identifier les mises à jour

Je me demandais simplement si quelqu'un avait rencontré une situation similaire et comment l'avez-vous résolu? Je ne veux pas charger la table complète car cela peut prendre 3 heures sur cette seule table!

+0

Juste pour ajouter, la société ne permettra pas CDC, déclenche sur la table etc :( – abs786123

Répondre

0

Sur la sortie correspondante, effectuez une autre recherche pour vérifier si la ligne entrante est différente de la ligne avec la clé primaire correspondante. Si c'est différent, faites une mise à jour, si c'est la même, ne faites rien.

Je connais deux façons de vérifier si les lignes sont identiques.

1) Ajouter une colonne dérivée à la nouvelle ligne entrante qui crée une valeur de hachage de chaque colonne. Ensuite, créez la même colonne de hachage dans votre table locale.Comparez les hachés dans la recherche.

2) Dans la recherche, joignez tous les champs ... c.-à-d. A -> A, B -> B, C -> C, etc. Puis redirige les non-correspondances pour faire une mise à jour. Cela peut ne pas être possible si vous avez des colonnes blob.

Le numéro 1 est probablement plus efficace mais plus difficile à configurer.

+0

Salut Merci Hank, ce processus peut prendre un certain temps car il sera de comparer toutes les lignes dans la source à destination ne sera pas cela ne prendra pas longtemps et comme il passera à travers toutes les lignes qui existent donc 30 millions de lignes qui à son tour prendra le même laps de temps qu'une troncature et de charge? Wont-il? Ou ai-je tort? il n'y a pas moyen de réduire la fenêtre à regarder, disons hier ou avant comme aucune date un cadeau – abs786123

+0

Ouais, vous avez raison ... tronquer et recharger serait beaucoup plus rapide ... mais si vos données source, par exemple, ne conserve que 30 jours de données, vous devrez alors utiliser une méthodologie incrémentielle/upsert afin de conserver les données historiques dans votre table au cours des 30 derniers jours: – Hank

+0

Ok, soyons créatifs ... avez-vous des champs dans votre tableau qui sont créés dans l'ordre numérique ou alphabétique? comme peut-être la clé primaire? Ou peut-être même une clé de répartition non unique, une clé de lot, une clé de partition? – Hank