IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SSIS Discussion :

[SSIS] [2K5] Import de fichier XML


Sujet :

SSIS

  1. #1
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 71
    Points : 62
    Points
    62
    Par défaut [SSIS] [2K5] Import de fichier XML
    Bonjour,

    j'essaie d'intégrer un fichier XML au sein d'une table via SSIS.
    Le fichier a une structure macroscopique similaire à cette ci :

    [CODE]
    <TransmissionRetour>
    - <InfoTransmission>
    <Objet>Retour d'informations</Objet>
    <Resume>Décisions de contrats</Resume>
    +<Expediteur>
    +<Destinataire>
    </InfoTransmission>
    <Contenus>
    <statut></statut>
    <convention></convention>
    <identifiant></identifiant>
    <Contenu>
    <....></....>
    <....></....>
    <....></....>
    <....></....>
    <....></....>
    <....></....>
    <....></....>
    <....></....>
    </Contenu>
    <Contenu>
    <...></...>
    ....
    </Contenu>
    </Contenu>
    <InfoTransmission>
    <TransmissionRetour>
    /CODE]

    Via SSIS j'utilise le composant source XML que je connecte directement à un autre objet OLE DB similairement au tuto de Fleur Anne Blain.

    La structure du fichier est reconnue par SSIS sous forme d'un ensemble de flux entrant et non un seul et unique fichier.

    Avez-vous une idée sur le sujet ou avez-vous rencontrez une problématique similaire?

    Merci de votre aide.

    Jeud

  2. #2
    Membre chevronné Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut
    Citation Envoyé par jeud84 Voir le message
    Bonjour,

    j'essaie d'intégrer un fichier XML au sein d'une table via SSIS.

    Le fichier a une structure macroscopique similaire à cette ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <TransmissionRetour>
    - <InfoTransmission>
      <Objet>Retour d'informations</Objet> 
      <Resume>Décisions de contrats</Resume> 
     +<Expediteur>
     +<Destinataire>
    </InfoTransmission>
      <Contenus>
    Et... ?
    Erreur, problème ?
    Alexandre Chemla - Consultant MS BI chez Masao

  3. #3
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 71
    Points : 62
    Points
    62
    Par défaut
    Re,

    aucune erreur visible via l'éditeur.

    Le problème est que je ne peux accéder aux données qui m'intéressent suite au découpage effectué par SSIS.

    J'ai la possibilité d'intégrer une multitude de flux contenant chacun un nombre limité de champs (relatif au à la structure parent/enfant).

    SSIS me propose une bonne quinzaine de sortie pour ce fichier contenant chacune 3 à 4 champs.

    Y'a-t-il un moyen d'éviter cette découpe et d'accéder à la totalité des champs?



    Peut-être est-ce le XSD généré par SSIS qui implique cela?

  4. #4
    Membre chevronné Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut
    Exactement, la structure de sortie va dépendre uniquement du xsd qui est généré.
    Si ce que SSIS prévoit ne vous convient pas, il est possible (et généralement conseillé) de faire soi-même le xsd.
    Etant vraiment limité dans le domaine, je ne pourrais vous aider mais il doit bien il y avoir quelques personnes par ici capable de vous faire un xsd qui conviendrait au mieux à votre besoin.
    Alexandre Chemla - Consultant MS BI chez Masao

  5. #5
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 71
    Points : 62
    Points
    62
    Par défaut
    Merci,

    il me semblait bien que la piste était sur le XSD.
    SSIS en le générant automatiquement doit certainement traité le fichier comme un ensemble de fichier et non un fichier unique conséquent.

    Une solution alternative serait peut être de multiplier le nombre de work flow et donc d'atteindre les champs ciblés.

    Je cherche du coté du XSD.

    Jeud

  6. #6
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 71
    Points : 62
    Points
    62
    Par défaut
    Suite de l'épisode,

    la solution alternative est efficace pour ce qui est d'intégrer les données.

    Je ré-explique :
    - j'utilise un fichier source XML complexe (cf.message precédent de post)
    - SSIS génére le fichier XSD et je le laisse faire comme un grand (ici je pense que son xsd n'est pas celui qui me convient, je devrais donc voir pour l'écrire moi même)
    - j'ajoute un composant de conversion de données (unicode/non unicode)
    - je relie le tout vers un OLD BD destination
    A partir de là mon fichier XML n'est pas vu en tant qu'un seul et unique fichier mais un ensemble de fichier source.

    La solution alternative était donc de multiplier le nombre de destination des données vers un OLE DB destination.
    Cependant, chaque intégration est relative à elle-même ajoute donc le nombre de lignes correspondantes à son intégration.

    Résultat, je récupére l'ensemble des données ciblées mais de façon désarticulé.

    Si quelqu'un a une idée pour résoudre cette problèmatique ou même pour m'indiquer comment créer fichier XSD qui me va bien, je suis à l'écoute

    De mon coté je continue les recherches.

    Merci pour votre aide,

    Jeud

  7. #7
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 71
    Points : 62
    Points
    62
    Par défaut
    Re,

    toujours sur ce sujet

    Une autre solution est d'intégrer le fichier XML tel qu'un fichier text.
    Une fois ce fichier intégré on peut utiliser une procédure sql qui va naviguer dans une variable ou dans le champs qui stocke l'XML.

    La commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     EXEC sp_xml_removedocument @hDoc
    Le problème dans cette méthode est que la variable de stockage de fichier est limité a 8000 caractères.


    Je n'arrive pour le moment pas à écrire dans la même type en Text car SSIS la force en ReadOnly

    Si quelqu'un a une solution pour la passer en écriture


    Pour la doc : http://msdn.microsoft.com/en-us/library/ms978468.aspx

    exemple de la doc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Create  Procedure InsertOrderXML 
    @SOAPENV   NVARCHAR(4000) = NULL
    AS
       SET NOCOUNT ON
       DECLARE @hDoc INT
       DECLARE @PKId  INT
       SET XACT_ABORT ON
       BEGIN TRANSACTION
       EXEC sp_xml_preparedocument @hDoc OUTPUT, @SOAPENV
       INSERT Orders(CustomerId,
             OrderDate,
             ShipToName,
             ShipToAddressId,
             OrderStatus)
       SELECT * 
       FROM OPENXML(@hDoc, '//Order') 
       WITH ( CustomerId int 'CustomerId',
              OrderDate Datetime 'OrderDate',
              ShipToName nvarchar(40) 'ShipToName',
              ShipToAddressId int 'ShipToAddressId',
              OrderStatus  int 'OrderStatus')
       SELECT @PKId = @@IDENTITY
       INSERT OrderDetails (OrderId,
                           ItemId,
                           UnitPrice,
                           Quantity) 
       SELECT @PKId as OrderId, ItemId, UnitPrice, Quantity
       FROM OPENXML(@hDoc, '//OrderDetail') 
       WITH ( ItemId int 'ItemId',
              UnitPrice money 'UnitPrice',
              Quantity int 'Quantity')
       COMMIT TRANSACTION
       EXEC sp_xml_removedocument @hDoc

  8. #8
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 71
    Points : 62
    Points
    62
    Par défaut
    Contournement du stockage et transfert de la variable contenant les données du fichier XML.

    La méthode que j'ai utilisé est simple, je lis le fichier via un composant script au sein de l'onglet "flux de control" et non plus via un composant de taches de flux de données.

    A partir de ce même composant script, j'insère directement le contrenu de ma variable en base au sein d'un champ varchar(max) base sql server.

    Ensuite il ne reste plus qu'a executer la procédure stoquée qui va découper le contenu XML suivant les besoins. Cf. méthode dans le post précédent.

    Cdt, Jeud

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SSIS] [2K5] Importer fichier XML
    Par Sniper37 dans le forum SSIS
    Réponses: 1
    Dernier message: 07/10/2009, 08h47
  2. Réponses: 4
    Dernier message: 12/05/2009, 12h21
  3. Réponses: 7
    Dernier message: 14/08/2008, 13h05
  4. Réponses: 5
    Dernier message: 13/08/2008, 07h19
  5. [SSIS][2k5] Import depuis XML vers Base de donnée
    Par Sinclair dans le forum SSIS
    Réponses: 4
    Dernier message: 24/01/2008, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo