Skip to content

fix(core): register Excel misto numerico+stringa come VARCHAR - #511

Merged
Gabrymi93 merged 2 commits into
mainfrom
fix/excel-mixed-columns-register
Oct 16, 2026
Merged

Gabrymi93 merged 2 commits into
mainfrom
fix/excel-mixed-columns-register

Conversation

@Gabrymi93

Copy link
Copy Markdown
Member

Sintesi

Il register pandas→DuckDB del reader Excel (_execute_excel_read) falliva su colonne object miste numeri+stringhe: DuckDB deduceva il tipo numerico dai valori dominanti e castava male le stringhe residue. Ora le colonne miste vengono stringificate al register.

Contesto collegato

Nessuna issue — regression trovata durante il fix di troncatura pageSize in dataciviclab/energia-italia (dataset terna_elettricita_per_settore, export xlsx con riga footer "Applied filters: ..." nella prima colonna numerica).

Cosa cambia

  • Bug fix
  • Nuova funzionalità del motore
  • Nuovo plugin sorgente
  • Modifica contratto pubblico (dataset.yml, path output, schema parquet)
  • Refactor / performance
  • Documentazione
  • Dipendenze o CI

Impatto su contratti pubblici

  • Struttura dataset.yml (nuovo campo, cambio obbligatorietà)
  • Path output (nuovo layer, cambio percorso artifact)
  • Schema parquet (nuova colonna, rename, cambio tipo)
  • CLI o MCP tool (nuovo comando, cambio parametro)
  • API pubblica del toolkit (firma funzione, classe, eccezione)

Effetto osservabile: colonne Excel object miste passano da errore di register a VARCHAR. I consumer SQL devono già castare con cast_int/cast_double (contratto esistente).

Verifica

pytest tests/test_clean_duckdb_read.py -q   # 32 passed (1 nuovo regression policy)
ruff check toolkit/core/read_excel.py tests/test_clean_duckdb_read.py
mypy toolkit/core/read_excel.py
  • pytest sul file toccato passa
  • ruff check . passa
  • mypy toolkit/ sul modulo toccato passa
  • Aggiunto test con marker policy (test_read_excel_mixed_numeric_string_column_registers_as_varchar)

Checklist PR

  • Perimetro stretto: una PR = un fix mirato
  • Issue collegata o motivazione dell'assensenza (regression reale, sopra)

Note per chi revisiona

  • La stringificazione colpisce solo colonne object con valori misti numerici+stringhe; le colonne omogenee restano invariate.
  • Test regression copre il caso footer Terna (prima colonna int + riga "Applied filters").
  • Consumatori reali verificati: energia-italia (Terna xlsx) — fix sblocca il re-run 2015 di terna_elettricita_per_settore con pageSize=500000.

Metriche PR

Tipo: root fix
Problema reale: register pandas→DuckDB deduce tipo numerico su colonne object miste e fallisce sulle stringhe (footer export Terna)
Contratto riusato: macro cast_int/cast_double nei clean.sql consumer
Codice rimosso o duplicazione eliminata: nessuna (aggiunta normalizzazione al register)
Test aggiunti: 1 regression policy
Rischio residuo: colonne miste preesistenti passano a VARCHAR (nessun caso noto nel Lab)
Follow-up obbligatorio: nessuno

Le colonne object miste (numeri + stringhe, es. footer 'Applied filters'
degli export Terna) fallivano al register pandas→DuckDB: DuckDB deduceva
il tipo numerico dai valori dominanti e castava male la stringa.
Stringifiche le colonne miste al register; i consumer SQL continuano a
usare cast_int/cast_double.
Review finding: l'helper mutava in-place il DataFrame single-frame.
Ora copia solo quando trova una colonna mista da stringificare;
input mai mutato. Aggiunto test pure policy.
@Gabrymi93
Gabrymi93 merged commit 29b74ca into main Oct 16, 2026
3 checks passed
@Gabrymi93
Gabrymi93 deleted the fix/excel-mixed-columns-register branch October 16, 2026 18:50
Gabrymi93 added a commit to dataciviclab/energia-italia that referenced this pull request Oct 16, 2026
L'export xlsx del Download Center Terna pagina con pageSize (default 100):
bilancio-elettrico restituiva 100 paesi (A→K, mart UE 9/15) e
elettricita-per-settore 100 righe (7 regioni, 25 province).

- bilancio: pageSize=500 (209 paesi verificati; 2024/2025 non ancora
  pubblicati dalla fonte)
- settore: pageSize=500000 come da notes (428 righe, 20 regioni,
  107 province su tutti gli anni 2015-2024)

Depende da dataciviclab/toolkit#511 per il re-run CI del 2015
(register Excel su colonne miste + footer).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant