Trampa
Datos sucios
Un archivo sucio no da ningún error: todas las consultas funcionan y las respuestas son falsas. Revise una tabla nueva antes de fiarse de ella.
Qué buscar en una tabla nueva:
- Números o fechas guardados como texto: se ordenan como palabras (
'99'>'138'). Compruébelo conDESCRIBE, luegoCASToTRY_CAST. - Formatos de hoja de cálculo:
1.614,00 €,03/04/2024. Quite la moneda y el separador de miles; lea las fechas constrptime. - Valores de relleno: 1900-01-01, -1, 0,
'N/A'para decir «falta». Mire los valores extremos y los más frecuentes, luegoNULLIF. - Vacío no es NULL:
''y' 'cuentan como valores.NULLIF(TRIM(x), ''). - Valores imposibles: un stock negativo, un descuento del 140 %, un evento posterior a la carga.
MIN,MAXyCOUNT(*) - COUNT(columna)en cada columna los muestran. - Claves casi iguales: un espacio, una mayúscula, un acento, y el join pierde filas en silencio. Compare el número de filas;
TRIM,LOWER. - Duplicados: una fila importada dos veces, una persona escrita de dos maneras.
Limpie una sola vez, donde llegan los datos, y aparte las filas que no pueda corregir (una tabla de cuarentena) en lugar de borrarlas.
La trampa
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 corrección
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 |
Practicar: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