É possível incluir os cabeçalhos de alguma forma ao usar o MySQL INTO OUTFILE
?
mysql
into-outfile
Brett
fonte
fonte
ORDER BY
naSELECT
cláusula. A linha de cabeçalho pode estar em qualquer lugar no arquivo gerado, dependendo do pedido.A solução fornecida por Joe Steanelli funciona, mas fazer uma lista de colunas é inconveniente quando dezenas ou centenas de colunas estão envolvidas. Veja como obter a lista da tabela coluna my_table em my_schema .
Agora você pode copiar e colar a linha resultante como primeira instrução no método de Joe.
fonte
ORDER BY ORDINAL_POSITION
cuida dissoGROUP_CONCAT(CONCAT('"',COLUMN_NAME,'"') order BY ORDINAL_POSITION)
Para a seleção complexa com ORDER BY, eu uso o seguinte:
fonte
Você pode usar a declaração preparada com a resposta de Lucek e exportar dinamicamente a tabela com o nome das colunas em CSV:
Obrigado, lucek.
fonte
Isso permitirá que você tenha colunas ordenadas e / ou um limite
fonte
Query OK, 100 rows affected (14.72 sec)
Segundo passe com o seuQuery OK, 101 rows affected (0.00 sec)
Eu simplesmente faço 2 consultas, primeiro para obter a saída da consulta (limite 1) com nomes de coluna (sem hardcode, sem problemas com associações, ordenar por, nomes de colunas personalizados, etc) e, em segundo lugar, para fazer a própria consulta e combinar arquivos em um CSV Arquivo:
fonte
Eu enfrentei um problema semelhante ao executar a consulta mysql em grandes tabelas no NodeJS. A abordagem que segui para incluir cabeçalhos em meu arquivo CSV é a seguinte
Use a consulta OUTFILE para preparar o arquivo sem cabeçalhos
Buscar cabeçalhos de coluna para a tabela usada no ponto 1
Anexe os cabeçalhos das colunas ao arquivo criado na etapa 1 usando o pacote npm prepend -file
A execução de cada etapa foi controlada por meio de promessas em NodeJS.
fonte
Este é um cheat alternativo se você estiver familiarizado com Python ou R, e sua tabela cabe na memória.
Importe a tabela SQL para Python ou R e, em seguida, exporte de lá como um CSV e você obterá os nomes das colunas, bem como os dados.
Veja como faço isso usando R, requer a biblioteca RMySQL:
É uma espécie de trapaça, mas descobri que essa era uma solução rápida quando meu número de colunas era muito longo para usar o método concat acima. Nota: R adicionará uma coluna 'row.names' no início do CSV, então você vai querer descartá-la se precisar contar com o CSV para recriar a tabela.
fonte
Portanto, se todas as colunas em
my_table
são um tipo de dados de caractere , podemos combinar as principais respostas (por Joe, matt e evilguc) juntas, para obter o cabeçalho adicionado automaticamente em uma consulta SQL 'simples', por exemploonde as últimas linhas tornam a saída csv.
Observe que isso pode ser lento se
my_table
for muito grande.fonte
Acho que se você usar um UNION vai funcionar:
Não conheço uma maneira de especificar os cabeçalhos com a sintaxe INTO OUTFILE diretamente.
fonte
Na verdade, você pode fazer isso funcionar mesmo com um ORDER BY.
Só precisa de alguns truques na ordem por instrução - usamos uma instrução case e substituímos o valor do cabeçalho por algum outro valor que é garantido para classificar primeiro na lista (obviamente, isso depende do tipo de campo e se você está classificando ASC ou DESC)
Digamos que você tenha três campos, nome (varchar), is_active (bool), date_something_happens (date), e deseja classificar os dois segundos em ordem decrescente:
fonte
Uma vez que a funcionalidade de 'incluir-cabeçalhos' ainda não parece estar embutida, e a maioria das "soluções" aqui precisam digitar os nomes das colunas manualmente e / ou nem mesmo levar as junções em consideração, eu recomendo contornar o problema .
A melhor alternativa que encontrei até agora é usar uma ferramenta decente (eu uso o HeidiSQL ).
Coloque sua solicitação, selecione a grade, basta clicar com o botão direito e exportar para um arquivo. Ele tem todas as opções necessárias para uma exportação limpa, e deve atender à maioria das necessidades.
Na mesma ideia, a abordagem do user3037511 funciona bem e pode ser automatizada facilmente .
Basta iniciar sua solicitação com alguma linha de comando para obter seus cabeçalhos. Você pode obter os dados com um SELECT INTO OUTFILE ... ou executando sua consulta sem limite, à sua escolha.
Observe que o redirecionamento de saída para um arquivo funciona perfeitamente no Linux E no Windows.
Isso me faz querer destacar que 80% das vezes, quando eu quero usar SELECT FROM INFILE ou SELECT INTO OUTFILE, acabo usando outra coisa devido a algumas limitações (aqui, a ausência de 'opções de cabeçalhos', em um AWS-RDS, os direitos ausentes e assim por diante.)
Por isso, eu não exatamente responder à da op pergunta ... mas deve responder a necessidades :)
EDIT: e para realmente responder a sua pergunta: há
a partir de 2017/09/07, você simplesmente não pode incluir cabeçalhos se continue com o comando SELECT INTO OUTFILE : |
fonte
um exemplo do meu sensor de nome de tabela de banco de dados com colunas (id, tempo, unidade)
fonte
Eu estava escrevendo meu código em PHP e tive alguns problemas para usar as funções concat e união, e também não usei variáveis SQL, de qualquer maneira que fiz isso funcionar, aqui está o meu código:
fonte
Esta é uma maneira de obter os títulos dos cabeçalhos dos nomes das colunas de forma dinâmica.
fonte
Eu gostaria de acrescentar algo à resposta fornecida por Sangam Belose. Aqui está seu código:
No entanto, se você não configurou seu
"secure_file_priv"
nas variáveis, pode não funcionar. Para isso, verifique a pasta definida nessa variável:A saída deve ser semelhante a esta:
Você pode alterar essa variável ou alterar a consulta para enviar o arquivo para o caminho padrão mostrado.
fonte
O MySQL sozinho não é suficiente para fazer isso de forma simples. Abaixo está um script PHP que produzirá colunas e dados em CSV.
Insira o nome do banco de dados e as tabelas perto do topo.
Você precisará que este seja o diretório para o qual deseja enviar a saída. O MySQL precisa ter a capacidade de gravar no diretório.
Você pode editar as opções de exportação de CSV na consulta:
No final, há uma chamada exec para GZip, o CSV.
fonte
fonte