суббота, 26 марта 2016 г.

DataGrip - Перенос источников данных на другой компьютер

Несколько месяцев назад мы перешли на использование JetBrains DataGrip в качестве средства работы с базами данных, т.к. она позволяет работать с различными БД в одном приложении.

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

Для начала все же необходимо настроить все источники одному сотруднику, по умолчанию они создаются на уровне проекта, чтобы появилась возможность экспорта нужно сделать их глобальными. Для этого в разделе Data sources and drivers нужно выбрать источник и нажать кнопку Make Global, после чего можно экспортировать настройки и передавать коллегам.

пятница, 25 марта 2016 г.

Динамическое создание файлов Excel в пакете MS Integration Services (SSIS)

Задача: В процессе выполнения SSIS пакета формировать файлы Excel с информацией. Например вы выгружаете информацию по продажам и необходимо формировать отдельный файл для каждого филиала.

Считаем, что вы знаете как пользоваться Foreach Loop контейнером, т.к. создание Excel файлов находится внутри него и у вас настроены все источники данных.

1. Добавить Execute SQL Task в контейнер цикла
2. В его свойствах указать ConnectionType = EXCEL
3. Создать новое подключение, раскрыв список в Connection

4. Указать путь к файлу. Важно: можно как выбрать существующий файл, так и указать имя отсутствующего файла, но по существующему пути. В моем случае путь E:\SSIS_Packages\Temp\ реальный, а файл Temp.xls не существует.
5. Указать версию Excel

6. Сохраняем все настройки (элемент будет отображен с ошибкой, пока игнорируем)
7. Добавляем Data Flow Task
8. Соединяем Execute SQL Task с Data Flow Task
9. Внутрь Data Flow Task добавляем ваш источник данных (не забываем, что Excel принимает unicode формат, поэтому необходимо сделать предварительную конвертацию), Excel Destination и соединяем их
10. Создаем переменную sqlCreateExcelSheet, которая будет содержать скрипт создания листа Excel
11. Создаем переменную strExcelListName, которая будет содержать название листа в Excel
12. Открываем свойства Excel Destination, выбираем ранее созданный Connection Manager, способ доступа к данным Table or view и нажимаем кнопку New...
13. В новом окне откроется скрипт создания листа Excel, в нем меняем все varchar и nvarchar на LongText, а также меняем имя листа на свое, например MySheet. Копируем скрипт и сохраняем.

14. В свойстве Name of the Excel sheet выбираем лист со знаком $, который мы только что создали и переходим в раздел Mappings, в котором настраиваем все соответствия источника и приемника. Сохраняем.
15. В переменную strExcelListName сохраняем имя нашего листа без знака $. В нашем случае это MySheet
16. Открываем для переменной sqlCreateExcelSheet окно Expression и вставляем в скрипт, скопированный на шаге 13. Заменяем название листа в тексте скрипта на переменную strExcelListName и сохраняем

17. Возвращаемся в свойства Execute SQL Task. SQLSourceType = Variable, SourceVariable = User::sqlCreateExcelSheet. Сохраняем.


18, В свойствах Exce Connection Manager ставим DelayValidation = true, т.к.файлы будут существовать только на момент выполнения пакета

19. Также у вас должна существовать переменная strFileName, которая содержит имя и путь файла, мы предполагаем, что в каждой итерации цикла в ней будет свое значение (не описано в рамках этой статьи). Открываем раздел Expressions Excel Connection Manager и переопределяем свойство ExcelFilePath на @[User::strFileName]

20. Финальным шагом в свойствах Excel Destination указываем способ получения данных Table name or view name variable и в качестве переменной выбираем strExcelListName

21. Запускаем пакет.






понедельник, 21 марта 2016 г.

Запуск неподписанных скриптов PowerShell

Симптомы:
при запуске скрипта PowerShell возникает ошибка "Не удается загрузить файл ХХХХ, так как выполнение скриптов запрещено для данной системы."

Решение:
Необходимо изменить политику выполнения скриптов. Для этого запустить PowerShell ISE или консоль от имени администратора и выполнить "Set-ExecutionPolicy YYYY", где YYYY

  • Unrestricted - выполнение любых сценариев без подписи
  • RemoteSigned - локальные без подписи, загруженные с сети с подписью
  • AllSigned - все сценарии должны быть подписаны
  • Restricted - (по умолчанию) все сценарии запрещены, только одиночные командами в интерактивном режиме

Для разработки и отладки я выбираю RemoteSigned



пятница, 18 марта 2016 г.

Настройка JetBrains DataGrip для подключения к Sybase ASE (Native vs jTds)

Источник Sybase ASE можно подключить в DataGrip как с использованием драйверов jTds, которые можно загрузить непосредственно из меню настроек источника, так и через родные драйвера Sybase.

Драйвер jConnect устанавливается вместе с Sybase PCClient, и обычно находится в папке C:\Sybase\jConnect-7_0\classes, либо его можно скачать вместе с SDK с сайта http://store.sap.com используя для поиска "SDK for Adaptive Server Enterprise"

Для настройки native драйверов достаточно указать файл как показано на рисунке ниже (клик для увеличения):

Native вариант работает быстрее, но я так и не смог устранить сообщение "[010P6] 010P6: A row was received and ignored. java.io.IOException: JZ0EM: End of data." появляющееся при каждом запросе, однако все данные выгружаются.