você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

Usando o SQL para buscas em arquivos de texto

Colaboração: Cesar Brod

Data de Publicação: 17 de março de 2013

Antes de começar, você deve ter instalado, em sua máquina, a linguagem de programação Python e o servidor de base de dados SQLite3. No Debian e seus derivados isto é feito com o comando abaixo.

sudo apt-get install python sqlite3

Agora, visite a página do SQLet e baixe o programa. Abaixo estão os comandos para baixar a versão 1.0:

wget http://www.umlet.com/sql_on_linux_command_line/sqlet_1_0/sqlet.zip
unzip sqlet.zip
chmod +x sqlet.py

Crie um arquivo texto chamado "exemplo.csv" com o conteúdo similar ao que está abaixo:

nome,idade,sexo
Cesar,49,M
Meire,48,F
Aline,24,F
Ana Luiza,20,F
Natalia,26,F

Agora, experimente os seguintes comandos (observe a saída logo abaixo deles, nos exemplos abaixo):

# sqlet.py -d',' -A exemplo.csv 'select * from A;' | sqlite3
nome,idade,sexo
Cesar,49,M
Meire,48,F
Aline,24,F
Ana Luiza,20,F
Natalia,26,F

Você pode observar que a chave -d indica qual o delimitador de texto entre os dados do arquivo. A chave -A indica que, para o comando SQL, o nome da base de dados será A. O programa sqlet.py "transforma" o seu arquivo csv em um dump SQL e o envia, junto com o seu comando, para o gerenciador de base de dados sqlite3. Se você quiser ver qual a mágica está sendo feita, digite simplesmente:

# sqlet.py -d',' -A exemplo.csv 'select * from A;'

Observe o resultado:

 ------ ------ ------ ------ ------ ------ ----------
— SQLet interprets its arguments to generate the following SQL commands; pipe to sqlite3 to execute
 ------ ------ ------ ------ ------ ------ ----------
— defaults:
.separator ' '
.header off
 ------ ------ ------ ------ ------ ------ ----------
.separator ','
— new table..
— table name: A
— file name: exemplo.csv
— colIndex -- colName -- colType -- sampleValue
— 1 -- a1 -- TEXT -- nome
— 2 -- a2 -- TEXT -- idade
— 3 -- a3 -- TEXT -- sexo
create table A([a1] TEXT, [a2] TEXT, [a3] TEXT);
.import exemplo.csv A
 ------ ------ ------ ------ ------ ------ ----------
select * from A;
 ------ ------ ------ ------ ------ ------ ----------
drop table A;
 ------ ------ ------ ------ ------ ------ ----------

Agora, diga se isso não é muito lindo!

Experimente outras consultas (observe que a chave -h1 faz com que a primeira linha seja tratada como nome de colunas):

# sqlet.py -h1 -d',' -A exemplo.csv 'select * from A where sexo="M";' | sqlite3
Cesar,49,M

# sqlet.py -h1 -d',' -A exemplo.csv 'select nome,sexo from A where idade<"40";' | sqlite3
Aline,F
Ana Luiza,F
Natalia,F

Imagine as consultas que você pode fazer, por exemplo, nos arquivos textos fornecidos pelo Portal de Dados Abertos do Governo Federal!

O SQLet permite que você use vários arquivos de texto simultaneamente, criando buscas bastante complexas. Saiba mais no site do projeto.

Vai comprar os materiais escolares para 2013? Contribua com o ano letivo das crianças da AMAM. Doe livros, cadernos e materiais escolares. Faça parte dessa corrente. Faça a diferença. Curta a página da AMAM no Facebook.

Cesar Brod ministra cursos in-house adequados à necessidade de sua empresa, além de atuar como coach de equipes ágeis. Visite nosso portal para saber mais ou entre em contato diretamente com o autor para mais informações.



Veja a relação completa dos artigos de Cesar Brod