Servidor disponible solo los jueves de 10:30 a 12:30 y los viernes de 10:00 a 13:00 (hora de Madrid); fuera de ese horario está apagado. Fuera del horario, usa la documentación local del material que te descargaste (el README.md de cada carpeta).
G214 · CUNEF
Inicio / tema3 / 03.05-paiseseuribor

Tema 3 · 5 · Ejercicios 4 y 5: tipos de datos (países) e importar el Euribor

Presentación del Tema 3: «Ejercicio 4» (países) y «Ejercicio 5», «Ejercicio 5 · paso a paso (II): cargar y comprobar» y «Ejercicio 5 · paso a paso (III): validar con una app (Streamlit)» (CSV del Euribor y validación con la app web). Duración: 15 minutos el ejercicio 4 y el 5, más unos 5 minutos para crear la máquina de la app del Euribor (el script lo hace todo). Coste: ninguno propio con la RDS y Adminer que ya tienes encendidos; la app corre en una máquina euribor (una t3.small, céntimos por hora, que se apaga sola a las 4 horas).

Etiquetas de lo que creas. La máquina euribor y su Security Group los crea gestionar-euribor.sh ya etiquetados (curso = G214, universidad = CUNEF, actividad = 03.05-paiseseuribor y script = gestionar-euribor.sh); eliminar los borra por esas etiquetas. Usas además tu RDS (03.01). Más detalle (cómo etiquetar con la CLI, cómo buscar y qué hacer en una emergencia): README principal, sección «Etiquetas».

Qué vas a hacer

Dos ejercicios de SQL sobre tu RDS. Parte A (ejercicio 4): crear la base paises, comprobar por qué ordenar un número guardado como texto da un orden incorrecto y arreglarlo cambiando el tipo de la columna. Parte B (ejercicio 5): crear la base banco, importar la serie mensual del Euribor desde un CSV con Adminer, contrastar cifras con SQL y validar visualmente los datos con una app Streamlit que corre en tu máquina EC2 euribor (la crea gestionar-euribor.sh).

Parte A: SQL en Adminer ──> RDS: base paises (tabla countries)
Parte B: euribor.csv ──(Import en Adminer)──> RDS: base banco, tabla euribor (381 filas)
                                                   ▲
                       EC2 «euribor» (Streamlit, puerto 8501) ──3306── gráfico fecha/valor

Qué se crea en AWS: una EC2 euribor (Amazon Linux 2023, t3.small), un Security Group (puertos 22 y 8501) y un bucket temporal con los ficheros de la app (app.py y requirements.txt), todo con ./gestionar-euribor.sh crear. Con --rds se añade la regla que deja a la máquina llegar a tu RDS. Se apaga sola a las 4 horas. Las bases paises y banco viven en tu RDS.

Qué contiene esta carpeta

Fichero Para qué sirve En qué paso se usa
ejercicios.txt SQL para copiar y pegar con el resultado esperado en comentarios: ejercicio 4 (países) y ejercicio 5 (banco, euribor, medias por año, máximo y reto) Pasos 1 a 6
euribor.csv Serie mensual del Euribor ya limpia: 381 líneas, sin cabecera, tres columnas (fecha, periodo, valor) Paso 3
app.py La app Streamlit (visor fecha / valor de una tabla SQL; solo lee). Copia de referencia del que lleva el script (./gestionar-euribor.sh extraer lo escribe) Paso 7
requirements.txt streamlit, pandas, SQLAlchemy, pymysql y psycopg2-binary (sin versión fija para streamlit: la máquina instala la última al crearse) Paso 7
README.md Esta guía Siempre

Antes de empezar

Cómo llevar los ficheros a donde toque

El SQL y el CSV se llevan a Adminer desde tu PC (copiar y pegar en SQL command, o el enlace Import de una tabla). La app del Euribor no se instala ni se copia: la crea gestionar-euribor.sh, que lleva app.py dentro (desde CloudShell, con la carpeta de esta actividad descomprimida).

Paso a paso

Parte A. Ejercicio 4: países

Paso 1. Crear la base y la tabla. Pega en SQL command el bloque Ejercicio 4 de ejercicios.txt (borra y recrea la base paises para poder repetir el ejercicio; crea countries con 5 países). Ejecútalo por partes si quieres ver cada resultado.

Qué verás: SELECT country_id, country_name FROM countries WHERE region_id = 1 ORDER BY country_name; devuelve Greece (7) y Spain (1).

