EXPLICACIÓN Y EJEMPLOS DEL MOTOR DE ALMACENAMIENTO CONNECT DE MARIADB

El motor de almacenamiento CONNECT de MariaDB permite acceder a datos externos (archivos, ODBC, otros servidores, XML, etc.) como si fueran tablas locales.

Explicación y ejemplo

  1. . Formato del archivo CSV: Crear un fichero que sea "personas.csv", con el siguiente contenido, guardarlo en "/tmp/" o en cualquier ruta accesible por el usuario de MariaDB:

    //Contenido de personas.csv
    //Separador: coma (,)
    //Primera fila: cabecera (nombres de columnas)
    //Campo fecha en formato DD/MM/YYYY
    id,nombre,edad,ciudad,fecha_nacimiento
    1,Juan Pérez,28,Madrid,15/03/1998
    2,María López,34,Barcelona,22/07/1990
    3,Carlos Ruiz,19,Valencia,10/11/2006
    4,Ana García,45,Sevilla,05/05/1981
    
  2. Creación de la tabla con CONNECT:

    CREATE TABLE personas (
    id INT,
    nombre VARCHAR(100),
    edadSMALLINT,
    ciudad VARCHAR(50),
    fecha_nacimiento DATE
    ) 
    ENGINE=CONNECT 
    TABLE_TYPE=CSV 
    FILE_NAME='/tmp/personas.csv' 
    HEADER=1 
    SEP_CHAR=',' 
    QUOTED=1;
    
    • ENGINE=CONNECT → Usa el motor CONNECT
    • TABLE_TYPE=CSV → Tipo de archivo CSV.
    • FILE_NAME='/ruta/completa/people.csv' → Ruta absoluta al archivo (importante).
    • HEADER=1 → La primera fila es cabecera (se ignora al leer).
    • SEP_CHAR=',' → Separador de campos (puedes poner ';' si se usa punto y coma).
    • QUOTED=1 → Los campos pueden ir entre comillas.
  3. Consultas de ejemplo:

    -- Ver todos los registros
    SELECT * FROM personas;
    
    -- Consultas filtradas
    SELECT nombre, edad, ciudad 
    FROM personas 
    WHERE edad >= 30;
    
    -- Ordenar por edad
    SELECT * FROM personas 
    ORDER BY edad DESC;
    
    -- Contar personas por ciudad
    SELECT ciudad, COUNT(*) as total 
    FROM personas 
    GROUP BY ciudad;
    
    -- Insertar un nuevo registro (se añade al final del CSV)
    INSERT INTO personas (id, nombre, edad, ciudad, fecha_nacimiento)
    VALUES (5, 'Laura Martínez', 31, 'Bilbao', '12/09/1994');
    
    -- Actualizar (CONNECT permite UPDATE en CSV)
    UPDATE personas 
    SET edad = 29 
    WHERE id = 1;
    

Otras consideraciones

  • Si se quiere que MariaDB detecte automáticamente las columnas (sin definirlas manualmente):

    CREATE TABLE personas_auto 
    ENGINE=CONNECT 
    TABLE_TYPE=CSV 
    FILE_NAME='/tmp/people.csv' 
    HEADER=1;
    
  • Indicar el separador:

    SEP_CHAR=';' //el que se use en el csv
    
  • Si el CSV no tiene cabecera:

    HEADER=0;
    
  • Como cambiar el fichero CSV

    -- 1. Definir la ruta del archivo subido por el usuario
    SET @ruta_archivo = '/ruta/segura/uploads/usuario_12345.csv';
    
    -- 2. Crear la sentencia dinámica con detección automática
    SET @sql = CONCAT(
    "CREATE OR REPLACE TABLE csv_upload ",
    "ENGINE=CONNECT ",
    "TABLE_TYPE=CSV ",
    "FILE_NAME='", @ruta_archivo, "' ",
    "HEADER=1 ",
    "SEP_CHAR=',' ",
    "QUOTED=1;"
    );
    
    -- 3. Ejecutar la creación de la tabla
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;