Consultando um arquivo CSV

30

Alguém conhece uma ferramenta simples que abrirá um arquivo CSV e permitirá que você faça consultas básicas SQLesque? Como uma ferramenta gráfica, fácil de usar.

Sei que poderia escrever um pequeno script para importar o CSV para um banco de dados SQLite, mas, como imagino que alguém pensou nisso antes de mim, só queria saber se existia. O que está causando essa pergunta é que estou ficando frustrado com os recursos limitados de filtragem do Excel.

Talvez alguma outra ferramenta de manipulação de visualização de dados forneça funcionalidade semelhante.

De preferência é grátis ou OSS, mas estou aberto a sugestões.

EDITAR:

Eu realmente preferiria alguns tutoriais claros sobre como fazer o abaixo, em vez de apenas "tornar sua planilha uma entrada ODBC" ou "escrever programas usando arquivos ODBC" ou mais idéias sobre aplicativos a serem usados. Nota: Não consigo usar o MS Access.

Mais uma edição:

Ainda estou aberto a soluções usando SQLite. Minha plataforma é um laptop Win2k semi-antigo, com um P4. Como é bastante lento, uma solução com recursos leves é ideal e provavelmente obterá a vitória.

J. Polfer
fonte
Só para ter certeza: você ainda está aberto para soluções usando SQLite? (Como usar os comandos .separator e .import?) E em qual plataforma você está?
Arjan19
Apenas por curiosidade: Por que você não pode usar o MS Access?
Ludwig Weinzierl
@ Arjan - Ainda estou aberto a soluções usando SQLite. Minha plataforma é um lappy Win2k semi-antigo, com um P4 nele. Como é bastante lento, uma solução com recursos leves é ideal e provavelmente obterá a vitória.
1911 J. Polfer
2
@ fretje - Você não deve ter nenhuma experiência com SQLite. Total de 1 MB no código fonte. É usado em telefones celulares. O executável do Win32 (mecanismo e tudo) é de 300 KB.
1911 J. Polfer
1
@sheepsimulator: Eu sei que é leve, mas meu ponto ainda permanece ... O acesso ODBC aos arquivos de texto é basicamente incorporado ao sistema operacional, enquanto no SQLite você ainda precisa instalar algo primeiro e importar o arquivo csv em um banco de dados. Instalar nada ainda é menos do que instalar algo muito pequeno, não é?
fretje

Respostas:

13

Você já experimentou o LogParser ?

O analisador de logs é uma ferramenta versátil e poderosa que fornece acesso universal à consulta de dados baseados em texto, como arquivos de log, arquivos XML e arquivos CSV, além de fontes de dados importantes no sistema operacional Windows®, como o log de eventos, o registro, o sistema de arquivos e o Active Directory®. Você informa ao Analisador de Log quais informações você precisa e como deseja que elas sejam processadas. Os resultados da sua consulta podem ser formatados de forma personalizada na saída baseada em texto ou podem ser persistidos em mais destinos especiais, como SQL, SYSLOG ou um gráfico.

A maioria dos softwares é projetada para realizar um número limitado de tarefas específicas. O Analisador de Log é diferente ... o número de maneiras que ele pode ser usado é limitado apenas pelas necessidades e imaginação do usuário. O mundo é seu banco de dados com o Analisador de Log.

Um tutorial (e outro ) sobre o uso da linguagem de consulta SQL como com arquivos CSV que encontrei usando o google .

Consulta de exemplo:

logparser -i:CSV "SELECT TOP 10 Time, Count INTO c:\logparser\test\Chart.GIF 
FROM c:\logparser\test\log.csv ORDER by Time DESC" -charttype:bar3d
svandragt
fonte
Apoio fórum e muitas de suas perguntas serão respondidas no forums.iis.net/default.aspx?GroupID=51 que é o fórum oficial LogParser
svandragt
2
Mais exemplos em codinghorror.com/blog/archives/000369.html Nice; Pena que é apenas o Windows.
Arjan #
34

Acho que o banco de dados do OpenOffice.org pode fazer o que você quiser. Funciona assim.

  1. Inicie o Open Office.org Database, ele mostra o " Assistente de Banco de Dados "

  2. Selecione " Conectar-se a um banco de dados existente: Texto "

    insira a descrição da imagem aqui

  3. Especifique o caminho para os arquivos de texto, além de detalhes como caracteres separadores, etc.

    insira a descrição da imagem aqui

  4. Criar e executar consultas

    insira a descrição da imagem aqui

