Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Join us in Bucharest on Sept 18th for Qlik's AI Reality Tour! Register Now
cancel
Showing results for 
Search instead for 
Did you mean: 
sarfaraz_sheikh
Contributor III
Contributor III

QVD Reload Problem

Dear All,

I am reloading one QVD in my App ...but after optimizing some records the timer on Script Execution process is continue to flow till u will not click on Abort and remaining records in QVD is not optimizing.

This is happening only in the case when i am giving condition in where clause in Script. Without condition the QVD is optimizing Successfully.

But i want to extract the records as per my condition/expectation. I do not know what to do in this case

Kindly help to resolve the same .

Sarfaraz

16 Replies
Peter_Cammaert
Partner - Champion III
Partner - Champion III

A single parameter Exists() will still do an optimized load. A two-parameter Exists() will force an unoptimized load.

RawQVD:

LOAD * FROM [.\MyQVD.QVD] (qvd)

WHERE Exists(YourFieldnameToCheckInThisTable);    // Optimized LOAD

sarfaraz_sheikh
Contributor III
Contributor III
Author

Dear Joe,

the below is my condition ...how i can put in in Exists()

Resident Helios
     where (((year(CREATE_DATE)*10000+month(CREATE_DATE)*100+day(CREATE_DATE))>='20130401') and ((year(CREATE_DATE)*10000+month(CREATE_DATE)*100+day(CREATE_DATE))<='20141130'));

Sarfaraz

Not applicable

Hi Sarfaraz,

exists probably isn't the best solution for that then. I would suggest going with Peter's post further up the thread and during your QVD creation, reduce and take your required subset into a second QVD, which you can then just load straight in to your end application.

Hope that helps

Joe


Peter_Cammaert
Partner - Champion III
Partner - Champion III

You can't. Doing more complex things than a simple Exists() will cause an unoptimized QVD LOAD.

But you can simplify your WHERE condition to this:

WHERE (CREATE_DATE >= '1/04/2003') AND

            (CREATE_DATE <= '30/11/2014');

Add this clause to the two-step example in my post above. (change the strings to your local date format)

Not applicable

How dates (like 'DD/MM/YYYY' or 'DD/MM/YY' or 'YYYYMMDD' etc.) are stored in CREATED_DATE field in database?

Not applicable

you could do this with a simple exists Peter, but as you probably not the best thing for this example

To do it you'd need to create a new field in your QVD, to flag where the required condition was met.

Then could just do an inline load of that value, followed by a concatenate of your QVD and a simple exists, to keep optimised.

Fact:

Load * Inline [

ConditionField

True

];

Concatenate(Fact)

Load * From myqvd Where Exists(ConditionField)

Like I say, not the best for this example, ideally I would go with split daily QVD's and a looped auto concatenate load based on an input parameter

kuba_michalik
Partner - Specialist
Partner - Specialist

Fuh, that's easy (not really, and not that clear either )

Disclaimer: make sure that no field "CREATE_DATE" in created in the script before those steps.

First step: load distinct values of the field you want to filter with with. This is optimized (because we use Exist instead of DISTINCT or something) so should be lightning fast:

Values:

LOAD CREATE_DATE

From yourqvd.qvd(qvd)

Where not Exists(CREATE_DATE);

Now you have a list of distinct values, hopefully less of them than records in the QVD.

Second step, load a filtered list of values. That's unoptimized, but you are filtering a single-column table with hopefully less records than in the QVD, so should be reasonably fast (hopefully, at least faster than filtering a whole pre-loaded QVD):

FilteredValues:

NoConcatenate

LOAD CREATE_DATE

Resident Values

Where (some condition);

Third, drop the original list of values:

DROP Table Values;

Fourth, actually load the QVD (finally!). The only condition is Exists(), so the load will be optimized:

Table:

LOAD *

From yourqvd.qvd(qvd)

Where Exists(CREATE_DATE);

Fifth, drop the value list as it is not needed anymore.

I'm attaching an app which demonstrates how to do it on some autogenerated data.