sqlmlutils を使用した Python パッケージのインストール

適用対象:AZURE SQL Managed Instance SQL Server 2019 (15.x) 以降のバージョン

この記事では、sqlmlutilsパッケージ内の関数を使って、SQL Server上のMachine Learning Servicesインスタンスに新しいPythonパッケージをインストールする方法について説明します。 インストールしたパッケージは、sp_execute_external_script T-SQL文を通じてデータベース内で実行されるPythonスクリプトに使えます。

この記事では、sqlmlutils パッケージの関数を使用して、Azure SQL Managed Instance の Machine Learning Services のインスタンスに新しい Python パッケージをインストールする方法について説明します。 インストールしたパッケージは、sp_execute_external_script T-SQL文を通じてデータベース内で実行されるPythonスクリプトに使えます。

SQL Managed Instance Machine Learningサービスのインスタンスにプリインストールされているパッケージは更新やアンインストールはできません。 現在インストールされているパッケージの一覧を表示するには、インストールされている Python パッケージの一覧表示に関するページを参照してください。

パッケージの場所とインストール パスの詳細については、「Get Python package information」(Python パッケージ情報の取得) を参照してください。

この記事で説明されているsqlmlutilsパッケージを使って、SQL Server 2019以降にPythonパッケージを追加してください。 SQL Server 2017 以前の場合は、Python ツールを使用したパッケージのインストールに関する記事を参照してください。

前提条件

  • SQL Serverに接続するクライアントコンピュータにPythonをインストールします。 コマンドラインからスクリプトを実行することもできますし、Python拡張を持つVisual Studio CodeのようなPython開発環境を使うこともできます。

    クライアント側のPythonのバージョンはサーバー側の Python バージョンと一致しなければならず、インストールするパッケージはあなたが持っているPythonのバージョンと互換性がある必要があります。 SQL Server バージョンごとに含まれている Python のバージョンの詳細については、「Python および R のバージョン」を参照してください。

    特定の SQL Server インスタンスの Python バージョンを確認するには、次の T-SQL コマンドを使用します。

    EXECUTE sp_execute_external_script
      @language = N'Python',
      @script = N'
    import sys
    print(sys.version)
    '
    
  • SQL Serverに接続するために使うクライアントコンピュータにインストールされたVisual Studio Code用のMSSQL拡張機能。 他のデータベース管理ツールまたはクエリ ツールを使用できます。

その他の考慮事項

  • PythonパッケージライブラリはSQL ServerインスタンスのProgram Filesフォルダにあります。 デフォルトでは、このフォルダへのインストールには管理者権限が必要です。 詳細については、パッケージ ライブラリの場所に関するページを参照してください。

  • パッケージのインストールは、sqlmlutils に渡す接続情報で指定する SQL インスタンス、データベース、ユーザーに固有のものです。 複数のSQLインスタンスやデータベースでパッケージを使用する場合、または異なるユーザー向けに、それぞれのパッケージをインストールしてください。 例外は、すべてのユーザーと共有されるpublicスコープにインストールされたパッケージです。 SQLMLUTILS は、 sysadmin サーバーロールのメンバーとして接続した場合にのみデフォルトでパブリックスコープを選択し、それ以外はプライベートスコープを選択します。 パブリックスコープに別のプリンシパルとしてインストールするには、 scope=sqlmlutils.Scope.public_scope()installに渡し、 db_owner データベースの役割が必要です。 ユーザーが公開パッケージの新しいバージョンをインストールした場合、公開パッケージ自体は影響を受けませんが、そのユーザーは新しいバージョンにアクセスできます。

  • パッケージを追加する前に、パッケージが SQL Server 環境に適しているかどうかを検討してください。

    • データベース内でPythonは、単にデータベースを照会するタスクではなく、機械学習など、データベースエンジンとの密接な統合が恩恵を受けるタスクに活用しましょう。

    • サーバーに過度な計算負荷をかけるパッケージを追加すると、パフォーマンスが低下します。

    • 強化されたSQL Server環境では、以下のようなパッケージは避けてください。

      • ネットワーク アクセスを必要とするパッケージ
      • 管理者特権でのファイル システム アクセスが必要なパッケージ
      • Web 開発、または SQL Server 内で実行しても効果のないタスクに使用されるパッケージ
    • sqlmlutilsでPythonのtensorflowパッケージをインストールすることはできません。 詳細と回避策については、SQL Server Machine Learning Services の既知の問題に関するページを参照してください。

sqlmlutils をクライアント コンピューターにインストールする

sqlmlutils を使用するには、まず、SQL Server への接続に使用するクライアント コンピューターにインストールする必要があります。

sqlmlutils をオンラインでインストールする

クライアントコンピュータがインターネットにアクセスできる場合は、pipを使ってsqlmlutilsをインストールしてください:

pip install sqlmlutils

sqlmlutils をオフラインでインストールする

クライアントのコンピュータにインターネット接続がない場合は、ダウンロードしたファイルから sqlmlutils をインストールしてください:

  1. PIPを設置していることを確認してください。 詳細は PIPの設置をご覧ください。

  2. sqlmlutilsのリリースページからクライアントコンピュータに最新のSQLmlutilsファイルをダウンロードしてください。 ファイルは解凍しないでください。

  3. コマンドプロンプトを開き、以下のコマンドを実行してsqlmlutilsパッケージをインストールします。 ダウンロードしたファイルの完全なパスを置き換えてください。 この例はダウンロードされたファイルが c:\temp\sqlmlutils-1.0.0.zipであることを前提としています。

    pip install --upgrade --upgrade-strategy only-if-needed c:\temp\sqlmlutils-1.0.0.zip
    

