В последние несколько месяцев я обнаружил, что передвигаю данные туда и сюда так сильно, что сценарии, оканчивающиеся на load(transform(extract())), стали моим хлебом насущным — печальная жизнь, как говорят некоторые!

Прошлой ночью я хотел импортировать кучу данных, хранящихся в SQL Server, в базу данных MySQL, но не хотел пачкать свои харды с графическим интерфейсом или PowerShell, потому что, ну, PowerShell.

В результате получилась mssqldump, небольшая утилита — аналогичная mysqldump — для экспорта данных в TSV.

использование

mssqldump делает одну вещь — и, надеюсь, хорошо — запускает запрос к базе данных и экспортирует результаты в виде TSV в стандартный вывод:

./mssqldump -q "SELECT Name, 1 as ID, RAND() as thing from sys.Databases"
master    1    0.4318099474883688
tempdb    1    0.4318099474883688
model     1    0.4318099474883688
msdb      1    0.4318099474883688
test      1    0.4318099474883688

Вы также можете включить заголовки (имена столбцов) с опцией -c:

./mssqldump -q "SELECT Name, 1 as ID, RAND() as thing from sys.Databases"
Name      ID   thing
master    1    0.4318099474883688
tempdb    1    0.4318099474883688
model     1    0.4318099474883688
msdb      1    0.4318099474883688
test      1    0.4318099474883688

Если вы хотите распечатать информацию о версии mssqldump, вы можете просто указать v или version в качестве параметра запроса:

./mssqldump -qversion
1.0.0

Если вы хотите использовать mssqldump, просто загрузите последний релиз с github и начните сбрасывать данные!

Пара сюрпризов

Здание mssqldump было самостоятельным опытом, так как я обнаружил пару полезных вещей:

  • В последнее время Microsoft убивает его — я хотел проверить это и смирился с запуском экземпляра SQL Server в Azure. Оказывается, простая docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Password123!' --net host -d --name mssql --rm microsoft/mssql-server-linux делает свое дело!
  • зная, что я разрабатываю инструмент CLI на Golang, я подумал, что мне нужно прибегнуть к кобре — желая упростить ситуацию, я вместо этого выбрал go-flags, который имеет гораздо меньше функций, но также менее самоуверен и быстрее настраивается (cobra, вероятно, является излишним для приложения CLI только с одной командой)

Прощай!

Первоначально опубликовано на odino.org (22 мая 2018 г.).
Вы можете подписаться на меня в Твиттере — приветствуются разглагольствования! :)