CodeGym /Cursos /SQL SELF /Preparación de tablas para cargar datos desde CSV

Preparación de tablas para cargar datos desde CSV

SQL SELF
Nivel 23, Lección 2
Disponible

Vamos a ponernos manos a la obra y preparar las tablas para la carga masiva de datos desde archivos CSV. Si piensas: "¿Pero para qué hay que preparar la tabla? ¿Qué tiene de complicado?", todavía te queda mucho por descubrir del mundo real. Ningún archivo es "perfecto". Siempre hay alguna pega — ya sean duplicados, espacios de más, errores en los tipos de datos o simplemente una estructura que no cuadra.

Vamos a ver cómo preparar bien la base para que el archivo CSV se cargue sin dramas.

Antes de cargar un archivo CSV, decide cómo se van a guardar los datos en la base. O sea, primero hay que crear una tabla con la estructura adecuada.

Ejemplo: carga de datos de estudiantes

Supón que tienes un archivo CSV students.csv con info sobre estudiantes. Su contenido se ve así:

id,name,age,email,major
1,Alex,20,alex@example.com,Computer Science
2,Maria,21,maria@example.com,Mathematics
3,Otto,19,otto@example.com,Physics

Con esto, creamos la tabla:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,       -- Identificador único del estudiante
    name VARCHAR(100) NOT NULL,  -- Nombre del estudiante (cadena de hasta 100 caracteres)
    age INT CHECK (age > 0),     -- Edad del estudiante (debe ser mayor que 0)
    email VARCHAR(100) UNIQUE,   -- Email único
    major VARCHAR(100)           -- Especialidad principal
);
  • id SERIAL PRIMARY KEY: Añadimos clave primaria para identificar filas de forma única. Si tu archivo CSV ya tiene identificadores únicos, usa la columna id del archivo.
  • name VARCHAR(100) NOT NULL: El nombre del estudiante debe estar sí o sí, y el largo máximo es 100 caracteres.
  • age INT CHECK (age > 0): La edad debe ser un número, y ponemos un check para que siempre sea mayor que 0.
  • email VARCHAR(100) UNIQUE: El email tiene que ser único, para evitar registros duplicados.
  • major VARCHAR(100): Indica la especialidad principal del estudiante. Aquí no hay restricciones.

Tus tablas tienen que estar bien pensadas para que encajen con tus datos y a la vez te protejan de datos incorrectos. Así reduces los errores al cargar.

Comprobación de datos antes de cargar

Los archivos CSV suelen traer sorpresas. Antes de cargar los datos, asegúrate de que encajan con la estructura de la tabla.

¿Cómo comprobar los datos?

  1. Coincidencia de columnas
    Asegúrate de que el número de columnas en el CSV coincide con el de la tabla. Por ejemplo, si la tabla tiene 5 columnas y el CSV tiene 6, la carga fallará.

  2. Tipos de datos
    Comprueba que los datos de cada columna son del tipo esperado. Por ejemplo, en la columna age solo deberían ir números enteros.

Herramientas para validar

Excel o Google Sheets. Abre el archivo en un editor de hojas de cálculo y asegúrate de que no hay filas vacías ni celdas con datos incorrectos.

Python. Usa la librería pandas para comprobar los tipos de datos:

import pandas as pd

# Leemos el CSV
df = pd.read_csv('students.csv')

# Comprobamos los datos
print(df.dtypes)  # Muestra los tipos de datos de cada columna
print(df.isnull().sum())  # Comprueba valores vacíos

Limpieza de datos antes de cargar

Normalmente los datos que vienen de fuera necesitan limpieza. Si no, te arriesgas a tener errores al cargar.

Problemas típicos con archivos CSV

Filas o columnas vacías
Si falta un valor en una columna obligatoria (NOT NULL), dará error.

Ejemplo de datos incorrectos:

id,name,age,email,major
1,Alex,20,alexey@example.com,Computer Science
2,Maria,,maria@example.com,Mathematics

Solución: Cambia los valores vacíos por algo válido. Por ejemplo, pon NULL si falta age.

Espacios de más
Los espacios al principio o al final pueden dar problemas. Por ejemplo, "Alex" y "Alex" se consideran distintos.

Solución en Python: quita los espacios de más.

df = df.apply(lambda x: x.str.strip() if x.dtype == "object" else x)

Caracteres incorrectos o codificación
Si el archivo tiene caracteres especiales que no van con la base de datos, la carga puede fallar.

Ejemplo: Usa la app iconv para cambiar la codificación:

iconv -f WINDOWS-1251 -t UTF-8 students.csv > students_utf8.csv

Limpieza de datos: ejemplo con Python

import pandas as pd

# Leemos el archivo
df = pd.read_csv('students.csv')

# Limpiamos los datos
df['name'] = df['name'].str.strip()  # Quitamos espacios
df['email'] = df['email'].str.lower()  # Pasamos el email a minúsculas
df['age'] = df['age'].fillna(0)  # Rellenamos valores vacíos de edad
df['age'] = df['age'].astype(int)  # Convertimos edad a entero

# Guardamos los cambios en un archivo nuevo
df.to_csv('cleaned_students.csv', index=False)

Revisa siempre los datos antes de cargar. Recuerda: un buen programador se ahorra tiempo detectando los problemas antes de que exploten.

Checklist útil para preparar tablas y datos

Antes de empezar con el CSV, revisa:

  • La estructura de la tabla encaja con los datos (columnas, tipos de datos, restricciones).
  • El archivo CSV no tiene filas vacías, espacios de más ni caracteres incorrectos.
  • La codificación del archivo es compatible con PostgreSQL (lo mejor es usar UTF-8).
  • Usas herramientas para analizar y limpiar los datos (por ejemplo, Python, Excel).

¡Ahora ya puedes cargar datos desde CSV! Pero antes de hacerlo, asegúrate de que tu tabla está bien estructurada y los datos limpios. En la próxima lección seguimos con el proceso de carga en PostgreSQL, incluyendo cómo manejar errores y conflictos.

2
Tarea
SQL SELF, nivel 23, lección 2
Bloqueada
Creación de una tabla para cargar datos
Creación de una tabla para cargar datos
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION