De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

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.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


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