La federación publica los datos de cada partido, pero con identificadores que cambian, textos que se rompen y un historial incompleto. Así se convierten en algo en lo que se pueda confiar.
El identificador de jugador de la FEB no es estable entre equipos ni entre temporadas, y a veces ni dentro de la misma: se han visto jugadores a los que se les reemitió el id a mitad de temporada, y el anterior dejó de responder. El de equipo identifica a un club en una temporada (a veces en una competición).
El nombre de la competición puede llegar corrupto (por ejemplo «COPA ESPAÑA - Play Off - 1/8 Final - 2115» en vez de «COPA ESPAÑA»). Lo único fiable es el identificador numérico de competición.
En la temporada actual el minuto a minuto llega en orden cronológico inverso: el primer elemento de la lista es el último evento del partido.
Las actas de 2021-22 y 2022-23 no traen minutos, y en 2023-24 solo la mitad. Faltan posiciones de muchos jugadores antiguos.
La regla de Bronze es una sola: aterriza, no transforma. Guarda el formato nativo de la fuente (JSON si es JSON, HTML si es HTML) sin convertirlo ni decidir qué vale la pena. Los partidos terminados no se vuelven a pedir; los que la fuente aún marca «en juego» se reintentan, para no quedarnos con una foto a medias para siempre. Y la ingesta masiva de histórico se hace con un ritmo educado de peticiones.
Se encadenan con llamadas directas, no con crons separados:
Semi-manuales a propósito: hay rondas (playoffs, fase de grupos de la Copa) que el calendario normal no lista.
Por qué Delta Lake y no JSON plano o Parquet suelto. Tres razones, por orden de peso: (1) reutiliza la validación de contratos que el proyecto ya tenía para Delta; (2) permite evolucionar el esquema de forma explícita y auditable; (3) la sobrescritura transaccional por partición encaja con cómo se reprocesa: un dato de identidad mejora sin que Bronze cambie.
Los reprocesos miran la «obsolescencia», no la existencia. Un reproceso de eventos no comprueba «¿existe ya el fichero?», sino «¿han mejorado desde entonces las plantillas y las identidades de las que depende?». La calidad de resolución de un partido mejora con el tiempo aunque su JSON en Bronze no cambie ni un byte; un reproceso que solo mirara la existencia congelaría para siempre la calidad del día en que se generó.
La clave de identidad es nombre completo + fecha de nacimiento: lo único que no cambia. Con ella se une al mismo jugador entre equipos y temporadas, y en los ficheros que consume la web se fija además un identificador estable. Casos reales que han dado forma a la lógica (cada uno tiene su prueba de regresión con el caso que lo motivó):
Dos hermanos con el mismo apellido compuesto en la misma plantilla no se distinguen por apellido. Se desempata con la inicial del minuto a minuto, comparada con el nombre de pila real, no con cualquier palabra del nombre: un segundo apellido que empezaba por la letra correcta ya causó una atribución cruzada entre dos jugadores de equipos distintos.
Un traspaso o una reemisión de id no necesita etiquetado manual. Un flujo busca nombres del minuto a minuto sin resolver, deduce el id vigente (unánime, o un corte limpio de reemisión) y trae su ficha. Una lista manual de excepciones existe como último recurso, y hoy está vacía.
Resultado: más del 99 % de los eventos de una temporada se asignan a un jugador real. El resto son huecos de cobertura documentados caso a caso, no errores de lógica.
El minuto a minuto no es una verdad: es una fuente de la que se derivan cifras. Así que se recuentan y se comparan con el acta oficial. Cada partido pasa por un punto de curación que recuenta 16 estadísticas (de equipo y de jugador) desde los eventos y las confronta con el acta certificada, con un porcentaje de acierto por campo para cada corrida.
Las actas de 2021-22 a 2023-24 no traen minutos fiables, pero el minuto a minuto tiene todos los cambios. Se derivan, no se imputan estadísticamente: es una suma exacta de tramos. Se calculan en el propio repositorio de ingesta, en una tabla Silver, y llegan a Gold marcados como derivados.
para cada partido:
para cada jugador:
minutos = suma de los tramos en que estuvo en pista
(de cada "entra" al siguiente "sale", o al final del cuarto)
marca el dato como derivado; nunca pisa un minuto que el acta sí traigaValidación: contra las actas que sí traen minutos (2024-25: 656 jugadores de 30 partidos; 2023-24: 254), el error mediano es de 0 segundos, el percentil 90 está en unos 20 y el peor caso es de 49. Y los diez jugadores en pista suman siempre exactamente diez veces la duración del partido.
Desde Silver, los agregados que necesita la web (clasificaciones, perfiles de jugador, quintetos ideales, familias de jugadores…) se calculan con una herramienta de terminal y se escriben como ficheros estáticos: el segundo de los dos Gold, el de la web. Cómo se hace, y cómo se convierten además en tarjetas y vídeos, está en el siguiente artículo.
Siguiente: El contenido: de las tablas a la tarjeta y al vídeo →