Можно ли использовать скрипт оболочки Unix для управления базами данных?

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

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Легко ли выполнить эту работу в shell script или я должен делать это на Java?

Это было полезно?

Решение

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

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

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

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

Другие советы

это возможно :Используя ваш сценарий оболочки unix, сгенерируйте sql-скрипт и используйте cli для доступа к базе данных для выполнения sql-скрипта.

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

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

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

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

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

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

Пайп - твой друг.

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

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

должен выполнять свою работу.

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

Для получения более подробной информации обратитесь к руководству для вашей базы данных.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top