Можно ли использовать скрипт оболочки Unix для управления базами данных? - PullRequest
1 голос
/ 16 сентября 2008

Я должен прочитать данные из некоторых файлов и вставить данные в разные таблицы в базе данных. Является ли сценарий оболочки Unix достаточно мощным, чтобы выполнять эту работу?

Легко ли выполнять работу в сценарии оболочки или мне следует делать это в Java?

Ответы [ 8 ]

3 голосов
/ 16 сентября 2008

Если данные, которые вы пытаетесь импортировать, имеют приемлемый формат - например, разделенный запятыми - и на вашем сервере баз данных есть подходящие утилиты командной строки, это не должно быть проблемой. MySQL имеет инструмент командной строки «mysqlimport», который будет принимать различные аргументы, описывающие формат файла:

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

Передача данных через однострочники perl / sed / awk может помочь получить их в нужном формате, а сценарий оболочки может легко обрабатывать запросы имен файлов, обработку аргументов и т. Д.

Использование различных инструментов командной строки, предоставляемых Unix, - это весь смысл сценариев bash. Perl, mysql и т. Д. Являются частью этого инструментария.

2 голосов
/ 16 сентября 2008

Конечно, вы можете, предполагая, что у вас есть удобный клиент SQL командной строки! Я сделал это с Sybase и клиентом командной строки isql. Вы можете даже получить умные и отправлять вещи через awk и отправлять скрипты для генерации команд на лету. Возможно, это не самый эффективный способ сделать все, но есть много возможностей для изгибания вашего хакерского мохо Unix.

2 голосов
/ 16 сентября 2008

Вы можете, но это может быть немного уродливо, например, если вы используете mysql и предположим, что у вас есть строка SQL, хранящаяся в $ sql

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

p.s. было бы неплохо сообщить нам, какую базу данных вы используете, чтобы мы могли предложить более конкретную помощь: p

edit: изменена строка примера, чтобы она действительно работала

2 голосов
/ 16 сентября 2008

возможно: С помощью сценария оболочки Unix создайте сценарий sql и используйте cli для базы данных, чтобы выполнить сценарий sql.

если объем информации достаточно мал, вы можете построить SQL в памяти, однако я советую не делать этого, поскольку вы никогда не знаете, что будет в будущем (а это может быть очень большой объем данных). Использование одного вызова на запрос не позволяет вам получать выгоду от массовых операций, которые иногда доступны.

1 голос
/ 16 сентября 2008

Труба - твой друг.

Например, в MySQL:

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

должен сделать работу.

Если ваш файл как-то структурирован, например запятая / табуляция и т. д.

Подробнее см. В руководстве к вашей базе данных.

0 голосов
/ 16 сентября 2008

Это зависит от вашей системы управления базами данных. У большинства из них есть мощные инструменты оболочки для импорта данных, выполняющие даже некоторые функции ETL. Эти инструменты могут быть даже очень производительными, если они поддерживают массовую загрузку - обычно Java JDBC не может сделать это так легко.

0 голосов
/ 16 сентября 2008

Сценарии оболочки (Bash или аналогичные) в основном не предназначены для работы с базами данных. Переходите на Java или, что еще лучше, используйте эту возможность для изучения основ языка сценариев, такого как Python или Ruby.

0 голосов
/ 16 сентября 2008

Не могу проверить прямо сейчас, но что-то вроде:

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

в скрипте оболочки должно работать. Не знаю, как извлечь из него данные, хотя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...