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
euribory su Security Group los creagestionar-euribor.shya etiquetados (curso=G214,universidad=CUNEF,actividad=03.05-paiseseuriboryscript=gestionar-euribor.sh);eliminarlos 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
- [ ] RDS MariaDB
Available(03.01) y Adminer conectado (03.02). - [ ] Los ficheros
.txty.csvestán en tu PC; ábrelos con un editor de texto, no con Excel (Excel pierde formatos). - [ ] (Para los pasos 7 y 8) Tu RDS (la de 03.01); en el paso 7 crearás la máquina con
--rds nombre-de-tu-rds. No hace falta que la RDS sea pública ni abrir su Security Group a tu IP: el script deja pasar solo a la máquina. - Variables de entorno: ninguna. Los datos de conexión se escriben en la barra lateral de la app.
- La parte A es independiente de la actividad 03.03, pero su ejercicio 2B (
JOIN) usa la basepaisesque se crea aquí: si quieres hacerlo, vuelve a él después.
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.
- Crea la base
bancoy la tablaeuriborcon el SQL de la presentación (o el bloqueEjercicio 5deejercicios.txt, que borra y recrea la basebanco: se puede repetir). - Importa: en Adminer, elige la base
banco> la tablaeuribor> select data > el enlace Import (está al pie de la página, plegado) > eligeeuribor.csv> separadorCSV,> Import. No es el Import del menú de la izquierda: ese es para ficheros.sql. - El fichero ya está preparado: 381 líneas, sin cabecera, separador coma, punto decimal, fechas
AAAA-MM-DDy 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.csvte 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.
- En la barra lateral, Conexión:
Tipo de BD=MySQL / MariaDB; Host = tu endpoint (sustituye el texto<Tu AWS Endpoint>); Puerto3306; Usuarioadmin; Contraseña. Pulsa Conectar. Debe salirConexión OK (modo listado). Elige la base de datos abajo. - Elige la base en Base de datos (si existe
banco, sale ya seleccionada) y pulsa Usar esta base. Debe salirConectado a la base banco. - Elige la Tabla (si existe
euribor, sale seleccionada). La tabla tiene que tener columnasfechayvalor(da igual mayúsculas o minúsculas). - 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
- [ ] Ejercicio 4: tras cambiar el tipo de
country_population, el orden por población es Austria, Greece, Spain, Italy, France. - [ ]
banco.euribortiene 381 filas coneuribor.csv(mínimo -0.5047, máximo 8.0200, media de 2023 = 3.8628). - [ ] La app del Euribor (
app.py, en tu máquinaeuribor) conecta, eligebanco.euribory dibuja el gráfico. - [ ] Has ejecutado
./gestionar-euribor.sh eliminar(o sabes que la máquina se apaga sola a las 4 horas y la borrarás al terminar).
Anterior: 03.04 · Web app y ejercicio 3 · Siguiente: 03.06 · ACID y rigidez de esquema