Paso 2. Orden por población: el problema y el arreglo. country_population está guardada como text: al ordenarla, Austria (9.1) sale la última aunque sea la menor (se ordena como texto). El arreglo es pasar la columna a número (con NOT NULL: sin él, la columna lo pierde) con el ALTER TABLE ... MODIFY country_population DECIMAL(6,2) NOT NULL; del fichero. Repite el SELECT ... ORDER BY country_population.

Qué verás: ahora Austria sale la primera: Austria 9.10, Greece 10.30, Spain 48.60, Italy 59.00, France 68.40.

Parte B. Ejercicio 5: CSV del Euribor

Paso 3. Crear banco.euribor e importar euribor.csv.

  1. Crea la base banco y la tabla euribor con el SQL de la presentación (o el bloque Ejercicio 5 de ejercicios.txt, que borra y recrea la base banco: se puede repetir).
  2. Importa: en Adminer, elige la base banco > la tabla euribor > select data > el enlace Import (está al pie de la página, plegado) > elige euribor.csv > separador CSV, > Import. No es el Import del menú de la izquierda: ese es para ficheros .sql.
  3. El fichero ya está preparado: 381 líneas, sin cabecera, separador coma, punto decimal, fechas AAAA-MM-DD y cada campo entre comillas dobles, con las tres columnas en el orden de la tabla (fecha, periodo, valor). Las comillas no dan problema. Si descargas tú la serie del BCE, tendrás que limpiarla como explica la diapositiva; euribor.csv te sirve de respaldo o para contrastar el formato.

Qué verás: 381 rows have been imported. El número de filas de la tabla debe coincidir con las líneas del fichero, 381 (si sale una más, has importado una cabecera). Se comprueba con SELECT COUNT(*) FROM euribor;.

Paso 4. Contrastar cifras. Usa las sentencias del bloque Ejercicio 5 de ejercicios.txt.

Qué verás: mínimo -0.5047, máximo 8.0200 (el 1995-03-31 en este fichero, que usa el último día de cada mes); media por año (entre otras): 2005 2.3342, 2021 -0.4906, 2022 1.0877 y 2023 3.8628 (son medias anuales, no máximos); máximo histórico 1995-03-31 8.0200. Reto opcional (año con la subida más fuerte, diferencia de medias anuales): 2023, media 3.8628, subida 2.7751.

Si prefieres descargar tú la serie del BCE: https://data-api.ecb.europa.eu/service/data/FM/M.U2.EUR.RT.MM.EURIBOR1YD_.HSTA?format=csvdata devuelve un CSV de 393 filas con una sola cabecera de 40 columnas (no varias líneas de metadatos); de él solo te interesan TIME_PERIOD (con formato 1994-01: tienes que añadirle el día para tener una fecha; euribor.csv usa el último día del mes, 1994-01-31, pero también vale el día 1, 1994-01-01: las medias por año salen iguales y solo cambia la fecha del máximo, 1995-03-31 o 1995-03-01) y OBS_VALUE, y tienes que construir la columna periodo. Ojo: la serie actual tiene 393 meses (hasta 2026-09), no 381, así que con tu propio CSV el COUNT(*) será otro; los 381 y las cifras de arriba son los de euribor.csv.

Paso 5. Si te equivocas al importar. Si importas dos veces, tendrás las filas duplicadas (la tabla no tiene clave primaria). Vacía la tabla con TRUNCATE TABLE euribor; e importa una sola vez.

Paso 6 (opcional). Ficheros grandes. euribor.csv pesa 12 KB y cabe siempre. Si Adminer rechaza el fichero, mira Maximum allowed file size en «Errores frecuentes».

Paso 7. Validar con la app Streamlit en tu EC2. En CloudShell, dentro de esta carpeta (con el nombre de tu RDS; tarda unos 5 minutos):

./gestionar-euribor.sh crear --rds nombre-de-tu-rds

Qué verás: el recuadro Tu app del Euribor con http://IP:8501; la app puede tardar 1-2 minutos más en responder tras crear (./gestionar-euribor.sh estado te dice HTTP 200 cuando ya está lista). Si la máquina se apagó (a las 4 horas), ./gestionar-euribor.sh crear la arranca y renueva el plazo (la IP cambia: usa la nueva).

