Работа с Python в SQ Server 2017. Часть 1

Мы продолжаем публикации статей об тспользовании Python в SQL Server. В предыдущей статье мы рассмотрели архитектуру решения и его компоненты, здесь мы приступаем к настройкам и проверке функционирония.

Для начала работы с Python, необходимо разрешить использование внешних скриптов в SQL Server, для чего:

  • Откройте SQL Server Management Studio.
  • Подсоединитесь к экземпляру SQL Server, где установлен Machine Learning Services и выполните команды:

EXEC sp_configure ‘external scripts enabled’, 1
RECONFIGURE WITH OVERRIDE

  • Рестартуйте SQL Server.
  • Убедитесь, что исполнение внешних скриптов возможно.

1.jpg

Далее необходимо выдать разрешения на выполнение кода.

Когда вы выполняете код как администратор, то вы имеете неявно присвоенные полномочия на его исполнение. Однако, если вы исполняете код как обычный пользователь, то разрешения должны быть присвоены явно. Для их явного присвоения выполните код, показанный ниже.

2.jpg

Исполнять Python-код можно двумя способами, либо в контексте локальной системы, либо в контексте SQL Server.

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

Если же вы исполняете код на SQL Server, то вы должны использовать специальную хранимую процедуру, имеющуюся в составе SQL Server и создать скрипт для ее вызова (см. рис. ниже).

3.jpg

Важные замечания:

  • Все внутри скрипта должно быть валидным R, Python, или Java (в SQL Server 2019 preview)-кодом
  • Код должен следовать всем правилам языка, включая идентификацию, имена переменных и т.д.
  • Если вы используете библиотеки, не загруженные по умолчанию, то вы должны импортировать их до начала их исполнения в скрипте.
  • Для выполнения кода необходимо вызвать хранимую процедуру sp_execute_external_script и передать ей ряд параметров, описанных ниже.

Необходимо помнить, что не все типы данных, используемые в Python, точно совпадают с типами данных SQL Server. Ниже приведена таблица совместимости данных.

5.jpg

 Давайте перейдем к исполнению кода Python в SQL Server.

 Для начала проверим, работоспособна ли среда Python? Для этого выполним простейший скрипт, показанный ниже.

6.jpg

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

Также обратите внимание, что поскольку мы выводим скалярную величину, то она выводится в стандартный поток STDOUT.

Усложним задачу. Результат показан ниже.

7.jpg

Попытаемся вывести результат как результирующий набор, а не как поток STDOUT.

8.jpg

Мы получили ошибку, которая ясно указывает на проблему с исполнением кода. “TypeError: OutputDataSet should be of type pandas.DataFrame”. Суть ошибки состоит в том, что если мы хотим исполнять код Python-а и возвращать данные как результирующий набор, то мы должны эти данные оформить как Pandas.DataFrame.

Давайте подправим и исполним еще раз?

9.jpg

Сейчас все сработало и данные попали в результирующий набор, как и было задумано.

В следующей статье мы рассмотрим более сложные примеры работы с Python, включая статистическую обработку данных и загрузку/выгрузку данных в/из файловой системы.

Александр Каленик, Senior Premier Field Engineer (PFE), MSFT (Russia)