web-dev-qa-db-fra.com

Comment importer un fichier plat de largeur fixe dans la base de données en utilisant SSIS?

Quelqu'un a-t-il un tutoriel sur la façon d'importer un fichier plat à largeur fixe dans une base de données à l'aide d'un package SSIS?

J'ai un fichier plat contenant des colonnes de longueurs variables.

Column name    Width
-----------    -----
First name        25
Last name         25
Id                 9
Date               8

Comment convertir un fichier plat en colonnes?

16
OBL

Voici un exemple de package créé à l'aide de SSIS 2008 R2 qui explique comment importer un fichier plat dans une table de base de données.

  • Créez un fichier plat à largeur fixe nommé Fixed_Width_File.txt avec les données comme indiqué dans la capture d'écran. La capture d'écran utilise Notepad ++ pour afficher le contenu du fichier. Il a la capacité d'afficher les caractères spéciaux comme le retour chariot et le saut de ligne. CR LF désigne les délimiteurs de ligne Retour chariot et Saut de ligne.

Flat file data

  • Dans la base de données SQL Server, créez une table nommée dbo.FlatFile en utilisant le script de création fourni dans la section Scripts SQL.

  • Créez un nouveau package SSIS et ajoutez un nouveau OLE gestionnaire de connexion DB qui se connecterait à la base de données SQL Server. Supposons que le gestionnaire de connexion OLE DB Connection soit nommé comme SQLServer.

Connection manager

  • Sur l'onglet de flux de contrôle du package, placez un Tâche de flux de données.

Data flow task

  • Double-cliquez sur la tâche de flux de données et vous serez redirigé vers l'onglet de flux de données. Sur l'onglet de flux de données, placez un Source de fichier plat. Double-cliquez sur la source du fichier plat et le Editeur de source du fichier plat apparaîtra. Cliquez sur le bouton Nouveau pour ouvrir l'éditeur Éditeur du Gestionnaire de connexion de fichiers plats.

  • Dans la section Général de Éditeur de source de fichier plat, entrez une valeur dans Nom du gestionnaire de connexions (dites Source) et accédez à l'emplacement du fichier plat et sélectionnez le fichier. Cet exemple utilise l'exemple de fichier dans le chemin C:\temp\Fixed_Width_File.txt Si vous avez des lignes d'en-tête dans votre fichier, vous pouvez entrer une valeur 1 dans les lignes d'en-tête pour ignorer la zone de texte pour ignorer la ligne d'en-tête.

Flat file connection manager editor General

  • Cliquez sur la section Colonnes. Changez la police selon votre choix J'ai choisi Courier New pour voir plus de données avec moins de défilement. Entrez la valeur 69 dans la zone de texte Largeur de ligne. Cette valeur est la somme de la largeur de toutes vos colonnes + 2 pour le délimiteur de ligne. Une fois que vous avez défini la largeur de ligne correcte, vous devriez voir les données du fichier à largeur fixe correctement dans la section Colonnes de données source. Maintenant, vous devez cliquer aux emplacements appropriés pour déterminer les limites des colonnes. Notez les sections 4, 5, 6 et dans la capture d'écran ci-dessous.

Flat file connection manager editor Columns

  • Cliquez sur la section Avancé. Vous remarquerez que 5 colonnes ont été créées automatiquement pour vous en fonction des limites de colonne que nous avons définies dans la section Colonnes à l'étape précédente. La cinquième colonne est pour le délimiteur de ligne.

Flat file connection manager editor Advanced

  • Renommez les noms des colonnes en FirstName, LastName, Id, Date et RowDelimiter

Flat file connection manager editor Advanced Renamed

  • Par défaut, les colonnes seront définies avec la chaîne DataType [DT_STR]. Si nous sommes assez certains qu'une certaine colonne sera de type de données différent, nous pouvons la configurer dans la section Avancé. Nous allons modifier la colonne Id pour qu'elle soit du type de données four-byte signed integer [DT_I4] et la colonne Date doivent être de type de données date [DT_DATE]

Flat file connection manager editor Advanced Id column

