Skip to main content

Format support matrix

undatum supports 140+ formats via iterabledata (catalog size depends on the installed iterabledata version and optional extras). Capabilities differ by format: many are read-only, some require extras, and streaming support varies.

undatum requires Python 3.10+ and iterabledata ≥ 1.0.21 (installed with undatum), which provides the open-data pack, lakehouse writes, codec profiles and Avro writes. Run undatum formats list to see what your install actually exposes.

How to inspect live capabilities​

# Human-readable catalog
undatum formats list

# Capability matrix (read / write / streaming / maturity / native bulk)
undatum formats list --capabilities

# Named tables or sheets
undatum formats tables workbook.xlsx

# One format: memory model, selection pushdown, codecs, native bulk, example args
undatum formats describe parquet
undatum formats describe xml

# Machine-readable
undatum formats list --capabilities --json

Core formats (typical CLI workflows)​

FormatReadWriteStreamingNotes
CSV / TSVyesyesyesDelimiter auto-detected (comma, semicolon, tab, pipe), also inside .gz/.zst/.bz2/.xz/.zip
JSON Lines / NDJSONyesyesyesPreferred for nested records
JSON (array/object)yesyeslimitedPrefer JSONL for large files
ParquetyesyesbatchedRequires pyarrow (default dependency); codec profiles fast/balanced/max
Arrow / FeatheryesyesbatchedNative batch convert path in iterabledata 1.0.17+
Excel XLSX / XLSyeslimitedsheet-based--table / --sheet for a named sheet; --start-page for a 0-based index
XMLyeslimitedyesUse --tagname for record elements
BSONyesyesyes
AVROyesyesbatchedWritable since iterabledata 1.0.14 (lazy schema inference)
ORCyesyesbatchedRobust schema inference for unusual column names (1.0.14+)
YAMLyesyeslimited
DuckDB / SQLite filesyesyestable-basedDefault table name derived from output filename when omitted (1.0.14+)

Compression codecs commonly used with the above: gz/gzip, zst, bz2, xz, lz4, zip, 7z. Codec performance profiles (fast, balanced, max) are available through iterabledata; undatum repack uses maximum compression by default.

Use undatum repack to recompress container-coded files at maximum compression, or to rewrite Parquet/ORC/AVRO with format-native compression. See repack.

Format families (non-exhaustive)​

FamilyExamplesNotes
Tabular textcsv, tsv, psv (RO), ltsv, jsonl/ndjson, annotatedcsv, csvw, fwf, ssv, txtCore CLI path
Columnar / analyticsparquet, orc, avro, arrow, geoparquet, zarr, vtx (Vortex), ddbMany need optional deps
Lakehouse / warehousedelta, iceberg, lance, hudi (RO), ducklake, paimon, paimon_row, paimon_mosaicDelta/Iceberg writable in iterabledata 1.0.18+; install via pip install "undatum[lakehouse]" (or iterabledata[lakehouse])
Geospatialgeojson, geojsonseq, topojson, flatgeobuf (RO), gml, gpx, shp, gpkg, kml, kmz (RO), fgdb/gdb, mif, asc, e00, las, bag, czml, mvt (RO), dxf (RO)Open-data GIS pack partly experimental; flatgeobuf needs undatum[gis]
Scientific / geophysicalh5, nc, cdf, mat, npy, segy, grib2, mseed, cif, pdb, xyz, ediOften read-only; extras such as mat, geophysical, lidar
Statisticalsas, sav, dta, rds/rda, px (PC-Axis), dbf, arffRead-only
Business / legacymdb/accdb, lotus123 (123/wk1), xlsbAccess needs undatum[access]
Binary serializationmp (MessagePack), cbor, ion, smile, ubj, bencode, der (ASN.1), pb, capnp, thrift, fbs (RO)/flexbufProtobuf, Cap'n Proto, Thrift and FlatBuffers need a schema
Configuration / notationyml (YAML), toml, ini, hocon, edn
Database dumpscopy (PostgreSQL COPY), sql (mysqldump)
ML / big datatfrecord, libsvm, seq (Hadoop SequenceFile), rio (RecordIO), beam, ckpt (Flink)
Web, mail, directoryhtm (RO), mht, arc (WARC), cdx, eml, mbox, ics, ldif
Containerszip, zipxml (RO, XML inside ZIP), tar (RO multi-member), WebDatasetTAR tags records with _member
Genomic / biogenomic_vcf, bam, sam, bed*, gff3/gtf, cram, fa (FASTA), fq (FASTQ)VCF vs vCard .vcf disambiguated by content
Graph / RDFgraphml, gexf, gv (Graphviz, RO), jsonld, nt, nq, n3 (RO), ttl, trig, trix (RO), hdtHDT via open-data pack
Logs / feeds / streamslog, gelf, cef, ilp (InfluxDB line protocol), pcap (RO), rss (RO), kafka, pulsar, otlp-json, otlp-protobufOTLP is experimental (otlp extra of iterabledata)
Niche open dataiati, fst, webdatasetExperimental; optional extras

Important caveats​

  1. Read-only formats exist. Do not assume every format listed by formats list can be a conversion target. undatum fails fast with writable-format suggestions when you pick a read-only output. Hudi remains read-only pending Python SDK write support.
  2. Extras. Some connectors need optional installs (undatum[cloud], undatum[api], undatum[extract], database drivers, or undatum extras that forward iterabledata packs: undatum[lakehouse], undatum[gis], undatum[scientific], undatum[access], undatum[compression]). You can still install iterabledata extras directly if you prefer.
  3. Large files. Prefer --low-memory on convert / sort / dedup, and Parquet or JSONL over in-memory JSON arrays. Parquet/Arrow writers buffer bounded batches (iterabledata 1.0.17+).
  4. Python version. undatum and iterabledata require Python ≥ 3.10; on Python 3.9 pip resolves to undatum 1.6.0.
  5. Security / error policy (iterabledata 1.0.16+): XML parsers disable external entities; pickle reads warn unless trust=True (undatum convert --trust, and the same flag on other read commands); malformed rows raise FormatParseError unless you pass --on-error skip or --on-error warn. Pair with --error-log errors.jsonl to keep a JSONL record of skipped rows.

For the authoritative list, always trust undatum formats list --capabilities for your installed version. Upstream release notes: iterabledata CHANGELOG.

Catalog notes​

undatum supports 140+ formats through iterabledata (exact catalog depends on the iterabledata version and optional extras). Format detection is automatic from file extensions and content; override with --format-in / --format-out when needed. Run undatum formats list for the authoritative catalog on your installation.

Core tabular formats​

FormatExtensions / idsNotes
CSV / TSV.csv, .tsv (csv, alias tsv)Delimiter and encoding auto-detected
JSON Lines.jsonl, .ndjson (jsonl, alias ndjson)One JSON object per line; ideal for streaming
JSON.jsonArray or object documents
Parquet / ORC / Avro.parquet, .orc, .avroColumnar and binary row formats; Avro is writable (iterabledata 1.0.14+)
Arrow / Feather.arrow, .featherBounded batch I/O; native batch convert path available
Excel.xls, .xlsx, .xlsb, .odsNamed sheet via --table / --sheet; --start-page for a 0-based index
BSON.bsonBinary JSON (MongoDB)
DuckDB / SQLite.ddb, .duckdb, .sqlite, .dbTable name defaults from output filename when omitted

Structured, geospatial, scientific, and lakehouse​

  • XML — convert with --tagname to specify the record element (XXE-hardened parsers in iterabledata 1.0.16+)
  • YAML / TOML / INI — config and metadata formats (yml, toml, ini)
  • Geospatial — geojson, geojsonseq, geoparquet, fgb, gpx, shp, gpkg, kml, FileGDB (fgdb), MapInfo MIF, LAS, …
  • Lakehouse — Delta and Iceberg support bounded writes (1.0.18+); also Lance, DuckLake, Paimon; Hudi remains read-only. Install with pip install "undatum[lakehouse]"
  • Scientific / statistical — h5, nc, mat, segy, grib2, sas, sav, dta, and others (many read-only)
  • Containers — ZIP; read-only TAR multi-member archives (tar / .tgz); WebDataset
  • Graph / RDF — graphml, gexf, jsonld, nt, ttl, trig, hdt, …

Compression​

Read and write through compressed containers without manual decompression: GZ, XZ, BZ2, ZIP, ZSTD, LZ4, 7Z, and other codecs supported by iterabledata. Codec profiles fast / balanced / max are available in iterabledata 1.0.17+; undatum repack defaults to maximum compression.

# Process JSONL inside a ZIP or XZ archive
undatum headers --format-in jsonl data.zip
undatum count data.jsonl.xz

Choosing a format​

Use caseRecommended formats
Streaming ETL / logsJSON Lines, CSV
Analytics / data lakesParquet, ORC, Avro, Delta, Iceberg
API interchangeJSON, JSON Schema
Packaging / catalogsFrictionless Data Package (undatum package)
Geospatial pipelinesGeoJSON / GeoJSONSeq → GeoParquet

Inspect read/write capabilities before converting:

undatum formats describe parquet
undatum formats list --writable --capabilities

Per-format reader/writer details live in the upstream iterabledata formats docs.