Skip to content

clean.read.columns non deve aggiungere automaticamente __extra #7

@Gabrymi93

Description

@Gabrymi93

Problema

Quando clean.read.columns e' esplicito, il reader CSV aggiunge automaticamente una colonna __extra.

Questo rompe casi reali a schema fisso, perche' DuckDB riceve uno schema con una colonna in piu' rispetto a quelle effettivamente presenti nel file e fallisce in fase di sniff/parsing.

Come riprodurlo

  1. Configurare un dataset CLEAN con:
    • auto_detect: false
    • columns esplicito
    • file CSV a schema fisso
  2. Eseguire run all o validate all
  3. Osservare il fallimento del reader con mismatch tra colonne dichiarate e colonne trovate

Casi reali che lo hanno mostrato

  • stress-local/cases/case_03_siope_no_header_schema
  • stress-local/cases/case_08_pnrr_progetti_m1

Comportamento osservato

Il reader costruisce uno schema effettivo con una colonna aggiuntiva __extra, anche se l'utente ha gia' dichiarato in modo esplicito tutte le colonne desiderate.

DuckDB fallisce con errori del tipo:

  • mismatch tra colonne configurate e colonne trovate
  • fallimento in sniff/parsing su file sporchi o a schema fisso

Comportamento atteso

Se clean.read.columns e' esplicito, il reader deve usare esattamente quelle colonne, senza iniettarne altre implicitamente.

Eventuali colonne extra o righe sporche vanno gestite con:

  • null_padding
  • ignore_errors
  • schema esplicito corretto

ma non tramite una colonna implicita non richiesta.

Impatto

  • rompe casi reali no-header a schema fisso
  • rende ambiguo il contract di clean.read.columns
  • complica il debug dei dataset sporchi

Fix proposto

Rimuovere l'iniezione automatica di __extra in toolkit/clean/duckdb_read.py quando columns e' gia' fornito.

Verifica

Test aggiunti:

  • mantenere invariato params_used["columns"] quando lo schema e' esplicito
  • leggere correttamente un CSV no-header a 5 colonne senza aggiungere colonne implicite

Verifica locale eseguita:

py -m pytest tests/test_clean_duckdb_read.py tests/test_clean_csv_columns.py tests/test_clean_input_selection.py -q

Esito:

  • 26 passed

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

Projects

Status

✅ Completato

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions