Falle
Schmutzige Daten
Eine unsaubere Datei löst keinen Fehler aus: Jede Abfrage läuft, und die Antworten sind falsch. Prüfen Sie eine neue Tabelle, bevor Sie ihr vertrauen.
Worauf Sie in einer neuen Tabelle achten sollten:
- Zahlen oder Daten als Text: Sie werden wie Wörter sortiert (
'99'>'138'). Prüfen Sie mitDESCRIBE, dannCASToderTRY_CAST. - Tabellenkalkulationsformate:
1.614,00 €,03.04.2024. Entfernen Sie die Währung und das Tausendertrennzeichen; lesen Sie Datumsangaben mitstrptime. - Platzhalter: 1900-01-01, -1, 0,
'N/A'für „fehlt“. Sehen Sie sich die extremen und die häufigsten Werte an, dannNULLIF. - Leer ist nicht NULL:
''und' 'zählen als Werte.NULLIF(TRIM(x), ''). - Unmögliche Werte: ein negativer Bestand, ein Rabatt von 140 %, ein Ereignis nach dem Laden.
MIN,MAXundCOUNT(*) - COUNT(spalte)auf jeder Spalte zeigen sie. - Fast gleiche Schlüssel: ein Leerzeichen, ein Großbuchstabe, ein Akzent, und der Join verliert still Zeilen. Vergleichen Sie die Zeilenzahlen;
TRIM,LOWER. - Duplikate: eine zweimal importierte Zeile, eine Person in zwei Schreibweisen.
Bereinigen Sie einmal, dort wo die Daten ankommen, und legen Sie Zeilen, die Sie nicht korrigieren können, beiseite (eine Quarantänetabelle), statt sie zu löschen.
Die Falle
WITH stock(sku, quantity) AS (VALUES ('CAF-001', '99'), ('CAF-002', '138'), ('CAF-003', '7'))
SELECT MAX(quantity) AS biggest
FROM stock;
| biggest |
|---|
| 99 |
Die Korrektur
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 |
Üben: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