All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Added support for Python's Pathlib
Pathclass for working with filesystem paths.
- Dropped support for Python 3.8. Python >= 3.9 is now required.
- Writer optimization: Reworked symbol and index table building to avoid repeated byte concatenation. Data is now accumulated in lists and joined once, reducing write complexity from O(N²) to O(N) and significantly improving performance for large files.
- Reader optimization: Replaced byte-to-binary-string conversions with direct bitwise extraction, eliminating large numbers of temporary string allocations. Header buffer construction was also optimized using list accumulation and a single join.
- Resolves bug handling TIME data type (serial number)
- Added support for vectorization when constructing a QVD table from a pandas DataFrame.
- Fixed a bug that caused an exception when persisting 64-bit integers to a QVD file.
- Custom copy methods for QVD symbol classes to speed up copying of symbol tables.
- Added support for customizing value formatting in QVD data tables during writing.
- Support reading of a QVD file in chunks to reduce memory usage. It's important to note that this only affects the reading of the index table. The header and symbol table are still read completely into memory.
- Improved the performance of converting bit representations to integers during parsing QVD index tables. This is accomplished by using strings instead of integer lists for bit representations.
- Improved performance for QVD table concatenation when concatenating them inplace. This is achieved by no longer deep copying the data of the table to be appended to. This only affects the inplace concatenation.
- Improved inplace DataFrame transformations by avoiding unnecessary copying of the data when transforming the DataFrame.
- Fixed numpy type to native type conversion when parsing a QVD table from a pandas DataFrame. Formerly, this results in an exception, because the internal logic assumed that the numpy type is a subclass of the native type.
- Added support for pandas'
Timedeltadata type in QVD data tables during reading and writing. - Added support for QVD's money data type in QVD data tables during reading and writing. In Python
this is represented as a
Decimalobject.
- Added new more granular value types for QVD data tables like
IntegerValue,DoubleValue,StringValue,DualIntegerValueandDualDoubleValue. - Support for dealing with advanced Qlik data types like
Date,Time,TimestampandIntervalin QVD data tables during reading and writing. - Better type conversion support for importing and exporting QVD data tables to other in-memory
data structures like pandas'
DataFrameor built-in Python dictionaries. Time related values are no longer converted to strings but to the corresponding Python datetime objects and vice versa. - Considers tags and number format while reading and writing.
- Separate the reading and writing logic of QVD files from the QVD data table implementation.
The new classes
QvdFileReaderandQvdFileWriterare introduced to handle this logic. - Provide a rich feature table implementation for QVD data tables by replacing the current
implementation (
QvdDataFrame) with a new one (QvdTable). Features include better type conversion support, easier data manipulation and more efficient data access. - Values are now represented by more granular value classes. The original
QvdValueclass is now abstract and serves as a base class for the new value classes.
- Removed the
QvdDataFrameclass and its related functions. TheQvdTableclass is introduced as a replacement.