Skip to main content

select

Selects and reorders columns from files. Supports filtering, nested dot-notation fields, and engine selection. When the DuckDB engine is used, filter expressions are pushed to SQL when possible and results can be written directly via COPY for CSV, JSON, and Parquet output.

--filter is the documented flag (--filter-expr is an alias). Syntax: Basic usage.

undatum select --fields name,email,status data.jsonl
undatum select --fields name,email --filter '`status` == "active"' data.jsonl
undatum select --fields user.name,user.email --engine duckdb data.jsonl
undatum select --fields name,email --engine duckdb --output subset.csv data.jsonl
undatum select --fields name --table Sheet2 workbook.xlsx
undatum select --fields name,capital_city.lat --flatten-nested nested.jsonl

# SQL condition and a computed column
undatum select data.csv --where "amount > 100 AND city = 'Berlin'" --fields name,amount
undatum select data.csv --add "total = price * quantity" --add "big = amount > 200"

--where takes a SQL condition (DuckDB syntax) on typed values — text columns get the number, date or boolean type most of their values have — while the output keeps the original text; unknown columns are reported with suggestions. See SQL expressions. --add name = expression is repeatable; an existing name is replaced in place.

Reference​

Reads: any readable format · Writes: any writable format; CSV/TSV/JSON/JSON Lines on stdout · Memory: streaming · Engines: auto, duckdb, python

undatum select [OPTIONS] INPUT_FILE
ArgumentDescription
INPUT_FILEPath to input file. (required)
OptionDescriptionDefault
-o, --output TEXTOptional output file path. If not specified, prints to stdout.
-f, --fields TEXTComma-separated list of field names to select and reorder.
-d, --delimiter TEXTCSV delimiter character (auto-detected when omitted).
--quotechar TEXTCSV quote character (iterabledata default '"' when omitted).
--encoding TEXTFile encoding (e.g., 'utf8', 'latin1').
--verbose / --no-verboseEnable verbose logging output.--no-verbose
-F, --format-in TEXTOverride input file format detection (e.g., 'csv', 'jsonl', 'xlsx').
-O, --format-out TEXTOverride output format (e.g., 'csv', 'jsonl').
--zipfile / --no-zipfileTreat input file as a ZIP archive.--no-zipfile
--filter, --filter-expr TEXTFilter expression to apply (e.g., "status == 'active'").
--start-page INTEGERSheet index (0-based) for Excel files.0
--table, --sheet TEXTTable or sheet name for multi-table sources (Excel, SQLite, lakehouse).
-e, --engine [auto|duckdb|python]Processing engine: auto (default), duckdb, or python.
--duckdb-threads INTEGERNumber of threads for DuckDB engine.
--duckdb-memory TEXTMemory limit for DuckDB (e.g., '4GB', '512MB').
--duckdb-temp-dir TEXTTemporary directory for DuckDB.
--trustAcknowledge pickle deserialization risk when reading pickle sources.
--on-error TEXTParse-error policy: raise (default), skip, or warn.
--error-log TEXTAppend parse errors as JSONL (use with --on-error skip or warn).
--flatten-nestedUnfold nested dict / array-of-dict fields into dotted paths (e.g. city.lat).
--max-nested-depth INTEGERWith --flatten-nested, maximum nest depth to unfold (engine default 5).
--keep-nested-parents / --no-keep-nested-parentsWith --flatten-nested, keep parent dict/array fields alongside dotted children.--keep-nested-parents
--where TEXTKeep records where this SQL condition is true (DuckDB syntax), e.g. "amount > 100 AND city = 'Berlin'". Text values are typed automatically.
--add TEXTAdd a computed column: 'name = SQL expression', e.g. 'total = price * qty' (repeatable; an existing name is replaced in place).

See also shared options.