¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Leer un archivo CSV con SQL

Después de esta lección: Puedo consultar un archivo CSV por su nombre y explicar qué tipos de dato adivina DuckDB.

Lección de 45 minSin comandos

Qué es consultar un archivo CSV

Leer un archivo CSV con SQL es usar el archivo como si fuera una tabla. En DuckDB escribes su nombre en la consulta y no hace falta cargarlo antes en ninguna base de datos.

Un servicio municipal de bicicletas exporta sus viajes a un archivo rides.csv. Con una sola línea de SQL puedes sumar los minutos de cada estación. En esta plataforma, el archivo se adjunta en el entorno de pruebas de DuckDB.

Al terminar esta lección

Nota

Puedo consultar un archivo CSV por su nombre y explicar qué tipos de dato adivina DuckDB.

Palabras clave

PalabraQué significaEjemplo
Archivo CSVun texto con un valor separado por comas en cada columna y una fila por línea
Cabecerala primera línea, con los nombres de las columnas
read_csvla función que lee un CSV como si fuera una tablaread_csv('rides.csv')
Tipo adivinadoel tipo de dato que DuckDB elige al mirar los valores
Entorno de pruebasla página donde adjuntas un archivo de datos y ejecutas SQL

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

read_csv convierte un archivo en una tabla

Un archivo CSV es texto. Cada línea es una fila y las comas separan los valores. La primera línea suele ser la cabecera, con los nombres de las columnas.

read_csv('rides.csv') lo convierte en una tabla. La forma corta es from 'rides.csv'. Después, todo lo que sabes de SQL sirve igual.

Ejemplo resuelto: el archivo, línea a línea

LíneaContenido de rides.csv
1 (cabecera)ride_id,station,started_on,minutes,paid_eur
21,Plaza Mayor,2026-04-01,12,1.50
32,Universidad,2026-04-01,25,3.00
43,Plaza Mayor,2026-04-02,8,1.00
54,Estación Norte,2026-04-02,31,4.50
65,Universidad,2026-04-03,14,1.50
76,Parque Central,2026-04-03,45,6.00

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Así se escribe la consulta sobre el archivo

Código: duckdb
-- En el entorno de pruebas, con rides.csv adjunto.
select station, count(*) as rides, sum(minutes) as total_minutes
from read_csv('rides.csv')
group by station
order by station;

Ejemplo resuelto: lo que devuelve sobre ese archivo

stationridestotal_minutes
Estación Norte131
Parque Central145
Plaza Mayor220
Universidad239

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

DuckDB adivina el tipo de cada columna

Un CSV es solo texto: no dice qué es un número y qué es una fecha. DuckDB mira los valores y elige el tipo que encaja, entero, decimal, fecha o texto.

Con describe ves lo que ha elegido. Hazlo antes de fiarte de una suma o de un filtro por fecha.

Así se ve el tipo adivinado

Código: duckdb
-- Qué tipo ha adivinado DuckDB para cada columna.
describe select * from read_csv('rides.csv');

Ejemplo resuelto: los tipos de rides.csv

column_namecolumn_typePor qué
ride_idBIGINTEnteros sin decimales
stationVARCHARTexto
started_onDATEFechas con forma 2026-04-01
minutesBIGINTEnteros sin decimales
paid_eurDOUBLENúmeros con decimales

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un error frecuente

Advertencia

Mucha gente cree que read_csv puede abrir cualquier carpeta o dirección web. Aquí solo lee el archivo de datos adjunto, por su nombre. No hay acceso a la red ni a otras carpetas, y es lo que mantiene el entorno seguro.

Qué archivos admite el entorno de pruebas

En el entorno de pruebas de DuckDB adjuntas un archivo de texto: CSV, TSV o líneas JSON, de hasta 64 KB. No admite Parquet.

Las lecciones y las tareas no llevan archivo de datos. Por eso sus bloques corren sobre una tabla construida con las mismas columnas y los mismos tipos que el archivo.

Pruébalo: la misma consulta sobre una tabla

Código: duckdb
-- La misma consulta, sobre una tabla construida como el archivo.
select station, count(*) as rides, sum(minutes) as total_minutes
from rides
group by station
order by station;
-- En el entorno de pruebas, from rides pasaría a ser from 'rides.csv'.
-- Cambia sum(minutes) por max(minutes) y pulsa Run.

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.