Skip to main content

Generic Parquet filtering tool (CLI + API)

Project description

pqfilt

Generic Parquet filtering tool (CLI and Python API).

ReadtheDocs Documentation.

Originally developed while dealing with large Parquet files in SPHEREx mission (GitHub).

pqfilt wraps pyarrow.dataset to let you filter Parquet files before they are fully read into memory, using row-group-level filtering.

Installation

pip install pqfilt
# or
uv add pqfilt

Python API

import pqfilt

# Simple filter
df = pqfilt.read("data.parquet", filters="vmag < 20")

# AND + OR with expression syntax
df = pqfilt.read("data.parquet", filters="(a < 30 & b > 50) | c == 1")

# Negation with ~ prefix
df = pqfilt.read("data.parquet", filters="~(a > 5)")
df = pqfilt.read("data.parquet", filters="a > 5 & ~(b in 1,2,'1','2')")

# Null checks
df = pqfilt.read("data.parquet", filters="v is null")
df = pqfilt.read("data.parquet", filters="v is not null")

# Boolean columns
df = pqfilt.read("data.parquet", filters="is_comet == True")
df = pqfilt.read("data.parquet", filters="is_comet != false")

# Membership filter (explicit quotes preserve string types, e.g., to prevent Parquet type errors)
# Supported array formats: "val1, val2", "(val1, val2)", "[val1, val2]"
df = pqfilt.read("data.parquet", filters="desig in '1', '2', '3'")
df = pqfilt.read("data.parquet", filters="desig in ('1', '2', '3')")
df = pqfilt.read("data.parquet", filters="desig in ['1', '2', '3']")

# Tuple syntax (flat AND)
df = pqfilt.read("data.parquet", filters=[("a", "<", 30), ("b", ">", 50)])

# Tuple syntax with null checks
df = pqfilt.read("data.parquet", filters=[("v", "is null", None)])

# DNF syntax (OR of ANDs)
df = pqfilt.read("data.parquet", filters=[
    [("a", "<", 30)],
    [("b", ">", 50)],
])

# Column selection + output
df = pqfilt.read("data/*.parquet", columns=["a", "b"], output="out.parquet")

CLI

# Basic filter
pqfilt data/*.parquet -f "vmag < 20" -o filtered.parquet

# AND + OR expression
pqfilt data/*.parquet -f "(a < 30 & b > 50) | c == 1" -o filtered.parquet

# Multiple -f flags (AND-ed together)
pqfilt data/*.parquet -f "vmag < 20" -f "dec > 30" -o filtered.parquet

# Column selection
pqfilt data/*.parquet -f "vmag < 20" --columns vmag,ra,dec -o filtered.parquet

# Membership filter (enclosing brackets [] or () are automatically stripped)
pqfilt data/*.parquet -f "desig in [1, 2, 3]" -o filtered.parquet

Column names with special characters

Columns containing operator characters can be backtick-quoted:

pqfilt.read("data.parquet", filters="`alpha*360` > 100")

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pqfilt-0.2.0.tar.gz (95.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pqfilt-0.2.0-py3-none-any.whl (13.7 kB view details)

Uploaded Python 3

File details

Details for the file pqfilt-0.2.0.tar.gz.

File metadata

  • Download URL: pqfilt-0.2.0.tar.gz
  • Upload date:
  • Size: 95.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pqfilt-0.2.0.tar.gz
Algorithm Hash digest
SHA256 273341424df951476ab654d52f645dfe9d3290385b55ea5a3fcc5faab2660351
MD5 16297889adc91cfa2fc223044c733513
BLAKE2b-256 0b0e64aea9178fa3adf7e30a8e507b28e407a291b334023b4e673c9e6e47430d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pqfilt-0.2.0.tar.gz:

Publisher: publish.yml on ysBach/pqfilt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pqfilt-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: pqfilt-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 13.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pqfilt-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 64852842d18805c68e3ad2337d00db6979e9fc562c8486863bb6c5c598ca092a
MD5 d9bc6e78a11795c663cd3be5253a75cb
BLAKE2b-256 8bea519a54ed993cd3cadf8d8ea1f0b6c2b521f5127fa64b11251a826141663e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pqfilt-0.2.0-py3-none-any.whl:

Publisher: publish.yml on ysBach/pqfilt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page