Trappola
Dati sporchi
Un file sporco non dà alcun errore: ogni query gira, e le risposte sono sbagliate. Controlla una nuova tabella prima di fidarti.
Cosa cercare in una nuova tabella:
- Numeri o date salvati come testo: si ordinano come parole (
'99'>'138'). Controlla conDESCRIBE, poiCASToTRY_CAST. - Formati da foglio di calcolo:
1.614,00 €,03/04/2024. Togli la valuta e il separatore delle migliaia; leggi le date constrptime. - Valori segnaposto: 1900-01-01, -1, 0,
'N/A'per dire «manca». Guarda i valori estremi e quelli più frequenti, poiNULLIF. - Vuoto non è NULL:
''e' 'contano come valori.NULLIF(TRIM(x), ''). - Valori impossibili: uno stock negativo, uno sconto del 140 %, un evento dopo il caricamento.
MIN,MAXeCOUNT(*) - COUNT(colonna)su ogni colonna li mostrano. - Chiavi quasi uguali: uno spazio, una maiuscola, un accento, e il join perde righe in silenzio. Confronta il numero di righe;
TRIM,LOWER. - Duplicati: una riga importata due volte, una persona scritta in due modi.
Pulisci una volta sola, dove arrivano i dati, e metti da parte le righe che non puoi correggere (una tabella di quarantena) invece di cancellarle.
La trappola
WITH stock(sku, quantity) AS (VALUES ('CAF-001', '99'), ('CAF-002', '138'), ('CAF-003', '7'))
SELECT MAX(quantity) AS biggest
FROM stock;
| biggest |
|---|
| 99 |
La correzione
WITH stock(sku, quantity) AS (VALUES ('CAF-001', '99'), ('CAF-002', '138'), ('CAF-003', '7'))
SELECT MAX(CAST(quantity AS INTEGER)) AS biggest
FROM stock;
| biggest |
|---|
| 138 |
Esercitati:Fernández, not FernandezOne email, several accounts'paris' finds nobodyPrices that are not numbersEmpty is not NULLThe biggest stock is 99?1 614,00 €Born on 1900-01-01A discount of 140 %'France ' is not 'France'Clean a sign-up exportA number that is textLogged twiceLines without a productProfile before you trustImpossible datesOne rule for every columnTwo date formats and some junkOne person, two accountsCents to euros, once and exactlyQuarantine, don't dropA lookup for country namesDouble clicksA few users, too many eventsThe error that shows up downstream