0013. Codec Parquet basato su @dsnp/parquetjs
- Stato: Accettata
- Data: 2026-06-05
- Decisori: Team BI/ETL
Contesto
Parquet è un formato colonnare tipato, usato negli scambi con data lake / analytics. Serve un FileCodec Parquet per leggere e (in forma base) scrivere file. A differenza degli altri formati, Parquet richiede uno schema ed è tipato.
Decisione
Adottiamo @dsnp/parquetjs (fork mantenuto di parquetjs, JS puro, tipi inclusi).
decode:ParquetReader.openBuffer(buffer)+ cursor (cursor.next()fino anull). Richiede il file intero (il footer Parquet è in coda).encode: serve uno schema. Si può passare esplicito (options.schema, consigliato) oppure viene inferito dal primo record (numeri→DOUBLE, booleani→BOOLEAN, resto→UTF8; campi opzionali). Scrittura viaParquetWriter.openStreamsu uno stream bufferizzato.- Numeri inferiti come
DOUBLE(round-trip pulito comenumber); per interi a 64 bit o tipi specifici, fornire lo schema esplicito.
Alternative considerate
parquetjs(originale) — non mantenuto.@dsnp/parquetjsè il fork attivo.parquet-wasm— più veloce (Rust/WASM) ma binario WASM più pesante e API a buffer; eccessivo per il caso d'uso.- DuckDB — potente ma è un intero motore: overkill per un semplice codec.
Conseguenze
- Positive: lettura/scrittura Parquet in JS puro, round-trip per tipi base, schema esplicito quando serve.
- Costi/limiti:
encodeedecodebufferizzano il file; lo schema inferito copre i tipi primitivi (per tipi avanzati/nidificati serve lo schema esplicito).

