Motor CSV en servidor MySQL

Motor CSV en servidor MySQL

No creo que esta sea una pregunta de programación, así que la haré aquí:

Al leer el libro MySQL de alto rendimiento, leí sobre el motor CSV. El párrafo dice:

El motor CSV puede tratar archivos de valores separados por comas (CSV) como tablas, pero no admite índices en ellos. Este motor le permite copiar archivos dentro y fuera de la base de datos mientras el servidor está en ejecución. Si exporta un archivo CSV desde una hoja de cálculo y lo guarda en el directorio de datos del servidor MySQL, el servidor puede leerlo inmediatamente. De manera similar, si escribe datos en una tabla CSV, un programa externo puede leerlos de inmediato. Las tablas CSV son especialmente útiles como formato de intercambio de datos y para ciertos tipos de registros.

Lo que obtengo de este párrafo es que puedo copiar un archivo .CSV en el directorio de datos de la base de datos y debería mostrarse como una tabla que se pueda leer. Sin embargo, cada vez que copio un archivo .csv de prueba en el directorio, no aparece como una tabla. No puedo acceder a él.

También estoy usando MySQL 5.5.

¿Alguien sabe por qué esto no funciona o qué estoy haciendo mal?

Respuesta1

Opté por probar esto en mi servidor MySQL para ver cuál era el problema. Parece que necesita crear la tabla en MySQL (con el motor = csv especificado) para que la tabla se agregue adecuadamente a MySQL y realice un seguimiento de los metadatos del campo de la tabla. En mis pruebas, no pude hacer que MySQL conociera el archivo csv sin usar primero "crear tabla".

Ejemplo:

  1. Cree un nuevo csv llamado foo en este ejemplo, una columna llamada "i" para un número entero y "c" para un campo de carácter: CREATE TABLE foo (i int not null, c char(10) not null) engine=csv;
  2. foo.frm, foo.CSM, foo.CSV se crean en /var/lib/mysql/data/dbname, notará que foo.CSV es de cero bytes.
  3. Copie su csv existente (que coincida con el formato definido para la tabla) en foo.CSV:

    1,"FOOBAR"
    2,"FOOBAZ"
    3,"BARBAZ"
    
  4. En MySQL, seleccionar * de foo debería producir el siguiente resultado:

    mysql> select * from foo;
    +---+--------+
    | i | c      |
    +---+--------+
    | 1 | FOOBAR |
    | 2 | FOOBAZ |
    | 3 | BARBAZ |
    +---+--------+
    3 rows in set (0.00 sec)
    

información relacionada