QVD File Structure
A QVD file holds exactly one relational table: a fixed set of named columns (called fields) and any number of rows (called records). Each distinct value of a field is stored only once, which makes the format particularly compact for data with many repeated values, such as categories, codes or dates.
The file begins with a human-readable XML header that describes the table, its fields and where their data is located. The binary data follows it: first the symbol tables of all fields, then the index table with one fixed-size record per row. There is no magic number or other binary signature; the file starts directly with the XML declaration of the header.
Layout
Section titled “Layout”XML header
Section titled “XML header”The header is an XML document encoded in UTF-8. Besides describing the table and its fields, it tells a reader where each part of the binary data is located and how large it is. Its elements are described on the Header page.
The header is terminated by a single NUL byte (0x00). The binary part begins at the byte
immediately following it, and all positions given in the header are counted from there.
Symbol tables
Section titled “Symbol tables”Each field has its own symbol table, which holds the distinct values of that field. The symbol tables of all fields are stored one after another at the beginning of the binary part. The encoding of the values is described on the Symbol tables page.
Index table
Section titled “Index table”The index table follows the symbol tables and stores the rows of the table. Each row is a record of fixed size that holds, for every field, a reference to a value in that field’s symbol table. The encoding of the records is described on the Index table page.
Licensed under CC BY 4.0.
Not affiliated with or endorsed by Qlik. Qlik and QVD are trademarks of their respective owners.