Comment puis-je partager des données de fichier plat et charger parent-enfant des tables dans la base de données?
J'ai dénormalisée données (provenant d'un fichier) qui doit être importé dans parent-enfant tables. La source des données est quelque chose comme ceci:
Account# Name Membership Email
101 J Burns Gold alpha@foo.com
101 J Burns Gold bravo@foo.com
101 J Burns Gold charlie@yay.com
227 H Gordon Silver red@color.com
350 B Clyde Silver italian@food.com
350 B Clyde Silver mexican@food.com
Quelles sont les pièces, les pièces, ou les tactiques de SSIS je devrais utiliser pour lire les trois premières colonnes dans une table de parent, et la 4ème colonne (e-Mail) dans une table enfant? J'ai plusieurs options pour la clé parent qui je suis autorisé à prendre:
- Utiliser directement le numéro de Compte en tant que clé primaire
- Utiliser une clé de substitution généré par SSIS pendant le processus d'importation
- Configurer une identité de clé primaire
Je suis sûr que j'ai listé mes clé primaire options par ordre de difficulté croissante. Je serais intéressé de savoir comment faire la première et la dernière option, je vais en déduire la façon d'atteindre le milieu de l'option. Pour souligner encore une fois, je suis intéressé par un décidément solution SSIS; je suis à la recherche d'une réponse qui utilise le langage de la SSIS, plutôt que de la procédure, de la technologie de réponse neutre.
Ma question est un peu similaire à DONC, la question d'une autre, avoir une réponse de la vague de la viabilité. J'espère que des directives plus détaillées pourraient être donnés. Je sais déjà comment résoudre ce problème par la création d'une "mise en scène" du milieu de l'étape, où la relation parent-enfant, la séparation est en fait manipulé avec droit de SQL. Cependant, je suis curieux de savoir comment cela peut être fait sans ce genre de moyen-étape.
Il me semble que ce genre d'importation serait si commune, qu'il y aurait un bien-publié façon stéréotypée à manipuler - une technique qui SSIS excelle. Pas encore, je n'ai pas assez vu tout droit jusqu'à la réponse à cette question.
Update #1
: Basé sur les commentaires, j'ai ajusté les données de l'échantillon à être de plus en plus évidents dénormalisée. J'ai également supprimé "à plat" à partir de "fichier plat", de sorte que la sémantique n'interfèrent pas avec la question.
Update #2
: J'ai amplifié mon intérêt dans une solution parlé dans la langue de SSIS.
+1 @Steve - ce n'est pas anormale OU d'un appartement.
J'ai réglé la question par vos commentaires. Avoir une réponse?
OriginalL'auteur Brent Arias | 2011-07-12
Vous devez vous connecter pour publier un commentaire.
Ici est une option que vous pouvez envisager de chargement de données parent-enfant. Cette option se compose de deux étapes. Dans le première étape, lire le fichier source et écrire des données dans la table parent. Dans le deuxième étape, lire le fichier source à nouveau et l'utilisation de la transformation de recherche pour chercher le parent info pour écrire des données dans la table enfant. L'exemple suivant utilise les données fournies dans la question. Cet exemple a été créé à l'aide de SSIS 2008 R2 et SQL Server 2008 de la base de données.
Étape-par-Étape du processus:
Créer un exemple de fichier plat nommé
Source.txt
comme indiqué dans la capture d'écran #1.Dans la base de données SQL, créer deux tables nommé
dbo.Parent
etdbo.Child
en utilisant des scripts donné en vertu de l' Scripts SQL section. Les deux tables ont une génération automatique de la colonne d'identité.Sur le paquet, placez un
OLE DB connection
pour se connecter à SQL Server etFlat File connection
de lire le fichier comme indiqué dans la capture d'écran #2. Configurer les connexions de fichiers plats, comme indiqué dans les captures d'écran #3 - #9.Sur l'onglet Flux de Contrôle, placez deux
Data Flow Tasks
comme indiqué dans la capture d'écran #10.À l'intérieur de la tâche de flux de données nommée Parent, placez une source de Fichier Plat, transformation de Tri et une destination OLE DB, comme indiqué dans la capture d'écran #11.
Configurer la source de fichier plat comme indiqué dans les captures d'écran #12 et #13. Nous avons besoin de lire la source de fichier plat.
Configurer la transformation de tri, comme indiqué dans la capture d'écran #14. Nous avons besoin d'éliminer les doublons, de sorte que seul l'unique enregistrements sont insérés dans la table parent
dbo.Parent
.Configurer la destination ole db, comme indiqué dans les captures d'écran #15 et #16. Nous avons besoin d'insérer les données dans la table parent
dbo.Parent
.À l'intérieur de la tâche de flux de données nommée Enfant, placez une source de Fichier Plat, de la transformation de Recherche et une destination OLE DB, comme indiqué dans la capture d'écran #17.
Configurer la source de fichier plat comme indiqué dans les captures d'écran #12 et #13. Cette configuration est la même que la source de fichier plat dans la précédente tâche de flux de données.
Configurer la transformation de recherche, comme indiqué dans les captures d'écran #18 et #20. Nous avons besoin de trouver le parent de l'id de la table
dbo.Parent
à l'aide de la clé d'autres colonnes présentes dans le fichier. Les colonnes de clé voici le Compte, Nom et adresse Email. Si le fichier est arrivé d'avoir une colonne unique, vous pouvez simplement utiliser cette colonne seule pour récupérer l'id parent.Configurer la destination ole db, comme indiqué dans les captures d'écran #21 et #22. Nous avons besoin d'insérer la colonne Email avec le Parent de l'id dans la table
dbo.Child
.Capture d'écran #23 montre les données dans les tableaux avant l'exécution du package.
Captures d'écran #24 et #25 montrent des exemples de l'exécution du package.
Capture d'écran #26 montre les données dans les tableaux après l'exécution du package.
Espère que ça aide.
Scripts SQL:
Capture d'écran #1:
Capture d'écran #2:
Capture d'écran #3:
Capture d'écran #4:
Capture d'écran #5:
Capture d'écran #6:
Capture d'écran #7:
Capture d'écran n ° 8:
Capture d'écran n ° 9:
Capture d'écran n ° 10:
Capture d'écran #11:
Capture d'écran n ° 12:
Capture d'écran n ° 13:
Capture d'écran #14:
Capture d'écran n ° 15:
Capture d'écran #16:
Capture d'écran #17:
Capture d'écran #18:
Capture d'écran #19:
Capture d'écran #20:
Capture d'écran #21:
Capture d'écran n ° 22:
Capture d'écran #23:
Capture d'écran #24:
Capture d'écran #25:
Capture d'écran #26:
Peut-être que vous vous devez marquer son poste en tant que la réponse à votre question.
OriginalL'auteur
Si les données sont triées et le numéro de Compte est un entier I:
Insérer les e-mails dans un tableau (ajouter un incrément automatique de la colonne, c'est une meilleure pratique).
Puis-je insérer les autres enregistrements à une table parent.
est triée).
Si vous avez une relation de clé étrangère de l'installation, vous aurez besoin de faire la deuxième étape de la première (pour éviter d'avoir tous les enregistrements orphelins).
Mes deux cents: je ne sais pas ce que vos besoins, mais il semble un peu plus normalisée. Si il y a une petite limite sur le nombre d'adresses e-mail, je voudrais envisager d'ajouter e-mail à plusieurs colonnes de la table principale...pour la vitesse et la simplicité.
OriginalL'auteur Steve Wellens