SQL Server への Python パッケージのインストール

sqlmlutilsを使うことで、PythonパッケージをSQLインスタンスに追加し、そのインスタンスで動作するPythonコードで使うことができます。 SQLmlUtilsCREATE EXTERNAL LIBRARY を使ってパッケージとその各依存関係をインストールします。

以下の例では、SQL Serverにtext-toolsパッケージを追加します。

パッケージをオンラインで追加する

SQL Serverに接続するクライアントコンピュータがインターネットにアクセスできる場合、sqlmlutilsを使ってtext-toolsパッケージやオンライン依存関係を見つけ、遠隔でSQL Serverインスタンスにパッケージをインストールすることができます。

  1. クライアント コンピューターで、Python または Python 環境を開きます。

  2. 次のコマンドを使用して、テキスト ツール パッケージをインストールします。 独自の SQL Server データベース接続情報に置き換えます (Windows 認証を使用する場合は、uid パラメーターと pwd パラメーターは必要ありません)。

  1. クライアント コンピューターで、Python または Python 環境を開きます。

  2. 次のコマンドを使用して、テキスト ツール パッケージをインストールします。 ご自身の SQL Server データベース接続情報に置き換えてください。 また、クライアントコンピュータにインストールされたODBCドライバーの名前(例:driver="ODBC Driver 18 for SQL Server")も渡してください。sqlmlutilsがデフォルトで使うドライバー名はWindowsにのみ適用されるためです。

import sqlmlutils
connection = sqlmlutils.ConnectionInfo(server="server", database="database", uid="username", pwd="password")
sqlmlutils.SQLPackageManager(connection).install("text-tools")

パッケージをオフラインで追加する

SQL Serverに接続するクライアントコンピュータにインターネット接続がなければ、接続しているPCのpipを使ってパッケージをローカルフォルダにダウンロードしてください。 その後、フォルダをクライアントのコンピュータにコピーし、パッケージをオフラインでインストールします。

この手順は依存関係のないパッケージにも適用されます。 SQLPackageManager.install() ローカル .whl ファイルを渡してもPyPIからの依存関係を解決するため、依存関係のあるパッケージを追加するには、インターネットにアクセスできるクライアントコンピュータを使い、「 パッケージをオンラインで追加する」に従ってください。

インターネット接続可能なパソコンで

  1. コマンド プロンプトを開き、次のコマンドを実行して、テキスト ツール パッケージを含むローカル フォルダーを作成します。 この例では、フォルダー c:\temp\text-tools を作成します。

    pip download text-tools -d c:\temp\text-tools
    
  2. text-tools フォルダーをクライアント コンピューターにコピーします。 次の例では、c:\temp\packages\text-tools にコピーしたことを想定しています。

クライアント コンピューター上で

sqlmlutilsを使って、pipがダウンロードしたパッケージ(.whlファイル)をローカルフォルダにインストールしてください。

この例では 、テキストツール には依存関係がないため、 text-tools フォルダーは単一のファイルを保持します。

次の Python スクリプトを実行します。 パッケージの実際のファイル パスと名前、独自の SQL Server データベース接続情報に置き換えます (Windows 認証を使用する場合は、uid パラメーターと pwd パラメーターは必要ありません)。

次の Python スクリプトを実行します。 パッケージの実際のファイル パスと名前、独自の SQL Server データベース接続情報に置き換えます。 また、クライアントコンピュータにインストールされたODBCドライバーの名前(例:driver="ODBC Driver 18 for SQL Server")も渡してください。sqlmlutilsがデフォルトで使うドライバー名はWindowsにのみ適用されるためです。

import sqlmlutils
connection = sqlmlutils.ConnectionInfo(server="yourserver", database="yourdatabase", uid="username", pwd="password")
sqlmlutils.SQLPackageManager(connection).install("text_tools-1.0.0-py3-none-any.whl")

パッケージを使用する

これで、SQL Server の Python スクリプトでパッケージを使用できるようになりました。 次に例を示します。

EXECUTE sp_execute_external_script
  @language = N'Python',
  @script = N'
from text_tools.finders import find_best_string
corpus = "Lorem Ipsum text"
query = "Ipsum"
first_match = find_best_string(query, corpus)
print(first_match)
  '

SQL Server からのパッケージの削除

text-toolsパッケージを削除するには、先ほど定義した接続変数を使ってクライアントコンピュータ上で以下のPythonコマンドを実行します。

sqlmlutils.SQLPackageManager(connection).uninstall("text-tools")

その他の sqlmlutils 関数

sqlmlutilsパッケージには、Pythonパッケージの管理やストアドプロシージャやクエリの作成、管理、SQL Serverでの実行のためのいくつかの機能が含まれています。 詳細については、sqlmlutils の Python README ファイルをご参照ください。

sqlmlutils 関数の詳細については、Python の help 関数を使用してださい。 次に例を示します。

import sqlmlutils
help(sqlmlutils.SQLPackageManager.install)