Qlik Community

Groupe des Utilisateurs Francophones

Announcements
Members are not receiving notifications from the community. A bug has been identified and a fix is coming soon.
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Contributor III
Contributor III

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
Highlighted
Not applicable

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
Highlighted
Creator III
Creator III

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.

Highlighted
Contributor III
Contributor III

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+

Highlighted
Not applicable

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)

Highlighted
Contributor III
Contributor III

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+

Highlighted
Not applicable

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

Highlighted
Contributor III
Contributor III

Ah mais oui !!!

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

Merci Philippe, je vais appliquer cette solution

Highlighted
Contributor III
Contributor III

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 ?

Highlighted
Not applicable

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

Highlighted
Contributor III
Contributor III

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.