Flat file connection manager editor Advanced Date column

  • Cliquez sur la section Aperçu. Les données seront affichées selon la configuration de la colonne.

Flat file connection manager editor Preview

  • Cliquez sur [~ # ~] ok [~ # ~] sur l'éditeur du gestionnaire de connexions de fichiers plats et la connexion de fichiers plats sera affectée à la source de fichiers plats dans la tâche de flux de données.

Flat file editor connection

  • Dans l'éditeur de source de fichier plat, cliquez sur la section Colonnes. Vous remarquerez les colonnes qui ont été configurées dans le gestionnaire de connexions de fichiers plats. Décochez la case RowDelimiter car nous n'en aurons pas besoin.

Flat file editor columns

  • Dans la tâche de flux de données, placez un OLE DB Destination. Connectez la sortie de la source du fichier plat à la destination OLE DB.

Data flow task

  • Dans l'éditeur de destination OLE DB Destination, sélectionnez le Gestionnaire de connexions OLE DB nommé SQLServer et définissez le Nom de la table ou la vue déroulant à [dbo].[FlatFile]

OLE DB Destination connection

  • Dans l'éditeur de destination DB OLE DB, cliquez sur la section Mappages. Comme les noms de colonnes dans le gestionnaire de connexions de fichiers plats sont les mêmes que les colonnes de la base de données, le mappage se fera automatiquement. Si le les noms sont différents, vous devez mapper manuellement les colonnes. Cliquez sur OK.

OLE DB Destination columns

  • Maintenant, le paquet est prêt. Exécutez le package pour charger les données du fichier plat à largeur fixe dans la base de données.

Package execution

  • Si vous interrogez la table dbo.FlatFile dans la base de données, vous remarquerez les données de fichier plat importées dans la base de données.

Data imported into table

Cet exemple devrait vous donner une idée de la façon d'importer un fichier plat à largeur fixe dans la base de données. Il n'explique pas comment gérer la journalisation des erreurs, mais cela devrait vous aider à démarrer et vous aider à découvrir d'autres fonctionnalités liées à SSIS lorsque vous jouez avec des packages.

J'espère que cela pourra aider.

SQL Scripts:

CREATE TABLE [dbo].[FlatFile](
    [Id] [int] NOT NULL,
    [FirstName] [varchar](25) NOT NULL,
    [LastName] [varchar](25) NOT NULL,
    [Date] [datetime] NOT NULL
)
54
user756519

Très bien expliqué, Siva! Votre didacticiel et vos excellentes illustrations soulignent ce que Microsoft aurait dû clarifier

  1. que la largeur d'une ligne de longueur fixe doit inclure les caractères de retour chariot et de saut de ligne (CR & LF) (ce que j'ai compris parce que l'aperçu a montré que les lignes n'étaient pas alignées correctement)
  2. l'étape la plus importante de la définition d'une colonne supplémentaire pour contenir ces caractères CR & LF, même s'ils ne seront pas importés. J'ai également compris cela. J'aurais pu trouver votre réponse avant de commencer.

Sans ces deux choses, une tentative d'exécution de l'importation donnera ce message d'erreur: La conversion de données pour la colonne "Colonne x" a renvoyé la valeur d'état 4 et le texte d'état "Le texte a été tronqué ou un ou plusieurs caractères n'avaient aucune correspondance dans la page de codes cible. ".

J'ai ajouté ce texte d'erreur dans l'espoir que quelqu'un trouvera cette page en recherchant la cause de son erreur. Votre turorial vaut la peine d'être trouvé, même si après coup!

1
Paul M Simpson

Dans la transformation de colonne dérivée, vous pouvez utiliser la fonction SUBSTRING () pour chacune des colonnes. Exemple:

Colonnes dérivéesColonne

FirstName SUBSTRING (Data, startFrom, Length);

Ici, le prénom a une largeur de 25, donc si nous considérons qu'à partir de la position 0, dans la colonne dérivée, vous devez le spécifier en donnant SUBSTRING (Data, 0, 25);

De même pour les autres colonnes.

1
Amarnath