CSV a SQLite

Convertir un CSV, o una tabla en un Excel, es realmente sencillo y rápido de convertir en SQLite; y en consecuente en SQL. En el siguiente tutorial voy a enseñar como lograrlo usando las propias herramientas nativas de esta fantástica base de datos, sin software externo o de pago.

En el ejemplo voy a usar un CSV con 50 datos ficticios de empleados. Contiene id, nombre, apellidos y salario. La puedes descargar aquí.

Abrimos el terminal y creamos una base de datos vacía, con el nombre empleados.

sqlite3 empleados.sqlite

Nos abrirá la Shell de SQLite donde podremos ejecutar código SQL o comandos de la base de datos.

Activamos el modo CSV.

.mode csv

Creamos una tabla que encaje con los 4 campos del CSV. Todos los campos deben ser de tipo TEXT.

CREATE TABLE empleados (
  id TEXT,
  nombre TEXT,
  apellidos TEXT,
  salario TEXT
);

Importamos el archivo empleados.csv dentro de la tabla empleados.

.import empleados.csv empleados

Ahora ya podemos cambiar los tipos que necesitemos. Como el id sea una PRIMARY KEY y salario que sea de tipo INTEGER.

No existe una implementación en SQLite que te permita cambiar los tipos de las columnas, por lo que debemos realizar algunos pasos intermedios.

-- Desactivamos las limitaciones de las claves foráneas
PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
-- Renombramos la tabla a 'empleados_viejos'
ALTER TABLE empleados RENAME TO empleados_viejos;
-- Creamos la tabla definitiva
CREATE TABLE empleados
(
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  nombre TEXT NOT NULL,
  apellidos TEXT NOT NULL,
  salario INTEGER NOT NULL
);
-- Insertamos todo el contenido de 'empleados_viejos' a 'empleados'
INSERT INTO empleados (id, nombre, apellidos, salario)
SELECT id, nombre, apellidos, salario
FROM empleados_viejos;
-- Borramos la anterior
DROP TABLE empleados_viejos;
-- Terminaos
COMMIT;
-- Habilitamos las claves foráneas
PRAGMA foreign_keys=on;

Puedes revisar que ha funcionado con cualquier sentencia SQL.

¿Todos los nombres y apellidos de los empleados?

SELECT nombre, apellidos FROM empleados;

¿Quíén es el empleado con el salario más alto?

SELECT nombre, apellidos, salario FROM empleados ORDER BY "salario" ASC LIMIT 1, 1;

Para salir.

.quit

Espero que os sea de ayuda.

SQL