Paso 8. Usar la app.

  1. En la barra lateral, Conexión: Tipo de BD = MySQL / MariaDB; Host = tu endpoint (sustituye el texto <Tu AWS Endpoint>); Puerto 3306; Usuario admin; Contraseña. Pulsa Conectar. Debe salir Conexión OK (modo listado). Elige la base de datos abajo.
  2. Elige la base en Base de datos (si existe banco, sale ya seleccionada) y pulsa Usar esta base. Debe salir Conectado a la base banco.
  3. Elige la Tabla (si existe euribor, sale seleccionada). La tabla tiene que tener columnas fecha y valor (da igual mayúsculas o minúsculas).
  4. Aparecen el filtro de rango de fechas, la vista previa (primeras 50 filas), el gráfico, los estadísticos y el botón de descarga del CSV. Si el gráfico se dibuja, los tipos de datos de tu tabla son correctos. Refrescar datos vuelve a leer la tabla.

Avisos de la app: La tabla seleccionada no contiene columnas requeridas 'Fecha' y 'Valor' (la tabla no tiene esas columnas), No hay tablas en esta base/schema. (has elegido otra base: elige banco y pulsa Usar esta base), No se pudieron obtener fechas mín/máx (tabla vacía o fechas mal cargadas) y No se pudo conectar con el detalle del error.

Si abres la app antes de crear banco o de importar el CSV y luego no aparecen la base o la tabla, la app ha guardado en memoria las listas antiguas: en la app abre el menú ☰ (arriba a la derecha), elige Clear cache, recarga la página y conecta de nuevo.

Errores frecuentes

Síntoma Causa Solución
Error 1146 Table '...' doesn't exist al pegar el ejercicio 4 o 5 Falta CREATE DATABASE/USE o se pegó sin ; Usa los bloques de ejercicios.txt (llevan CREATE DATABASE, USE y ;)
Error al pegar un bloque desde el PowerPoint PowerPoint mete caracteres no imprimibles Copia el bloque de ejercicios.txt
euribor tiene más filas que líneas tiene el CSV Se importó una cabecera, o se importó dos veces TRUNCATE TABLE euribor; e importa una sola vez un CSV sin cabecera
Importaste con el Import del menú izquierdo y falla Ese Import es para ficheros .sql Usa el enlace Import al pie de select data de la tabla
Unable to upload a file. Maximum allowed file size is 2MB. Adminer con los límites de PHP por defecto Ver 03.02 (con los scripts actuales no debería pasar para un fichero de 12 KB)
No se pudo conectar con un error largo debajo La máquina se creó sin --rds (no puede llegar a la RDS), endpoint mal escrito o contraseña incorrecta ./gestionar-euribor.sh crear --rds NOMBRE (añade el acceso sin duplicar nada) y revisa el endpoint
http://IP:8501 no abre La máquina está parada o instalando, o tu red bloquea el puerto 8501 o las direcciones IP directas ./gestionar-euribor.sh estado (si está parada, crear la arranca); espera 1-2 minutos; prueba desde otra red (por ejemplo, el móvil como punto de acceso)
banco o euribor no aparecen en las listas de la app La app guarda en memoria las listas antiguas (creaste la base o la tabla después de abrirla) Menú ☰ > Clear cache, recarga la página y conecta de nuevo
No hay tablas en esta base/schema. Has elegido otra base Elige banco y pulsa Usar esta base
La tabla seleccionada no contiene columnas requeridas 'Fecha' y 'Valor' La tabla no tiene esas columnas Revisa la tabla euribor (columnas fecha, periodo, valor)
No se pudieron obtener fechas mín/máx La tabla está vacía o las fechas están mal cargadas Reimporta el CSV (paso 3)

Esta app sí funciona con una RDS MariaDB 11.x (se conecta cifrada), a diferencia de la web estudiantes.php de 03.04.

Limpieza

La app del Euribor corre en su propia máquina, que se borra con: ./gestionar-euribor.sh eliminar (borra la máquina, el Security Group, el acceso a tu RDS y los ficheros temporales; es repetible). Si no la borras, se apaga sola a las 4 horas, pero no se elimina.

Las bases paises y banco viven en tu RDS y se van con ella. La RDS y Adminer no se borran aquí: Adminer en la limpieza de 03.02 y la RDS en la de 03.01, después de la última actividad que las use (03.09).

Cómo sabes que has terminado

Anterior: 03.04 · Web app y ejercicio 3 · Siguiente: 03.06 · ACID y rigidez de esquema