Domanda

Devo leggere i dati da alcuni file e inserirli in diverse tabelle in un database.Lo script della shell Unix è abbastanza potente per svolgere il lavoro?

È facile eseguire il lavoro nello script di shell o dovrei farlo in Java?

È stato utile?

Soluzione

Se i dati che stai tentando di importare sono in un formato ragionevole, ad esempio delimitati da virgole, e il tuo server database dispone di utilità della riga di comando ragionevoli, questo non dovrebbe costituire un problema.MySQL dispone dello strumento da riga di comando "mysqlimport" che accetta vari argomenti che descrivono il formato del file:

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

Passare i dati attraverso perl/sed/awk può aiutare a ottenerli nel formato corretto e lo script di shell può gestire facilmente la richiesta di nomi di file, la gestione di argomenti, ecc.

L'utilizzo dei vari strumenti da riga di comando forniti da Unix è il punto centrale dello scripting bash.Perl, mysql, ecc.fanno tutti parte di quel toolkit.

Altri suggerimenti

è possibile :Utilizzando lo script della shell Unix, genera uno script SQL e utilizza la CLI nel database per eseguire lo script SQL.

se la quantità di informazioni è sufficientemente piccola potresti creare l'SQL in memoria, ma lo sconsiglio poiché non sai mai cosa riserva il futuro (e potrebbe trattarsi di una quantità di dati molto grande).L'utilizzo di una chiamata per richiesta non ti consente di beneficiare delle operazioni in blocco che talvolta sono disponibili.

Certo che puoi, supponendo che tu abbia un client SQL da riga di comando a portata di mano!L'ho fatto con Sybase e il client della riga di comando isql.Puoi anche diventare furbo e inviare materiale tramite awk e inviare script per generare comandi al volo.Potrebbe non essere il modo più efficiente per fare tutto, ma ci sono molte opportunità per mostrare il tuo fascino da hacker Unix.

Puoi, ma potrebbe essere un po' brutto, ad esempio se stai usando mysql e supponi di avere una stringa SQL memorizzata in $sql

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

p.s.potrebbe essere una buona idea dirci quale database stai utilizzando in modo da poter offrire un aiuto più specifico: p

modificare:cambiato la riga di esempio in modo che funzioni davvero

La pipa è tua amica.

Ad esempio, in MySQL:

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

dovrebbe fare il lavoro.

A condizione che il tuo file sia in qualche modo strutturato, ad es.separati da virgole/tabulazioni, ecc.

Per i dettagli, consulta il manuale del tuo database.

Dipende dal sistema di gestione del database.La maggior parte di essi dispone di potenti strumenti di shell per l'importazione di dati, eseguendo anche alcune funzioni ETL.Questi strumenti potrebbero essere anche molto performanti se supportano il caricamento di massa: di solito Java JDBC non può farlo così facilmente.

Non posso testarlo adesso, ma qualcosa del tipo:

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

in uno script di shell dovrebbe funzionare.Non so però come tirarne fuori Data

L'intenzione principale dello scripting di shell (Bash o simili) non è quella di gestire i database.Scegli Java o, meglio ancora, sfrutta questa opportunità per apprendere le basi di un linguaggio di scripting come Python o Ruby.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top