Jack of all trades

master of none. 多芸は無芸を地で行く、自作自演何でも屋。

SQL Server 2017 CTP2.0上でPythonのコードを実行する

去る4/19に開催されたMicrosoft Data Ampにて、SQL Server vNextがSQL Server 2017になることが正式に発表されました。それと同時にSQL Server 2017 Community Technology Preview 2.0 (CTP2.0)の提供が開始しています。

blogs.technet.microsoft.com

SQL Server 2017 CTP2.0で提供される目玉機能として、SQL Serverのデータベース上でPythonのコードが実行できるという発表がありました。 現状はWindows OS上で動作するSQL Serverでのみ有効な機能なようです。追々その他の環境でも動作することを期待しています(on Linuxで使いたい)

まだまだ情報は少ないですが、セッション動画内のデモ等を参考に見様見真似で動作確認してみます。

1. SQL Server 2017 CTP2.0をインストール

以下のサイトからインストールメディアをダウンロードします。 www.microsoft.com

setup.exeを実行して新規インストールを開始します。

f:id:sadynitro:20170422141845p:plain

機能の選択画面でデータベースエンジンサービスに加えてMachine Leaningサービスにチェックを付けます。

f:id:sadynitro:20170422141900p:plain

データベースインスタンスのインストールが完了したら、追加でSQL Server Management Studioをインストールします。

f:id:sadynitro:20170422142049p:plain

2. SQL Server Management Studio (SSMS)上でPythonコードを実行してみる

インストールが一通り完了したら、SSMSを起動してクエリエディタ上でPythonコードを実行してみます。 Pythonのコードを実行するには「execute sp_execute_external_script」で外部スクリプトとして記述します。

execute sp_execute_external_script
@language = N'Python',
@script = N'
import sys
import os
print("*****")
print(sys.version)
print("Hello Python!!!")
print(os.getcwd())
print("*****")
'

実行すると恐らく以下のエラーメッセージが表示されます。

メッセージ 39023、レベル 16、状態 1、プロシージャ sp_execute_external_script、行 1 [バッチ開始行 0]
SQL Server のこのインスタンスでは、'sp_execute_external_script' は無効になっています。これを有効にするには、sp_configure の 'external scripts enabled' を使用します。

どうやらデフォルトでは外部スクリプトの実行が無効になっているので有効にしてやる必要があります。

3. 外部スクリプトの実行を有効化する

SQL ServerでRやPythonといった外部スクリプトを実行するためには、グローバル構成設定(sp_configure)にある「external scripts enabled」を有効にする必要があります。 以下のスクリプトを実行して有効化します。

USE master;  
GO  
EXEC sp_configure 'external scripts enabled', '1';

RECONFIGURE

※ 設定変更後にSQL Serverのサービスを再起動する必要があるので注意してください。

4. SQL Server LaunchPadの有効化

外部スクリプトの実行を有効化して再度Pythonコードを実行するスクリプトを実行すると、今度は以下のエラーメッセージが表示されます。

メッセージ 39011、レベル 16、状態 1、行 0
SQL Server が LaunchPad サービスと通信できませんでした。サービスの構成を確認してください。

外部スクリプトを実行するためのサービスと通信するためのサービス(LaunchPadサービス)なるものが必要なようです。

SQL Server 構成マネージャー」を開いてSQL Server LaunchPadを有効化します。 f:id:sadynitro:20170422144315p:plain

5. 再度Pythonコードの実行を試みる

再度Pythonコードを実行するスクリプトを実行すると、今度こそ無事に実行完了して実行結果が返ってきます。間に色々挟まっている所為かレスポンスはかなり遅いですがちゃんとPythonのコードが実行出来ていることを確認できました。 f:id:sadynitro:20170422145731p:plain

6. ついでにTensor Flowを動作させてみる

せっかくPythonコードが実行できることを確認できたので、機械学習用途で利用する為の第一歩としてTensor Flowが動作するか確認してみます。

デフォルトで幾つかのライブラリがインストールされていますが、Tensor Flowは含まれていないようなので、pipでインストールします。 SQL Server 2017のPython環境はデフォルトで「C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES」の中に一式収まっているようです。 このフォルダ配下の「Scripts」フォルダの中にpipが存在するので、コマンドプロンプトでこのフォルダに移動し、以下のコマンドを実行することでTensor Flowをインストールできます。

pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/windows/cpu/tensorflow-1.0.1-cp35-cp35m-win_amd64.whl

インストールが完了したらTensor Flowが動作していることを確認できる最低限のコードを書いて実行してみます。

execute sp_execute_external_script
@language = N'Python',
@script = N'
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3"

import tensorflow as tf
hello = tf.constant("Hello, TensorFlow!")
sess = tf.Session()
print(sess.run(hello))
'

とりあえずTensor Flowが動作していることが確認できました。 f:id:sadynitro:20170422151008p:plain

7. まとめ

SQL Server 2017 CTP2.0のインストールから外部スクリプトとしてPythonコードを実行できるところまで確認しました。
しかしながら、実用(主に機械学習用途)に際しては最低限以下について確認が必要かなと思っています。

  • DBのテーブルに格納されているデータに対してPythonのコードで必要な操作ができることを確認する
  • Tensor Flow等のライブラリで実際に学習モデルを構築して正常に動作することを確認する

ということで、今後の課題として取り組んでいきたいと思います。乞うご期待。