Skip to content

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 a null). 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 via ParquetWriter.openStream su uno stream bufferizzato.
  • Numeri inferiti come DOUBLE (round-trip pulito come number); 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: encode e decode bufferizzano il file; lo schema inferito copre i tipi primitivi (per tipi avanzati/nidificati serve lo schema esplicito).

Noeva è un marchio registrato di 4D S.R.L.