Un script shell Unix peut-il être utilisé pour manipuler des bases de données?

StackOverflow https://stackoverflow.com/questions/71775

  •  09-06-2019
  •  | 
  •  

Question

Je dois lire les données de certains fichiers et les insérer dans différentes tables d'une base de données. Le script shell Unix est-il assez puissant pour faire le travail?

Est-il facile de faire le travail dans un script shell ou devrais-je le faire en Java?

Était-ce utile?

La solution

Si les données que vous essayez d'importer sont dans un format raisonnable - délimité par des virgules, par exemple - et que votre serveur de base de données dispose d'utilitaires de ligne de commande raisonnables, cela ne devrait poser aucun problème. MySQL a le " mysqlimport " Outil de ligne de commande acceptant divers arguments décrivant le format du fichier:

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

Le fait de transmettre les données via les guichets uniques perl / sed / awk peut vous aider à les obtenir au format approprié, et le script shell peut facilement gérer les demandes de noms de fichiers, les arguments de traitement, etc.

L’utilisation des divers outils de ligne de commande fournis par Unix est l’essentiel du script bash. Perl, mysql, etc. font tous partie de cette boîte à outils.

Autres conseils

c'est possible: A l’aide de votre script de shell unix, générez un script SQL et utilisez la clé de la base de données pour exécuter le script SQL.

Si la quantité d’informations est suffisamment petite, vous pouvez créer le code SQL en mémoire. Je vous le déconseille cependant, car vous ne savez jamais ce que l’avenir réserve (et que le volume de données est très important). L'utilisation d'un appel par demande ne vous permet pas de bénéficier d'opérations en bloc parfois disponibles.

Bien sûr, vous pouvez le faire, en supposant que vous ayez un client SQL en ligne de commande à portée de main! Je l'ai fait avec Sybase et le client en ligne de commande isql. Vous pouvez même devenir intelligent et envoyer des choses via awk et envoyer des scripts pour générer des commandes à la volée. Ce n’est peut-être pas le moyen le plus efficace de tout faire, mais vous avez de nombreuses occasions de modifier votre hacker mojo Unix.

Vous pouvez le faire, mais cela pourrait être un peu moche, par exemple si vous utilisez mysql et supposez que vous avez une chaîne SQL stockée dans $ sql

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

p.s. ce serait une bonne idée de nous dire quelle base de données vous utilisez afin que nous puissions offrir une aide plus spécifique: p

edit: a modifié la ligne d'exemple pour qu'elle fonctionne réellement

Pipe est votre ami.

Par exemple, dans MySQL:

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

devrait faire le travail.

Si votre fichier est structuré d'une manière ou d'une autre, par exemple. virgules / tabulations séparées, etc.

Pour plus de détails, consultez le manuel de votre base de données.

Cela dépend de votre système de gestion de base de données. La plupart d'entre eux disposent d'outils shell puissants pour importer des données, réalisant même certaines fonctions ETL. Ces outils pourraient même être très performants s’ils prennent en charge le chargement en bloc. JDBC Java ne peut généralement pas le faire aussi facilement.

Je ne peux pas le tester pour le moment, mais quelque chose comme:

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

dans un script shell devrait fonctionner. Je ne sais pas comment en extraire les données

L’intention principale des scripts de shell (Bash ou similaires) n’est pas de traiter les bases de données. Optez pour Java ou mieux, profitez de cette occasion pour apprendre les bases d’un langage de script tel que Python ou Ruby.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top