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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Archivo CSV | un texto con un valor separado por comas en cada columna y una fila por línea | |
| Cabecera | la primera línea, con los nombres de las columnas | |
| read_csv | la función que lee un CSV como si fuera una tabla | read_csv('rides.csv') |
| Tipo adivinado | el tipo de dato que DuckDB elige al mirar los valores | |
| Entorno de pruebas | la 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ínea | Contenido de rides.csv |
|---|---|
| 1 (cabecera) | ride_id,station,started_on,minutes,paid_eur |
| 2 | 1,Plaza Mayor,2026-04-01,12,1.50 |
| 3 | 2,Universidad,2026-04-01,25,3.00 |
| 4 | 3,Plaza Mayor,2026-04-02,8,1.00 |
| 5 | 4,Estación Norte,2026-04-02,31,4.50 |
| 6 | 5,Universidad,2026-04-03,14,1.50 |
| 7 | 6,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
-- 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
| station | rides | total_minutes |
|---|---|---|
| Estación Norte | 1 | 31 |
| Parque Central | 1 | 45 |
| Plaza Mayor | 2 | 20 |
| Universidad | 2 | 39 |
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
-- Qué tipo ha adivinado DuckDB para cada columna.
describe select * from read_csv('rides.csv');Ejemplo resuelto: los tipos de rides.csv
| column_name | column_type | Por qué |
|---|---|---|
| ride_id | BIGINT | Enteros sin decimales |
| station | VARCHAR | Texto |
| started_on | DATE | Fechas con forma 2026-04-01 |
| minutes | BIGINT | Enteros sin decimales |
| paid_eur | DOUBLE | Nú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
-- 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.