Mecanismo CSV no servidor MySQL

Mecanismo CSV no servidor MySQL

Eu não acho que esta seja uma questão de programação, então vou perguntar aqui -

Lendo o livro mysql de alto desempenho, li sobre o mecanismo CSV. O parágrafo diz:

O mecanismo CSV pode tratar arquivos de valores separados por vírgula (CSV) como tabela, mas não oferece suporte a índices neles. Este mecanismo permite copiar arquivos para dentro e para fora do banco de dados enquanto o servidor está em execução. Se você exportar um arquivo CSV de uma planilha e salvá-lo no diretório de dados do servidor MySQL, o servidor poderá lê-lo imediatamente. Da mesma forma, se você gravar dados em uma tabela CSV, um programa externo poderá lê-los imediatamente. As tabelas CSV são especialmente úteis como formato de intercâmbio de dados e para certos tipos de registro.

O que entendo deste parágrafo é que posso copiar um arquivo .CSV para o diretório de dados do banco de dados e ele deve aparecer como uma tabela que pode ser lida. Porém, sempre que copio um arquivo .csv de teste para o diretório, ele não aparece como uma tabela. Não consigo acessá-lo.

Estou usando MySQL 5.5 também

Alguém sabe por que isso não está funcionando ou o que estou fazendo de errado?

Responder1

Optei por testar isso no meu servidor MySQL para ver qual era o problema. Parece que você precisa criar a tabela no MySQL (com engine=csv especificado) para que a tabela seja adicionada apropriadamente ao MySQL e acompanhe os metadados dos campos da tabela. Em meus testes, não consegui fazer o MySQL aprender sobre o arquivo csv sem primeiro usar "criar tabela".

Exemplo:

  1. Crie um novo csv chamado foo neste exemplo, uma coluna chamada "i" para um número inteiro e "c" para um campo de caractere: CREATE TABLE foo (i int not null, c char(10) not null) engine=csv;
  2. foo.frm, foo.CSM, foo.CSV são criados em /var/lib/mysql/data/dbname, você notará que foo.CSV tem byte zero.
  3. Copie seu csv existente (que corresponde ao formato definido para a tabela) em foo.CSV:

    1,"FOOBAR"
    2,"FOOBAZ"
    3,"BARBAZ"
    
  4. No mysql, select * from foo deve produzir o seguinte resultado:

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

informação relacionada