Pergunta

Tenho que ler dados de alguns arquivos e inserir os dados em diferentes tabelas de um banco de dados.O shell script do Unix é poderoso o suficiente para fazer o trabalho?

É fácil fazer o trabalho em shell script ou devo fazer isso em Java?

Foi útil?

Solução

Se os dados que você está tentando importar estiverem em um formato razoável – delimitado por vírgula, por exemplo – e seu servidor de banco de dados tiver utilitários de linha de comando razoáveis, isso não deverá ser problema.O MySQL possui a ferramenta de linha de comando "mysqlimport" que aceitará vários argumentos que descrevem o formato do arquivo:

mysqlimport \
    --fields-terminated-by=, \
    --ignore-lines=1 \
    --fields-optionally-enclosed-by='"' < datafile.txt

Passar os dados por meio de one-liners perl/sed/awk pode ajudar a obtê-los no formato adequado, e o script de shell pode facilmente lidar com solicitações de nomes de arquivos, manipulação de argumentos, etc.

Usar as várias ferramentas de linha de comando fornecidas pelo Unix é o objetivo do script bash.Perl, MySQL, etc.todos fazem parte desse kit de ferramentas.

Outras dicas

é possível :Usando seu script shell unix, gere um script sql e use o cli para o banco de dados para executar o script sql.

se a quantidade de informações for pequena o suficiente, você poderá construir o SQL na memória, mas não aconselho isso, pois você nunca sabe o que o futuro reserva (e pode ser uma quantidade muito grande de dados).Usar uma chamada por solicitação não permite que você se beneficie de operações em massa que às vezes estão disponíveis.

Claro que você pode, supondo que você tenha um cliente SQL de linha de comando em mãos!Eu fiz isso com Sybase e o cliente de linha de comando isql.Você pode até ser inteligente e enviar coisas através do awk e enviar scripts para gerar comandos instantaneamente.Pode não ser a maneira mais eficiente de fazer tudo, mas há muitas oportunidades para flexibilizar seu talento de hacker Unix.

Você pode, mas pode ser um pouco feio, por exemplo, se você estiver usando mysql e suponha que tenha uma string SQL armazenada em $sql

echo $sql | mysql -u[user] -p[password] -h[host]

p.s.pode ser uma boa ideia nos informar qual banco de dados você está usando para que possamos oferecer ajuda mais específica: p

editar:alterei a linha de exemplo para que realmente funcione

Pipe é seu amigo.

Por exemplo, no MySQL:

echo 'load data infile /path/to/the/file into table table_name ...' | 
    mysql -u mysql_user_id -p 

deveria fazer o trabalho.

Desde que seu arquivo esteja de alguma forma estruturado, por exemplo.vírgula/tabulação separada etc.

Para obter detalhes, consulte o manual do seu banco de dados.

Depende do seu sistema de gerenciamento de banco de dados.A maioria deles possui ferramentas de shell poderosas para importação de dados, executando até mesmo algumas funções de ETL.Essas ferramentas podem ter um ótimo desempenho se suportarem carregamento em massa - geralmente o Java JDBC não pode fazer isso tão facilmente.

Não posso testar agora, mas algo como:

echo "INSERT INTO foo (b,a,r) VALUES (1,2,3);" | 
    mysql -u user -psecret -h host database

em um script de shell deve funcionar.Não sei como obter dados disso

A intenção principal do script Shell (Bash ou similar) não é lidar com bancos de dados.Opte por Java ou, melhor ainda, aproveite esta oportunidade para aprender o básico de uma linguagem de script como Python ou Ruby.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top