How to use QVDs (QlikView Data files) to make your Qlikview application efficient?
In June 2013, I had been using QlikView for about a year. During those days, I was working on a QlikView project where I had to show the sales number across various channels for various periods (e.g. Daily, Monthly, Yearly) and in comparison with last year.
I had two transactional tables, three mapping tables (available in Excel). I had completed this project successfully within a defined timeline. However, there were 2 problems with the model I used:
- Whenever there was any change in any of the mapping files, I had to repeat the reload process which involved not only reloading the excel, but also reloading the entire transaction table. If there was any issue with the network or database, the reloading would fail.
- When I used to report daily sales number, I reloaded complete tables on a daily basis whereas data till yesterday was already with me. It was too time consuming process.
This is when using a QVD (QlikView Data) file made a lot of difference. You can think of these QVD files as a middle layer, so that your front-end queries do not run on the databases directly. Creation of these QVDs can be done during off-peak hours (Less network and database load). QVDs are also essential to load only the incremental data (i.e. Additional or modified records).
What Is a QVD file?
QVD is a QlikView format and can only be written to and read by QlikView. A single QVD file can store a single table and is created in the load script in a QVW file.
A QVD file consists of three parts:
- XML header to describe the fields in the table, the layout of the subsequent information and other meta-data.
- Symbol tables in a byte stuffed format.
- Actual table data in a bit-stuffed format.
Advantages of using QVDs:
QVD files offer many advantages to your QlikView applications, including the following:
- Faster load time: Reading data from QVD is 10-100 times faster than other sources i.e. decreasing load time. It is because QVD creation uses the same algorithms as QlikView uses to store data in memory, the result of that Loading from QVD is faster, when compared to other formats.
- Less load on databases and networks: Once data is exported in QVDs, you don’t need to connect with external database again. It reduces the workload on external databases and network. Furthermore, when several QlikView scripts share the same data, it is only necessary to load it once from the source database. The other applications can also make use of the same data via a QVD file.
- Incremental loads of QVDs: Incremental load (loading only new/ modified detail of a database) can be done only by using QVDs. It reduces the load time significantly as compared to complete load.
- Consolidating data from multiple data sources and databases: Multi-layer QVDs are used to create a with robust model, when data is fetched from multiple data sources.
How to create a QVD?
QVDs are most commonly created during the execution of QlikView load script using the STORE command:
Syntax: STORE <TableName> INTO <Path\FileName.qvd>
It is a good practice to have separate application to create QVD files. This layer is used to handle all interaction with source databases. And the result of this interaction can be reloaded quickly from QVD files.
Incremental loads: As mentioned before, Incremental loads are defined as loading only new or updated records from the database into an established QVD. Incremental loads are useful because they run much faster than full loads, particularly for large data sets from databases. (Will discuss it in detail in the next article)
How to load data from QVD?
To read data from QVD, we need to write a LOAD statement (similar to the command to load CSV or excel file).
TableName: LOAD FieldList FROM <Path\FileName.qvd (qvd) >;
QVD files can be read in two modes, standard (fast) and super-fast. The selected mode is determined automatically by the QlikView script engine. Super-fast mode can be utilized only when all fields or a subset of it are required to be read without any manipulation (e.g. formula based field generation), although the renaming of fields is allowed.
Managing QVDs is one of most important part in any QlikView application project. It can be used to provide a logical data layer and hence it can act as a data warehouse in absence of one (one of the big benefits of Qlikview in comparison to other BI tools in the market).
Creating QVDs helps to decrease the database and network load. Once a base QVD is generated, an incremental load script can be run to load only the new or modified records to the QVD. Incremental load also removes the deleted records. As a result of this, your application consumes less space and requires less load time.
If you have used QVDs in past to create multi-level data models or plan to use one in your application now, please feel free to share your experience with me through the comments below.