5 Replies Latest reply: Jun 17, 2014 5:00 AM by Philippe Vivier RSS

    Découpage d'un XML très volumineux en n QVD de m lignes

    julien gadrat

      bonjour, je cherche à transformer un XML très volumineux (plus de 15 Go, plusieurs millions de lignes) en QVD mais Qlik sur mon PC n'arrive pas aller au bout du fichier (insuffisance de mémoire).

      Mon script est un simple import du XML à 13 champs dans une table appelée [REV]:

       

      [REV]:

      LOAD

          VersionName,

          PeriodName,

          RespCenterName,

          RevenueTypeName,

          CostObject1Name,

          CostObject2Name,

          CostObject3Name,

          CostObject4Name,

          CostObject5Name,

          CurrencyName,

          UnitPrice,

          UnitsSold,

          Revenue

      FROM [..\Data XML\REV.XML] (XmlSimple, Table is [PPAData/Action/RevenueRecord]);

      STORE [REV] INTO [..\Data QVD\REV.qvd] (qvd);

      Drop table [REV];

       

      Voyant que cela ne passe pas, j'ai limité à 100 000 1ères lignes avec :

      LET vFirst = 100000;


      FIRST $(vFirst) LOAD ...

       

      Ca passe pour des paquets de 100 000 lignes

      J'aimerai donc faire des QVD représentant par exemples des paquets de 100 000 lignes pour hacher mon XML en x QVD.

      Avez-vous une idée sur la manière de faire?

       

      Merci d'avance pour vos suggestions,

       

      Julien

        • Re: Découpage d'un XML très volumineux en n QVD de m lignes
          Philippe Vivier

          tu peux eventuellement charger tout ca dans une table temporaire

          T1:

          load ... from ...

           

          puis boucler pour stocker par période

          select Periode as Boucle resident T1;

           

          let vNoPer=fieldvaluecount(Periode);

           

          for i=1 to vNoPer

               let vPer = fieldvalue('Boucle',i)

           

               t2 :

               load ... resident T1;

               Store T2 into ...

          next;

           

          en esperant que ca puisse t'aider

          • Re: Découpage d'un XML très volumineux en n QVD de m lignes
            Antoine Frangieh

            Salut Julien,

             

            Existe-t-il un champ qui puisse servir d'incrément?

            La commande FIRST ne saurait pas être utile dans une itération, puisqu'elle ne prend que les premiers records.

             

            Une piste:

            1 - Evalue les combinaisons VersionName, PeriodName

            LOAD

                VersionName, PeriodName

            FROM tasource;

             

            Si les lignes sont bien distribuées, alors passe à l'étape suivante

             

            2- Effectue un load distinct des valeurs

            Map_Temp:

            LOAD DISTINCT

                 VersionName, PeriodName

            FROM tasource;

             

            3-Itère sur ces valeurs

               

            EDIT: Betise, j'ai oublié le where clause

             

            FOR Each vVersion in FieldValueList ('VersionName')

                 FOR Each vPeriod in FieldValueList ('PeriodName')

                 'T_$(vVersion)_$(vPeriod)':

                 LOAD *

                 FROM tasource

                 WHERE VersionName = $(vVersion) and PeriodName = $(vPeriod);

             

             

                 STORE 'T_$(vVersion)_$(vPeriod)' into [l'endroitdetonchoix\T_$(vVersion)_$(vPeriod).qvd];

                 DROP TABLE 'T_$(vVersion)_$(vPeriod)';

               

                 NEXT vPeriod

            NEXT vVersion

             

             

             

            Si les lignes ne sont pas bien distribuées, alors il faudrait créer en amont un index de cononne qui puisse te permettre l'itération.

             

            Bonne chance,

            Antoine