Se você já trabalhou com o Microsoft Access, encontrará a GUI familiar.


Se você pode ficar sem uma GUI, sempre existem os comandos tradicionais do UNIX. Eu os uso muito para fazer consultas simples em arquivos (pequenos) CSV. Aqui está como funciona:

clause      operation   command
-------------------------------
from             join     `join`
where     restriction     `grep`
order by           --     `sort`
group by  restriction      `awk`
having    restriction     `grep`
select     projection      `cut`
distinct  restriction     `uniq`
limit     restriction     `head`
offset    restriction     `tail`
Ludwig Weinzierl
fonte
Uau, ótima resposta! +1
theycallmemorty
Parece apenas o truque. Vou ver se consigo OO Base nessa lapela envelhecida.
1911 J. Polfer
+1. Legal! Não se preocupou em explorar OO. Sempre pensei que o MS O tivesse vantagem!
22409 Swanand
doente! como está o desempenho de arquivos grandes. Estou em bioinformática e têm enorme delimitado por tabulação lixo
user2751
@ 1alstew1: Para arquivos grandes, eu me afastava dos dois métodos e usava um banco de dados real. Também não se esqueça de usar a importação em lote (LOAD) para inserir os dados no seu banco de dados, pois é muito mais rápido que o INSERT.
181 Ludwig Weinzierl
13

Você pode usar o ODBC para consultar arquivos de texto:

Acessando arquivos de texto usando o provedor de dados ODBC

Observe que você não precisa do MS Access para que isso funcione, o tutorial no link acima apenas usa o MS Access para criar o arquivo de texto, mas como você já possui um arquivo de texto, role para baixo até a metade e inicie o tutorial onde vê o título Acessando um arquivo de texto .

