Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Optimisation chargement Where

Bonjour tout le monde,

Dans mon script, je souhaite filtrer mes données, et je m'interroge sur l'optimisation : est il préférable de mettre une clause WHERE directement dans la requête SQL, ou plutôt WHERE EXISTS (xxx) dans le LOAD ?

J'obtiendrai le même résultat, mais je ne veux pas d'un temps de chargement trop long.

Merci,

Ulrich

1 Solution

Accepted Solutions
Not applicable
Author

je pense qu'en terme de perf tu iras plus vite en chargeant tout puis en appliquant un were exists,

-> T1: load base

-> T2: load resident T1 where exist

-> drop T1

dans ce cas d'usage  tu n'auras plus les données en mémoire, et tu aura une lecture plus rapide de ta base

View solution in original post

11 Replies
Anonymous
Not applicable
Author

Bonjour, Ulrich.

Il est préférable de mettre une clause WHERE dans la raquête SQL parce que il y a moins de données à traiter.

Bonne journée.

Anonymous
Not applicable
Author

Bonjour Bruno

Merci pour ta réponse.

Donc, pour résumer, mettre les filtres directement dans la clause WHERE de la requête remontera moins de données, alors qu'un WHERE EXISTS fera lire toute la table, le filtre s'appliquera après.

A+

Not applicable
Author

il n'y a pas qu'une seule véritée, dans le cas ou tu charges beaucoup de données dans plusieurs QVD, il est parfois préférable de faire le where exists directement sur la table chargée (j'ai pas les stats mais en terme de chargement ca nous a un peu changé les rechargements)

Anonymous
Not applicable
Author

Bonjour Philippe

Je suis d'accord, c'est tout l'intérêt de Qlikview d'ailleurs : il n'y a pas qu'un chemin pour arriver à destination

Je n'utilise pas de QVD, accès direct à un entrepôt de données sous SQL Serveur.

L'idée ici est de diminuer le volume de données, le temps de chargement n'est pas (encore) une contrainte.

La clause Where dans la requête me permet de ne charger que les données voulue.

La clause Where dans le Load filtre les données voulues, sur l'ensemble des données chargées : cet ensemble, ces données "non désirées", sont elles un frein à l'utilisation ou sont elles simplement supprimées de la mémoire ?

A+

Not applicable
Author

je pense qu'en terme de perf tu iras plus vite en chargeant tout puis en appliquant un were exists,

-> T1: load base

-> T2: load resident T1 where exist

-> drop T1

dans ce cas d'usage  tu n'auras plus les données en mémoire, et tu aura une lecture plus rapide de ta base

Anonymous
Not applicable
Author

Ah mais oui !!!

Quel idiot je suis (non, inutile de répondre à cette remarque )

Merci Philippe, je vais appliquer cette solution

Anonymous
Not applicable
Author

Bon, je dois être une nouille cet après midi : je n'arrive pas à utiliser cette syntaxe.

Je charge ma table, avec le filtre dans la clause where sql.

T1 : SQL Select * from Sites where Client="C1234";

T2 : LOAD * RESIDENT T1 where exists(IDENT_CLI) ;

Lors du chargement, ma table T1 existe, mais pas la T2.

J'avais mis le DROP table T1, du coup je n'avais plus de table du tout.

Pourquoi ma T2 n'existe pas ?

Not applicable
Author

Bonjour, tu dois faire:

T1 : SQL Select * from Sites where Client="C1234";

noconcatenate T2 : LOAD * RESIDENT T1 where exists(IDENT_CLI) ;

DROP table T1;


En fait quand tu recharges une table avec exactement les mêmes nombre de champ qui ont le même nom, QlikView les concatènes par défaut. Tu dois donc préciser "noconcatenate" pour dire à QlikView de ne pas les concaténer et au contraire de créer une nouvelle table.


Augustin

Anonymous
Not applicable
Author

Effectivement, je n'ai plus ma table 1, et j'ai la table 2

Sauf que la clause Where Exists n'est pas prise en compte, j'ai tous les enregistrements...

C'est à devenir fou : je comprends le fonctionnement, mais le script ne veut pas.