Qlik Community

Groupe des Utilisateurs Francophones

Vous êtes francophone? Ce groupe est pour vous. Venez découvrir comment démarrer avec Qlik Sense et QlikView, poser vos questions et partager vos tutos et astuces avec les membres de notre communauté.

Partner
Partner

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

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

5 Replies
Highlighted
Not applicable

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

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

Highlighted
Partner
Partner

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

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

Highlighted
Partner
Partner

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

merci pour l'idée. je n'ai dans le XML qu'une seule période et une seule version mais je vais donc m'inspirer de ta boucle pour découper selon un autre champ. tout dépend de la distribution des données

Highlighted
Partner
Partner

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

aucune indexation dans le XML. je vais en effet partir une une boucle sur un champ autre que version ou période car mon XML est un extract déjà de 1 version et 1 période

Highlighted
Not applicable

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

si c'est effectivement une seule version et 1 seule période , tu aussi ajouter dans le load le RowNo puis ensuite faire des tranches homogènes de XXXXXXX lignes

bons tests