Atualização : eu mesmo criei um DSN em um arquivo .csv para poder criar este tutorial passo a passo ... aqui está:

  • Verifique se o arquivo .csv está em seu próprio diretório, sem mais nada.
  • Abra o "Administrador da fonte de dados ODBC" (painel de controle - ferramentas administrativas - fontes de dados (ODBC)).
  • Vá para a guia DSN do arquivo e clique em "Adicionar ...".
  • Escolha "Microsoft Text Driver (* .txt, * .csv) na lista e clique em" Avançar> ".
  • Dê um nome para a fonte de dados do arquivo (por exemplo, "teste") e clique em "Avançar>".
  • Clique em "Concluir" (depois disso, uma caixa de diálogo será exibida onde os campos "Nome da fonte de dados" e "Descrição" estarão realmente acinzentados. Isso é normal. Não se preocupe.
  • Desmarque a caixa de seleção "Usar diretório atual". O botão "Selecionar diretório" será ativado.
  • Clique no botão "Selecionar diretório" e nagive para a pasta em que você colocou o arquivo .csv na primeira etapa.
  • Clique no botão "Opções >>".
  • Clique no botão "Definir formato ...".
  • Na lista "Tabelas" esquerda, selecione o seu arquivo .csv e clique no botão "Adivinhar". (Isso analisará seu arquivo csv e criará um campo apropriado para cada coluna no seu arquivo .csv.)
  • Percorra as colunas geradas (F1, F2, ...) na lista correta, atribua nomes significativos e defina o tipo de dados apropriado (às vezes a suposição nem sempre é correta).
  • Quando tudo estiver configurado corretamente, clique em "OK" (2 vezes).

Neste ponto, você deve ter um arquivo DSN com o qual pode acessar o arquivo .csv por meio do ODBC. Se você inspecionar sua pasta onde o arquivo .csv está colocado, verá um arquivo schema.ini, que contém a configuração que você acabou de criar. Quando você possui vários arquivos .csv, cada um deles corresponde a uma tabela e cada tabela possui um bloco [ filename .csv] no arquivo schema.ini no qual as diferentes colunas são definidas ... Você também pode criar / alterar esse esquema .ini diretamente em um editor de texto em vez de usar a GUI descrita acima.

Quanto à sua pergunta extra "como conectar-se a esse provedor ODBC usando uma ferramenta de consulta":
Eu tenho uma ferramenta que me escrevi há muito tempo e que não é elegível para publicação. Mas uma rápida pesquisa no Google surgiu com o odbc-view , uma ferramenta freeware que faz o que você deseja.
Eu baixei e instalei a ferramenta.
Depois de iniciar a ferramenta:

  • Clique em "DataSource ...".
  • Selecione a fonte de dados do arquivo que você criou anteriormente (por exemplo, "teste").
  • No painel de consulta, digite "selecione * em [ nome do arquivo .csv]".
  • Clique em "Executar".

Você deve ver o conteúdo do seu arquivo .csv no painel inferior agora.
Espero que isso ajude ... Deixe-me saber como você faz ou se precisar de mais assistência.

fretje
fonte
@ fretje - Eu sei que não preciso do MS Access para que isso funcione, eu mesmo tentei. Encontrei dois problemas com isso: 1. Quero ter uma GUI ou um utilitário CLI que possa ser usado para consultar o CSV-DB quando terminar. O tutorial que você citou acima não lista nada disso, pressupõe que você deseja acessar esse banco de dados ODBC escrevendo um aplicativo .NET. 2. Com o PC em que eu usaria esta solução, não acho que minha configuração ODBC seja suficiente para seguir essa solução. Não consegui nomear meu DSN no momento da criação do provedor de dados ODBC; a caixa estava acinzentada. Talvez um problema de configuração do sistema.
1911 J. Polfer
@ fretje - se você puder explicar como se conectar a esse provedor ODBC usando uma ferramenta de consulta, isso seria bom; Eu não sei como fazer isso. Estava meio que procurando uma resposta abrangente.
1911 J. Polfer
8

Eu gosto de usar R para acessar arquivos CSV de uma maneira rápida. Embora a linguagem não seja diretamente SQL, você pode fazer todas essas coisas com comandos simples em R. R também fornece a capacidade de criar gráficos agradáveis ​​e muito mais poder.

cristão
fonte
5

Você sempre pode ler o arquivo no Excel e usar o Excel como sua fonte de dados via ODBC e executar consultas nele.

m.floryan
fonte
Eu posso? Isso soa como magia negra. Você pode encontrar um link para um tutorial?
1911 J. Polfer
2
@ Sheepsimulator: O Excel apenas abre arquivos CSV ... depois de ter um arquivo do Excel, você pode consultá-lo com ODBC, assim como você pode consultar arquivos de texto (veja minha resposta abaixo).
fretje
5

Eu descobri que a maneira mais simples de conseguir isso é usar apenas a funcionalidade de importação CSV integrada do SQLite:

  1. sqlite3 mydatabase.sqlite
  2. sqlite> .mode csv
  3. sqlite> .import mydata.csv <tablename>

Agora você tem um banco de dados que pode ser consultado da maneira que desejar. Eu também achei bom o desempenho acima, apenas importou três milhões de linhas em 10 a 15 segundos.

Markus Amalthea Magnuson
fonte
3

Encontrei um aplicativo pequeno e não gráfico que faz isso: csvsql .

A documentação está aqui .

Stefan Thyberg
fonte
Este é EXATAMENTE o tipo de aplicativo que estou procurando, embora seria bom se tivesse uma GUI. Infelizmente, eu realmente não tenho um bom caminho agora para compilá-lo para a caixa Win2k. Vai voltar para você. Além disso, o autor não usou automake ou algo legal assim, para compilar será necessário um pouco de brincadeira.
1911 J. Polfer
Foi muito difícil de encontrar e foi a única coisa que pude encontrar perto do que você descreveu. Talvez uma idéia para alguém escrever um aplicativo que possa importar arquivos de texto e executar consultas SQL neles usando, por exemplo, o SQL Lite?
276 Stefan Thyberg
1
sqlite3(o aplicativo de linha de comando que lê dados SQLite) foi construído com suporte a arquivos de importação - ver seus comandos .separator e .import em sqlite.org/sqlite.html
Arjan
1
Sim, eu o vi mencionado várias vezes nas respostas, mas eu estava pensando mais em um aplicativo completo do tipo bloco de notas com uma janela de consulta.
21139 Stefan Thyberg
3

Você pode dar uma olhada na ferramenta gratuita q - Text as a Database , que permite executar o SQL diretamente em arquivos csv, incluindo junções, agrupamentos e qualquer outra construção SQL. Também inclui detecção automática de nomes e tipos de colunas.

É uma ferramenta de linha de comando que corresponde à maneira de operação do Linux (por exemplo, Piping from stdin, se necessário, sinalizadores especiais para personalizar o comportamento, etc.).

Usa sqlite nos bastidores, muito leve e fácil de usar.

Divulgação completa - é minha própria ferramenta de código aberto. Espero que você ache útil

Harel Ben-Attia

Harel Ben Attia
fonte
Esta ferramenta é absolutamente incrível!
Dawid Ferenczy Rogožan
2

Uma ferramenta que eu acho que pode facilitar isso no futuro é o Resolver One .

É uma planilha que gera código Python que é facilmente modificável. Para aqueles que são desenvolvedores e, ocasionalmente, precisam "renunciar" para resolver problemas em planilhas, isso parece ser uma maneira intuitiva de resolver problemas em formato de planilha em um idioma familiar.

E isso me dá uma desculpa para usar Python. Python me faz feliz.

J. Polfer
fonte
2

O driver H2 JDBC fornece uma função csvread muito útil, permitindo que você faça coisas como as seguintes:

select * from csvread(test1.csv) test1 
inner join csvread(test2.csv2) test2
on test1.id = test2.foreignkey

Existem várias maneiras de usar esse driver sem ter que se aprofundar na gravação de código para usá-lo.

Pessoalmente, prefiro o Squirrel SQL Client, que oferece uma ótima interface gráfica para executar consultas. Para usá-lo, basta apontar o H2 In-Memorycaminho de classe do driver já listado para o driver H2 que você baixou. Depois de configurar um alias adequado usando o driver, você pode executar o SQL aleatório que desejar. Os resultados são exibidos em uma boa tabela e todos os tipos de outros recursos para importação, exportação, etc.

Como alternativa, você pode usar o Groovy para escrever um script rápido para carregar e usar o driver conforme necessário. Veja este exemplo no blogpost para descobrir como.

Parece que alguém estendeu o script groovy acima e o transformou em uma boa ferramenta de linha de comando para executar as consultas, consulte gcsvsql. Com isso, você pode executar comandos como o seguinte:

gcsvsql "select * from people.csv where age > 40"
lstg
fonte
2

Você pode querer tentar ferramenta Q . É muito leve, requer apenas o Python 2.5 ou mais recente.

agrrd
fonte
2

Eu escrevi um programa de linha de comando para executar SQL arbitrário em arquivos CSV, incluindo associações de vários arquivos, chamado gcsvsql. Você pode ler sobre isso aqui:

http://bayesianconspiracy.blogspot.com/2010/03/gcsvsql.html

Há um projeto do Google Code aqui: http://code.google.com/p/gcsvsql/

É escrito em Java / Groovy e será executado em qualquer lugar em que Java estiver disponível.

Edit: Projeto ativo movido para o github. https://github.com/jdurbin/durbinlib

James Durbin
fonte
1

Mais duas opções para esta tarefa: querycsv e fsql . Querycsv é Python e usa sqlite3. Fsql é Perl e usa DBD :: CSV .

Nelson
fonte
0

Embora não seja gratuito, o melhor programa que encontrei para isso é a Consulta de Arquivos . Ao contrário das outras soluções baseadas em linha de comando ou que exigem a importação / configuração do arquivo antes de acessá-lo, o File Query permite abrir um arquivo (até GBs de entrada como um editor de texto normal e analisará automaticamente o layout para você, e permite que você faça quase todas as suas consultas a partir de diálogos simples.

É um pouco caro, mas se você precisar fazer algo apenas uma vez, sempre poderá usar a avaliação de 30 dias gratuitamente. Eles também têm ótimos guias e até vídeos para você começar.

Jeffrey Harmon
fonte
0

você pode usar o WHS. Por exemplo, tenho 4 arquivos no diretório 'C: \ Users \ user837 \ Desktop \ t4': 1.txt

id;sex_ref;sale
1;1;10
2;2;30
3;1;20

2.txt

sex_id;name
1;male
2;female

schema.ini

[1.txt]
Format=Delimited(;)
ColNameHeader=True
MaxScanRows=50
DecimalSymbol=,
[2.txt]
Format=Delimited(;)
ColNameHeader=True
MaxScanRows=50
DecimalSymbol=,

e Hello.js

WScript.Echo("Hello World!");
var cn = new ActiveXObject("ADODB.Connection");
cn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"C:\\Users\\user837\\Desktop\\t4\";Extended Properties=\"text;HDR=NO;FMT=Delimited\"");

var rs = cn.Execute("select * from 1.txt as t1 left join 2.txt as t2 on t1.sex_ref = t2.sex_id");

while (!rs.EOF) 
{
    WScript.Echo(           rs.Fields("id").Value
                  + "###" + rs.Fields("sex_ref").Value
                  + "###" + rs.Fields("name").Value
                );
    rs.moveNext();
}

Agora basta clicar duas vezes em Hello.js e você verá a solicitação de sql linha por linha. Consulte a documentação do WHS para visualizar todos os resultados da consulta.

Oleg
fonte