Changelog
v0.3.0 (2026-07-14)
Critical bug fix: * Column names ending in
inwere misinterpreted as theinoperator. Fixed. * Fixed parsing of parenthesized membership lists * Fixed handling of unterminated quotes.Made
pqfilt.filter_df()match Arrow null behaviorpqfilt.filter_df(): DNF tuple validation consistent and explicit.Added
pqfilt.scan(): Arrow-native, lazily evaluated scansAdded
pqfilt.write_filtered(): One-shot writer (csv or parquet) t * The CLI now uses this streaming write path.Added public AST utilities (
pqfilt.to_ast(),pqfilt.map_leaves()) and operator utilities (pqfilt.SUPPORTED_OPERATORS,pqfilt.validate_operator()).Preserved exact integer filter literals beyond the binary64 precision limit.
Split documentation into a practical usage guide and an advanced API guide.
v0.2.2 (2026-06-19)
Critical bug in CLI:
per_fileoption was removed in 0.2.0 but CLI still referenced it, causing a crash. Fixed.
v0.2.1 (2026-06-15)
Exported
to_pyarrow_exprin the public API (previously internal).
v0.2.0 (2026-06-15)
Breaking: removed
per_fileparameter fromread().Added
is null/is not nulloperators.Added
~prefix negation (NotExpr).Fixed quoted literals (
'a|b','a&b', etc.) being split on structural characters.Fixed
in/not inlist items with commas inside quotes (desig in 'a,b', 'c').Fixed boolean column filtering:
True/Falsestrings now coerce toboolbefore pyarrow pushdown.Multi-file reads now use a single
ds.dataset(files)call (parallel I/O).Parquet output now uses
pq.write_tableto preserve Arrow type fidelity.Added
filter_df(df, filters)to apply the same filter syntax to an already-loaded DataFrame.
v0.1.6 (2026-04-29)
True/Falsestring literals (case-insensitive) are now converted to Pythonboolbefore pyarrow, preventing type-mismatch errors on boolean columns.
v0.1.5 (2026-02-23)
list/tuple:
in/not invalue lists now accept bracket/parenthesis enclosures. *"desig in [1, 2, 3]"and"desig in (1, 2, 3)"work in addition to the bare comma-separated form.Bugfix a few edge cases.
v0.1.4 (2026-02-23)
Similar fix as 0.1.3: Fixed
in/not invalue parsing *"desig in '356', '3200'"are preserved as strings.
v0.1.3 (2026-02-23)
Fixed quoted scalar values *
"name == '42'"now correctly preserves'42'as a string instead of coercing it to the integer42.
v0.1.2 (2026-02-21)
version bump only.
v0.1.1 (2026-02-21)
Added Python 3.9 support.
Fixed Sphinx documentation build warnings.
v0.1.0 (2026-02-21)
Initial release.
Core
read()function with predicate-pushdown viapyarrow.dataset.Expression parser supporting
&,|, parentheses,in/not in.Backtick quoting for column names with special characters.
Tuple and DNF filter syntax.
CLI tool (
pqfilt) with-fexpression option.Multi-file and glob support.
Output to Parquet or CSV.