Vale amor 😄, aquí va la versión de casos y ejemplos para timestamps. La idea es entrenar el ojo: “veo esto en la serie → sospecho esto → lo confirmo así → lo arreglo así”.
Tema: Calidad de datos · Enfoque: casos reales típicos + lectura paso a paso.
Accesos directos:
- Casos rápidos: sección 3
- Cómo diagnosticar (pasos): sección 2
- Tabla síntoma → causa: sección 5
1. Antes de empezar: dos relojes distintos
En calidad de datos, casi siempre hay dos tiempos aunque no lo veas:
- Hora del fenómeno: cuándo ocurrió/lo midió el sensor (observed_time)
- Hora de llegada: cuándo lo recibió tu sistema (ingest_time)
Muchos “picos raros” vienen de confundirlos.
2. Método de diagnóstico (siempre igual)
- Localiza un ancla: amanecer (radiación), máximo solar, paso frontal, comienzo de lluvia en radar.
- Mide el desfase: ¿es fijo (1h/2h) o variable?
- Busca patrones: solo en marzo/octubre (DST), solo tras cortes (backfill), duplicados al minuto (redondeo).
- Comprueba cadencia: ¿cada 60s/5min/10min como esperas?
- Decide la causa y aplica la corrección mínima (sin reescribir medio histórico si no hace falta).
3. Casos y ejemplos (con lectura paso a paso)
3.1 Caso 1: “Todo va 1 hora adelantado” (doble conversión)
Síntoma: el máximo de radiación/UV cae a una hora rara, pero todo “tiene sentido” internamente.
Lectura paso a paso:
- Marca el día despejado y mira el pico de radiación (debería encajar con el mediodía solar aproximado).
- Observa si el desfase es siempre el mismo (3600 s o 7200 s).
- Si el desfase es fijo: sospecha doble conversión (logger en local + servidor asume UTC + UI convierte otra vez).
Arreglo típico: dejar UTC en almacenamiento y solo convertir a local en UI una vez.
3.2 Caso 2: “El problema aparece solo en marzo/octubre” (DST)
Síntoma: en el cambio de hora hay huecos o duplicados y los diarios se descuadran.
Lectura paso a paso:
- Ve al día del salto DST: busca una hora repetida o una hora inexistente.
- Si eso está dentro del almacenamiento, casi seguro guardas hora local o timestamps naive.
- Comprueba si tus agregados diarios cortan en UTC o en local: si mezclas, los diarios “bailan”.
Arreglo típico: migrar/normalizar a UTC canónico + render por zona IANA (Europe/Madrid).
3.3 Caso 3: “Tras un corte, aparece un pico brutal de lluvia” (backfill)
Síntoma: 0.0 mm durante 40 min, vuelve internet y de golpe cae 25 mm en un minuto (y te asustas 😂).
Lectura paso a paso:
- Busca un gap justo antes del pico.
- Comprueba si el sensor/pluviómetro acumula internamente y lo envía al volver.
- Si el sistema asigna timestamp de llegada, convierte acumulado en “intensidad falsa”.
- Contrasta con radar o con coherencia interna (HR/T/viento): convectiva real suele dejar huellas.
Arreglo típico: separar observed_time vs ingest_time; marcar backfill; recalcular intensidades por ventana real.
3.4 Caso 4: “Duplicados al minuto exacto” (redondeo + reintentos)
Síntoma: ves dos o tres puntos con el mismo timestamp (a :00) y valores iguales o casi iguales.
Lectura paso a paso:
- Mira si el origen redondea a minuto.
- Busca reintentos de envío (red inestable).
- Si el pipeline no es idempotente, guardas duplicados.
Arreglo típico: clave única por (sensor_id + timestamp_original + seq) o idempotency key; no redondear si no hace falta.
3.5 Caso 5: “La gráfica a veces va hacia atrás” (out-of-order)
Síntoma: aparecen puntos “tarde” con tiempos anteriores, y el panel se vuelve loco.
Lectura paso a paso:
- Detecta deltas negativos (t[n] < t[n-1]).
- Comprueba buffering o envíos en lote (batch).
- Confirma si el sistema ordena por llegada en vez de por observed_time.
Arreglo típico: ordenar por observed_time; si aceptas tardíos, versionar backfill o usar un buffer temporal antes de publicar.
3.6 Caso 6: “Los diarios no cuadran” (corte diario inconsistente)
Síntoma: tu lluvia diaria no coincide con otra red cercana y cada cierto tiempo el error “salta”.
Lectura paso a paso:
- Define: ¿tu día es 00–24 local o 00–24 UTC?
- Revisa si en algún sitio se aplica una definición distinta (ETL vs panel).
- Comprueba el efecto DST: si cortas en local, el día del cambio tiene 23h o 25h.
Arreglo típico: fijar dayDefinition y documentarla; recalcular derivados si cambias política.
4. Mini-checklist de “confirmación” (antes de tocar nada)
- ¿El desfase es fijo? (tz/doble conversión)
- ¿Solo falla en DST? (storage local)
- ¿Pasa tras gaps? (backfill)
- ¿Hay duplicados al minuto? (redondeo/retries)
- ¿Hay puntos fuera de orden? (out-of-order)
- ¿Agregación definida (start/end)? (desfase por convención)
5. Tabla de síntomas y causa probable (para resolver en 5 minutos)
| Síntoma | Causa probable | Qué mirar | Solución rápida |
|---|---|---|---|
| Shift fijo 1h/2h | Doble conversión/tz asumida | Pico radiación/UV, eventos ancla | UTC en storage, tz solo en UI |
| Solo en marzo/octubre | DST en storage | Huecos/duplicados en el salto | Normalizar UTC + zona IANA |
| Pico tras corte | Backfill/arrival-time | Gap previo + clustering llegada | Separar observed/ingest + flag |
| Duplicados exactos | Redondeo + reintentos | Precisión origen + retries | Idempotencia + no redondear |
| Puntos “tarde” | Out-of-order | Deltas negativos | Ordenar por observed_time |
| Diarios raros | Corte diario mezclado | dayDefinition | Unificar + recalcular derivados |
6. Errores típicos (para no caer otra vez)
- Guardar hora local en DB “porque es más cómodo”
- Usar timestamps naive (sin tz)
- Convertir a local en backend y otra vez en frontend
- Confundir acumulado con intensidad tras un gap
- No marcar ventanas incompletas (agregados engañosos)
7. Referencias
- Met Office
- WMO
- NOAA