SQL Server Machine Learning Services での Python と R に関する既知の問題
適用対象: SQL Server 2016 (13.x) 以降のバージョン
重要
2022 年 7 月 1 日に、Machine Learning Server (以前の Microsoft R Server) のサポートは終了しました。 詳細については、Machine Learning Server の現状に関するページを参照してください。
この記事では、SQL Server Machine Learning Services および SQL Server 2016 R Services で提供される Python および R コンポーネントでの既知の問題または制限事項について説明します。
セットアップと構成に関する問題
初期セットアップと構成に関連するプロセスの詳細については、SQL Server Machine Learning Services のインストールに関する記事を参照してください。 新しい R または Python のコンポーネントのアップグレード、サイドバイサイド インストール、およびインストールに関する情報が含まれています。
環境変数がないことによる MKL の計算結果の不整合
適用対象: R_SERVER バイナリ 9.0、9.1、9.2、9.3。
R_SERVER では Intel Math Kernel Library (MKL) が使われます。 システムに環境変数がない場合、MKL に関する計算で、一貫性のない結果が発生する可能性があります。
R_SERVER で条件付きの数値が確実に再現されるようにするには、環境変数 'MKL_CBWR'=AUTO
を設定します。 詳しくは、「Introduction to Conditional Numerical Reproducibility (CNR)」(条件付き数値の再現性 (CNR) の概要) をご覧ください。
回避策
コントロール パネルで、[システムとセキュリティ]>[システム]>[システムの詳細設定]>[環境変数] の順に選択します。
新しいユーザー変数またはシステム変数を作成します。
- 変数を
MKL_CBWR
に設定します。 - 値を
AUTO
に設定します。
- 変数を
R_SERVER を再起動します。 SQL Server では、SQL Server Launchpad サービスを再起動できます。
Note
Linux で SQL Server 2019 (15.x) を実行している場合は、ユーザー ホーム ディレクトリの .bash_profile
を編集または作成し、export MKL_CBWR="AUTO"
という行を追加します。 bash コマンド プロンプトで「source .bash_profile
」と入力して、このファイルを実行します。 R のコマンド プロンプトで「Sys.getenv()
」と入力して、R_SERVER を再起動します。
R スクリプトのランタイム エラー (SQL Server 2017 CU 5 - CU 7 の回帰)
SQL Server 2017 (14.x) の累積更新プログラム 5 から 7 では、rlauncher.config ファイルに、一時ディレクトリのファイル パスにスペースが含まれるという回帰があります。 この回帰は、CU 8 で修正されています。
R スクリプトを実行すると、次のようなメッセージが含まれるエラーが表示されます。
'R' スクリプトのランタイムと通信できませんでした。 "R" ランタイムの要件を確認してください。
外部スクリプトからの STDERR メッセージ:
致命的なエラー: 'R_TempDir' を作成できません
回避策
CU 8 が使用可能になったら適用します。 または、管理者特権でのコマンド プロンプトでアンインストール/インストールを行って registerrext を実行することにより、rlauncher.config
を作成し直してもかまいません。
<SQLInstancePath>\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRExt.exe /uninstall /sqlbinnpath:<SQLInstanceBinnPath> /userpoolsize:0 /instance:<SQLInstanceName>
<SQLInstancePath>\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRExt.exe /install /sqlbinnpath:<SQLInstanceBinnPath> /userpoolsize:0 /instance:<SQLInstanceName>
次の例は、既定のインスタンス "MSSQL14.MSSQLSERVER" が C:\Program Files\Microsoft SQL Server\
にインストールされている場合のコマンドを示しています。
"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRext.exe" /uninstall /sqlbinnpath:"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Binn" /userpoolsize:0 /instance:MSSQLSERVER
"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRext.exe" /install /sqlbinnpath:"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Binn" /userpoolsize:0 /instance:MSSQLSERVER
SQL Server の機械学習機能をドメイン コントローラーにインストールできない
SQL Server 2016 (13.x) R Services または SQL Server Machine Learning Services をドメイン コントローラーにインストールしようとすると、次のエラーが発生し、セットアップが失敗します。
機能のセットアップ処理中にエラーが発生しました
ID のグループが見つかりません
コンポーネント エラー コード: 0x80131509
エラーが発生するのは、ドメイン コントローラーでは、機械学習を実行するために必要な 20 個のローカル アカウントをサービスが作成できないためです。 一般に、ドメイン コントローラーに SQL Server をインストールすることはお勧めしません。 詳しくは、サポート情報 2032911 をご覧ください。
最新のサービス リリースをインストールして Microsoft R Client との互換性を確保する
最新バージョンの Microsoft R Client をインストールし、それを使用してリモート コンピューティング コンテキストの SQL Server で R を実行すると、次のようなエラーが発生する場合があります。
You are running version 9.x.x of Microsoft R Client on your computer, which is incompatible with Microsoft R Server version 8.x.x. (Microsoft R Server バージョン 8.x.x と互換性のない、バージョン 9.x.x の Microsoft R Client をコンピューター上で実行しています。)互換性のあるバージョンをダウンロードしてインストールしてください。
SQL Server 2016 (13.x) では、クライアント上の R ライブラリがサーバー上の R ライブラリと完全に一致している必要があります。 その制限は、Microsoft R Server 9.0.1 より後のリリースではなくなっています。 それでも、このエラーが発生する場合は、クライアントとサーバーで使われている R ライブラリのバージョンを確認し、必要に応じて、サーバーのバージョンに合わせてクライアントを更新します。
SQL Server のサービス リリースをインストールすると常に、SQL Server R Services でインストールされる R のバージョンは更新されます。 確実に最新バージョンの R コンポーネントを使用するためには、すべてのサービス パックをインストールしてください。
SQL Server 2016 で R Server 8.0.3 を実行すると、You are running version 9.0.0 of Microsoft R client on your computer, which is incompatible with the Microsoft R server version 8.0.3. Download and install a compatible version.
というエラー メッセージが表示される場合があります。SQL Server 2016 の Microsoft R Client 9.0.0 との 互換性は、次のパッチで保証されています。
R パッケージに関する問題を回避するには、モダン ライフサイクル サポート ポリシーを使用するようにサービス契約を変更することで、サーバーにインストールされている R ライブラリのバージョンをアップグレードすることもできます。詳細については、次のセクションを参照してください。 そのようにすると、SQL Server でインストールされる R のバージョンは、Machine Learning Server (旧称 Microsoft R Server) の更新と同じスケジュールで更新されます。
適用対象: SQL Server 2016 (13.x) R Services、Microsoft R Server バージョン 9.0.0 以前
SQL Server 2017 CU 3 セットアップで R コンポーネントが見つからない
限られた数の Azure 仮想マシンは、SQL Server に含める必要がある R インストール ファイルなしでプロビジョニングされました。 この問題は、2018-01-05 から 2018-01-23 の期間にプロビジョニングされた仮想マシンで発生します。 また、2018-01-05 から 2018-01-23 の期間に SQL Server 2017 (14.x) の CU 3 更新プログラムを適用した場合、この問題はオンプレミスのインストールにも影響を与える可能性があります。
正しいバージョンの R インストール ファイルを含むサービス リリースが提供されています。
コンポーネントをインストールして SQL Server 2017 (14.x) CU 3 を修復するには、CU 3 をアンインストールし、更新後のバージョンを再インストールする必要があります。
- R インストーラーが含まれる更新された CU 3 インストール ファイルをダウンロードします。
- CU 3 をアンインストールします。 コントロール パネルで [更新プログラムのアンインストール] を探し、"Hotfix 3015 for SQL Server 2017 (KB4052987) (64-bit)" を選択します。 アンインストールの手順を続けます。
- ダウンロードした KB4052987 の更新プログラム
SQLServer2017-KB4052987-x64.exe
をダブルクリックして、CU 3 更新プログラムを再インストールします。 インストール手順に従います。
SQL Server 2017 以降のオフライン インストールで Python コンポーネントをインストールできない
SQL Server 2017 (14.x) のプレリリース版をインターネットにアクセスできないコンピューターにインストールする場合、ダウンロードした Python コンポーネントの場所の入力を求めるページが、インストーラーで表示されない場合があります。 そのような場合、Machine Learning Services 機能はインストールできますが、Python コンポーネントはインストールできません。
この問題は、リリース バージョンで解決されています。 また、この制限は R コンポーネントでは発生しません。
適用対象: SQL Server 2017 (14.x) と Python
SQL Server 2017 を使用してクライアントから古いバージョンの SQL Server R Services に接続すると、互換性のないバージョンであることが警告される
SQL Server 2016 (13.x) のコンピューティング コンテキストで R コードを実行すると、次のエラーが表示される場合があります。
Microsoft R Server バージョン 8.0.3 と互換性のない、Microsoft R Client のバージョン 9.0.0 をコンピューター上で実行しています。 互換性のあるバージョンをダウンロードしてインストールしてください。
このメッセージは、次のいずれかに該当する場合に表示されます。
- SQL Server 2017 (14.x) のセットアップ ウィザードを使用して、クライアント コンピューターに Microsoft R Server (スタンドアロン) をインストールした。
- 別の Windows インストーラーを使用して、Microsoft R Server をインストールした。
サーバーとクライアントで確実に同じバージョンが使用されるようにするには、Microsoft R Server 9.0 以降のリリースでサポートされている "バインド" を使用して、SQL Server 2016 (13.x) インスタンスの R コンポーネントをアップグレードすることが必要な場合があります。 お使いの R Services のバージョンでアップグレードがサポートされているかどうかを判断するには、SqlBindR.exe を用いた R Services のインスタンスのアップグレードに関する記事を参照してください。
適用対象: SQL Server 2016 (13.x) R Services、Microsoft R Server バージョン 9.0.0 以前
SQL Server 2016 サービス リリースをセットアップすると、新しいバージョンの R コンポーネントのインストールに失敗する場合がある
累積的な更新プログラムをインストールする場合や、インターネットに接続されていないコンピューターに SQL Server 2016 (13.x) のサービス パックをインストールする場合、セットアップ ウィザードに、ダウンロードした CAB ファイルを使用して R コンポーネントを更新するためのプロンプトが表示されないことがあります。 通常、このエラーは、データベース エンジンと共に複数のコンポーネントがインストールされている場合に発生します。
回避策として、CU 1 更新プログラムのインストールに関する次の例で示されているように、コマンド ラインで MRCACHEDIRECTORY
引数を指定してサービス リリースをインストールすることができます。
C:\<path to installation media>\SQLServer2016-KB3164674-x64.exe /Action=Patch /IACCEPTROPENLICENSETERMS /MRCACHEDIRECTORY=<path to CU 1 CAB files>
最新のインストーラーを入手するには、インターネット アクセスなしでの機械学習コンポーネントのインストールに関するページを参照してください。
適用対象: SQL Server 2016 (13.x) R Services、Microsoft R Server バージョン 9.0.0 以前
R のバージョンと異なるバージョンの Launchpad サービスを開始できない
データベース エンジンとは別に SQL Server R Services をインストールし、ビルドのバージョンが異なる場合は、システム イベント ログに次のエラーが記録されることがあります。
SQL Server Launchpad サービスは次のエラーのため開始できませんでした: そのサービスは指定時間内に開始要求または制御要求に応答しませんでした。
たとえば、このエラーは、リリース バージョンを使用してデータベース エンジンをインストールし、パッチを適用してデータベース エンジンをアップグレードした後、リリース バージョンを使用して R Services の機能を追加した場合に、発生することがあります。
この問題を回避するには、ファイル マネージャーなどのユーティリティを使用して、Launchpad.exe のバージョンと、sqldk.dll
などの SQL バイナリのバージョンを比較します。 すべてのコンポーネントは、同じバージョン番号である必要があります。 1 つのコンポーネントをアップグレードする場合は、インストールされている他のすべてのコンポーネントに必ず同じアップグレードを適用してください。
インスタンスの Binn
フォルダーで Launchpad を検索します。 たとえば、SQL Server 2016 (13.x) の既定のインストールでは、パスは C:\Program Files\Microsoft SQL Server\MSSQL.13.InstanceNameMSSQL\Binn
などです。
Azure 仮想マシンで実行されている SQL Server インスタンスのファイアウォールによってリモート コンピューティング コンテキストがブロックされる
SQL Server が Azure 仮想マシンにインストールされている場合、仮想マシンのワークスペースを使用する必要があるコンピューティング コンテキストを使用できない場合があります。 これは、Azure 仮想マシン上のファイアウォールに、ローカルの R ユーザー アカウントのネットワーク アクセスをブロックする規則が既定で含まれるためです。
回避策としては、Azure VM で [セキュリティが強化された Windows ファイアウォール] を開き、 [送信の規則] を選択して、次の規則を無効にします。 [Block network access for R local user accounts in SQL Server instance MSSQLSERVER](SQL Server インスタンス MSSQLSERVER の R ローカル ユーザー アカウントに対するネットワーク アクセスをブロックする) 。 また、規則を有効のままにして、セキュリティ プロパティを [Allow if secure](セキュリティで保護されているときに許可する) に変更するのでもかまいません。
SQL Server 2016 Express Edition での暗黙の認証
統合 Windows 認証を使用してリモート データ サイエンス ワークステーションから R ジョブを実行すると、SQL Server では、"暗黙の認証" を使用して、スクリプトで必要になる可能性のあるローカル ODBC 呼び出しが生成されます。 ただし、この機能は、SQL Server 2016 (13.x) Express Edition の RTM ビルドでは使用できません。
この問題を解決するために、新しいサービス リリースにアップグレードすることをお勧めします。 アップグレードできない場合の回避策としては、SQL ログインを使用して、埋め込みの ODBC 呼び出しを必要とする可能性のあるリモート R ジョブを実行します。
適用対象: SQL Server 2016 (13.x) R Services Express Edition
SQL Server によって使用されるライブラリが他のツールから呼び出される場合のパフォーマンスの制限
RGui などの外部アプリケーションから、SQL Server 用にインストールされている機械学習ライブラリを呼び出すことができます。 そうすることが、新しいパッケージのインストールや、非常に短いコード サンプルでのアドホック テストの実行といった、特定のタスクを実行するための最も便利な方法である場合があります。 ただし、SQL Server の外部では、パフォーマンスが制限される可能性があります。
たとえば、SQL Server の Enterprise Edition を使用している場合でも、外部ツールを使用して R コードを実行すると、R はシングルスレッド モードで実行されます。 SQL Server での優れたパフォーマンスを利用するには、SQL Server 接続を開始し、sp_execute_external_script を使用して外部スクリプトのランタイムを呼び出します。
一般に、SQL Server によって使用される機械学習ライブラリを外部ツールから呼び出すことは避けてください。 R または Python のコードをデバッグする必要がある場合は、通常、SQL Server の外部で行う方が簡単です。 SQL Server にあるものと同じライブラリを入手するには、Microsoft R Client、または SQL Server 2017 Machine Learning Server (スタンドアロン) をインストールします。
SQL Server Data Tools では、外部スクリプトで必要なアクセス許可がサポートされていない
Visual Studio または SQL Server Data Tools を使用してデータベース プロジェクトを発行するとき、外部スクリプトの実行に固有のアクセス許可をプリンシパルが持っている場合は、次のようなエラーが表示されることがあります。
TSQL Model:(TSQL モデル:) Error detected when reverse engineering the database. The permission was not recognized and was not imported. (データベースのリバース エンジニアリング中にエラーが検出されました。アクセス許可が認識されず、インポートされませんでした。)
現在、DACPAC モデルでは、GRANT ANY EXTERNAL SCRIPT
や EXECUTE ANY EXTERNAL SCRIPT
など、R Services または Machine Learning Services によって使用されるアクセス許可はサポートされていません。 この問題は今後のリリースで修正される予定です。
回避策として、追加の GRANT
ステートメントを配置後スクリプトで実行します。
リソース ガバナンスの既定値により、外部スクリプトの実行が調整される
Enterprise Edition では、リソース プールを使用して外部スクリプト プロセスを管理できます。 一部の早期リリース ビルドでは、R プロセスに割り当てられる最大メモリは 20 パーセントでした。 したがって、サーバーに 32 GB の RAM がある場合、R の実行可能ファイル (RTerm.exe
および BxlServer.exe
) では 1 つの要求で最大 6.4 GB を使用できます。
リソースの制限に達する場合は、現在の既定値を確認してください。 20 パーセントでは不十分な場合は、SQL Server のドキュメントで、この値を変更する方法をご覧ください。
適用対象: SQL Server 2016 (13.x) R Services、Enterprise Edition
Linux で libc++.so
を使用せずに sp_execute_external_script
を使用するときのエラー
libc++.so
がインストールされていないクリーンな Linux マシンでは、commonlauncher.so
で libc++.so
を読み込めないため、Java または外部言語で sp_execute_external_script
(SPEES) クエリを実行できません。
次に例を示します。
EXECUTE sp_execute_external_script @language = N'Java'
, @script = N'JavaTestPackage.PassThrough'
, @parallel = 0
, @input_data_1 = N'select 1'
WITH RESULT SETS((col1 INT NOT NULL));
GO
次のようなメッセージが表示されて失敗します。
Msg 39012, Level 16, State 14, Line 0
Unable to communicate with the runtime for 'Java' script for request id: 94257840-1704-45E8-83D2-2F74AEB46CF7. Please check the requirements of 'Java' runtime.
mssql-launchpadd
ログには、次のようなエラー メッセージが記録されます。
Oct 18 14:03:21 sqlextmls launchpadd[57471]: [launchpad] 2019/10/18 14:03:21 WARNING: PopulateLauncher failed: Library /opt/mssql-extensibility/lib/commonlauncher.so not loaded. Error: libc++.so.1: cannot open shared object file: No such file or directory
回避策
次のいずれかの回避策を実行できます。
/opt/mssql/lib
から既定のシステム パス/lib64
に、libc++*
をコピーします次のエントリを
/var/opt/mssql/mssql.conf
に追加して、パスを公開します。[extensibility] readabledirectories = /opt/mssql
適用対象: SQL Server 2019 (15.x) on Linux
FIPS 対応サーバーでのインストールまたはアップグレード エラー
機能 Machine Learning Services および言語拡張機能を備えた SQL Server 2019 (15.x) をインストールするか、または (FIPS) Federal Information Processing Standard (FIPS) 対応サーバー上の SQL Server インスタンスをアップグレードすると、次のエラーが表示されます。
An error occurred while installing extensibility feature with error message:AppContainer Creation Failed with error message NONE, state This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms. (拡張機能のインストール中にエラーが発生しました。エラー メッセージ: AppContainer の作成がエラー メッセージ NONE で失敗しました、この実装は Windows プラットフォーム FIPS 検証暗号化アルゴリズムの一部ではありません。)
回避策
機能 Machine Learning Services および言語拡張機能を備えた SQL Server 2019 (15.x) のインストールまたは SQL Server インスタンスのアップグレードの前に、FIPS を無効にします。 インストールまたはアップグレードが完了したら、FIPS を再び有効にすることができます。
適用対象: SQL Server 2019 (15.x)
特定のアルゴリズム、ストリーミング、またはパーティション分割を使用する R ライブラリ
問題
ランタイム アップグレードで、SQL Server 2017 (14.x) に次の制限事項が適用される。 この問題は Enterprise Edition に適用されます。
- 並列処理: シナリオの
RevoScaleR
とMicrosoftML
のアルゴリズム スレッド並列処理は、最大 2 つのスレッドに制限されます。 - ストリーミングとパーティション分割: T-SQL
@r_rowsPerRead
に渡されるsp_execute_external_script
パラメーターを含むシナリオは適用されません。 - ストリーミングとパーティション分割:
RevoScaleR
とMicrosoftML
のデータ ソース (つまり、ODBC
、XDF
) では、トレーニングまたはスコアリングのシナリオで行をチャンク単位で読み取る機能はサポートされていません。 これらのシナリオでは、常に計算のためにすべてのデータをメモリに取り込み、操作はメモリにバインドされます
解決策
最善の解決策は、SQL Server 2019 (15.x) にアップグレードすることです。 または、後続のタスクを完了した後、RegisterRext.exe /configure を使用して構成されたランタイム アップグレードで SQL Server 2017 (14.x) を引き続き使用することができます。
- レジストリを編集して
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\150
キーを作成し、値SharedCode
をデータC:\Program Files\Microsoft SQL Server\150\Shared
またはインスタンス共有ディレクトリに構成のとおりに追加します。 - フォルダー
C:\Program Files\Microsoft SQL Server\140\Shared
からフォルダーC:\Program Files\Microsoft SQL Server\150\Shared and copy instapi140.dll
を作成して新しくフォルダーを作成します。 - 新しいフォルダー
C:\Program Files\Microsoft SQL Server\150\Shared
のinstapi140.dll
の名前をinstapi150.dll
に変更します。
重要
上記の手順を実行する場合は、新しいバージョンの SQL Server にアップグレードする前に、追加されたキーを手動で削除する必要があります。
ML サービスでのプロセス プールのパフォーマンスの問題 (R と Python)
このセクションでは、SQL Server で ML サービス (R と Python) を使用する場合の既知の問題と回避策について説明します。
ML サービスでのプロセス プールのコールド スタートのパフォーマンス
sp_execute_external_script
の実行時に、Launchpad サービスは、R や Python などの外部ランタイムを開始するサテライト プロセスを起動します。 スタートアップ コストを分けるため、後続の sp_execute_external_script
の実行で使用できるプロセスのプールが作成されます。 このプロセスのプールは、このユーザー、データベース、および使用言語 (ML サービスでは R または Python) に固有です。
最初のクエリ実行
sp_execute_external_script
が初めて実行されるとき、またはアイドル時間の経過後に実行されるときは (プロセスは、しばらく使われていない場合、クリーンアップ タスクによって終了されます)、サテライト プロセスがウォームアップされている必要があります。 このようなプールされたプロセスのコールド スタートは遅くなる可能性があります (たとえば、リソースの制約のため)。
回避策
最初の呼び出しのパフォーマンスが重要な場合は、クエリをウォームに保つことをお勧めします。 たとえば、プロセスの有効期限が切れる前に単に sp_execute_external_script
クエリを実行するバックグラウンド タスクを実行できます。 たとえば、R クエリをウォームに保つには、次のクエリを定期的に実行できます。
EXECUTE sp_execute_external_script @language = N'R', @script = N'';
GO
同時実行クエリの数が多い
sp_execute_external_script
の同時実行の数がプール内のアクティブな R または Python プロセスより多い場合、プールにプロセスを追加するコールド スタートが遅くなる可能性があります (たとえば、リソースの制約が原因で)。
回避策
スケーリング パフォーマンスの問題を回避するには、複数の要求をバッチ処理できます (たとえば、ループバック接続 を使うか、スクリプトを書き換えて複数の要求を処理します)。 さらに、リアルタイム シナリオでは、SQL PREDICT を利用できます。
R スクリプトの実行に関する問題
このセクションでは、SQL Server での R の実行に固有の既知の問題と、Microsoft によって公開されている R ライブラリおよびツール (RevoScaleR を含む) に関連するいくつかの問題について説明します。
R ソリューションに影響する可能性があるその他の既知の問題については、Machine Learning Server のサイトをご覧ください。
既定以外の場所の SQL Server で R スクリプトを実行するときのアクセス拒否警告
SQL Server のインスタンスが既定以外の場所にインストールされている場合 (Program Files
フォルダーの外部など)、パッケージがインストールされるスクリプトを実行しようとすると、警告 ACCESS_DENIED が発生します。 次に例を示します。
normalizePath(path.expand(path), winslash, mustWork)
内: path[2]="~ExternalLibraries/R/8/1": アクセスが拒否されました
理由は、R 関数でパスの読み取りが試みられ、組み込みのユーザー グループ SQLRUserGroup に読み取りアクセス権がない場合は失敗するためです。 発生した警告によって現在の R スクリプトの実行がブロックされることはありませんが、ユーザーが他の R スクリプトを実行するたびに警告が繰り返し発生する可能性があります。
SQL Server が既定の場所にインストールされている場合は、すべての Windows ユーザーが Program Files
フォルダーに対する読み取りアクセス許可を持っているため、このエラーは発生しません。
この問題は、次のサービス リリースで解決されます。 回避策としては、ExternalLibraries
のすべての親フォルダーに対する読み取りアクセス権があるグループ SQLRUserGroup を指定します。
RevoScaleR の古いバージョンと新しいバージョンの間でのシリアル化エラー
シリアル化された形式を使用しているモデルをリモート SQL Server インスタンスに渡すと、次のエラーが発生する可能性があります。
Error in memDecompress(data, type = decompress) internal error -3 in memDecompress(2). (memDecompress(data, type = decompress) でのエラー、memDecompress(2) での内部エラー -3。)
このエラーが発生するのは、最新バージョンのシリアル化関数 rxSerializeModel を使用してモデルを保存したにもかかわらず、モデルを逆シリアル化する SQL Server インスタンスに古いバージョンの RevoScaleR API (SQL Server 2017 (14.x) CU 2 以前) が存在する場合です。
この回避策として、SQL Server 2017 (14.x) インスタンスを CU 3 以降にアップグレードします。
API のバージョンが同じ場合、または古いシリアル化関数で保存されたモデルを、新しいバージョンのシリアル化 API を使用するサーバーに移動する場合は、このエラーは発生しません。
つまり、シリアル化操作と逆シリアル化操作の両方に、同じバージョンの RevoScaleR を使用します。
リアルタイム スコアリングで、ツリー モデルとフォレスト モデルの learningRate パラメーターが正しく処理されない
デシジョン ツリーまたはデシジョン フォレストのメソッドを使用してモデルを作成し、学習速度を指定した場合、sp_rxpredict
または SQL の PREDICT
関数を使用すると、rxPredict
を使用した場合と比較して、一貫性のない結果が表示されることがあります。
原因は、シリアル化されたモデルを処理する API のエラーであり、rxBTrees などの learningRate
パラメーターに限定されています。
この問題は、次のサービス リリースで解決されます。
R ジョブのプロセッサ アフィニティに関する制限事項
SQL Server 2016 (13.x) の初期リリース ビルドでは、最初の k グループの CPU に対してのみ、プロセッサのアフィニティを設定できます。 たとえば、サーバーが 2 k グループの 2 ソケット マシンである場合、最初の k グループのプロセッサのみが R プロセスに使用されます。 R スクリプト ジョブのリソース ガバナンスを構成するときも、同じ制限が適用されます。
この問題は SQL Server 2016 (13.x) Service Pack 1 で修正されました。 最新のサービス リリースにアップグレードすることをお勧めします。
適用対象: SQL Server 2016 (13.x) R Services (RTM バージョン)
SQL Server コンピューティング コンテキストでのデータの読み取り時に列の型を変更できない
コンピューティング コンテキストが SQL Server インスタンスに設定されている場合は、colClasses 引数 (または他の同様の引数) を使用して、R コードで列のデータ型を変更できません。
たとえば、CRSDepTimeStr 列がまだ整数でない場合、次のステートメントでエラーが発生します。
data <- RxSqlServerData(
sqlQuery = "SELECT CRSDepTimeStr, ArrDelay FROM AirlineDemoSmall",
connectionString = connectionString,
colClasses = c(CRSDepTimeStr = "integer"))
回避策として、CAST
または CONVERT
を使用し、正しいデータ型を使用して R にデータを提示するように、SQL クエリを書き直します。 一般に、R コードでデータを変更するのではなく、SQL を使用してデータを処理した方が、パフォーマンスが向上します。
適用対象: SQL Server 2016 (13.x) R Services
シリアル化されたモデルのサイズの制限
モデルを SQL Server のテーブルに保存するときは、モデルをシリアル化し、バイナリ形式で保存する必要があります。 理論的には、この方法で格納できるモデルの最大サイズは 2 GB です。これは SQL Server での varbinary 列の最大サイズです。
さらに大きいモデルを使用する必要がある場合は、次の回避策を使用できます。
モデルのサイズを小さくするための手順を実行します。 一部のオープン ソースの R パッケージでは、モデル オブジェクトに大量の情報が収められており、この情報の多くは展開で削除される場合があります。
機能の選択を使用して不要な列を削除してください。
オープン ソースのアルゴリズムを使用している場合は、MicrosoftML または RevoScaleR の対応するアルゴリズムを使用した同様の実装を検討してください。 これらのパッケージは、展開シナリオに合わせて最適化されています。
前の手順を使用してモデルを合理化し、サイズを削減した後は、基の R の memCompress 関数を使用して、SQL Server に渡す前にモデルのサイズを縮小できるかどうかを確認します。 このオプションは、モデルが 2 GB の制限に近い場合に最適です。
それより大きいモデルでは、varbinary 列を使用するのではなく、SQL Server の FileTable 機能を使用してモデルを格納できます。
FileTable を使用するには、ファイアウォールの例外を追加する必要があります。これは、FileTable に格納されたデータは SQL Server の Filestream ファイル システム ドライバーによって管理され、既定のファイアウォール規則ではネットワーク ファイルへのアクセスがブロックされるためです。 詳しくは、「FileTable の前提条件の有効化」をご覧ください。
FileTable を有効にした後、モデルを書き込むには、FileTable API を使用して SQL からパスを取得した後、コードからその場所にモデルを書き込みます。 モデルを読み取る必要がある場合は、SQL Server からパスを取得した後、そのパスを使用してスクリプトからモデルを呼び出します。 詳しくは、「ファイル I/O API を使用した FileTable へのアクセス」をご覧ください。
SQL Server コンピューティング コンテキストで R コードを実行するときにワークスペースをクリアしないようにする
SQL Server コンピューティング コンテキストで R コードを実行中に R コマンドを使用してオブジェクトのワークスペースをクリアする場合、または sp_execute_external_script を使用して呼び出した R スクリプトの一部としてワークスペースをクリアする場合に、"ワークスペース オブジェクト revoScriptConnection が見つからない" というエラーが発生することがあります
revoScriptConnection
は、 SQL Serverから呼び出される R セッションに関する情報を含む R ワークスペース内のオブジェクトです。 ただし、R コードにワークスペースをクリアするためのコマンド ( rm(list=ls()))
など) が含まれている場合は、R ワークスペース内のセッションおよび他のオブジェクトに関するすべての情報もクリアされます。
回避策としては、SQL Server で R を実行しているときは、変数や他のオブジェクトを無差別にクリアしないようにします。 R コンソールでの操作時にワークスペースをクリアすることはよくありますが、意図しない結果になる場合があります。
- 特定の変数を削除するには、R の
remove
関数を使用します (例:remove('name1', 'name2', ...)
) - 削除する変数が複数ある場合は、リストに一時変数の名前を保存し、ガベージ コレクションを定期的に実行します。
R スクリプトの入力として提供できるデータに対する制限事項
次の種類のクエリ結果は、R スクリプトでは使用できません。
AlwaysEncrypted 列を参照する Transact-SQL クエリのデータ。
マスクされた列を参照する Transact-SQL クエリのデータ。
R スクリプトでマスクされたデータを使用する必要がある場合、考えられる次善策として、一時テーブルにデータのコピーを作成し、代わりにそのデータを使用します。
係数として文字列を使用すると、パフォーマンスが低下することがある
係数として文字列型の変数を使用すると、R の演算に使用されるメモリの量が大幅に増えることがあります。 これは、R に関して一般に知られている問題であり、それについての多くの記事があります。 たとえば、「Factors aren't first-class citizens in R」 (R では、要素は第一級オブジェクトではない) (「R-bloggers」、John Mount 著) や「stringsAsFactors: An unauthorized biography」 (stringsAsFactors: 非公式バイオグラフィ) (Roger Peng 著) を参照してください。
この問題は SQL Server だけのものではありませんが、SQL Server では R コードの実行のパフォーマンスに大きく影響する可能性があります。 通常、文字列は varchar または nvarchar として格納され、文字列データの列に一意の値が多数含まれている場合、R で内部的にこれらを整数に変換したり文字列に戻したりする処理によって、メモリ割り当てエラーが発生する可能性もあります。
他の操作のために文字列データ型がどうしても必要な場合を除き、データ準備の一部として文字列値を数値 (整数) データ型にマップすると、パフォーマンスとスケーリングの観点で有用です。
この問題とその他のヒントについては、「R Services のパフォーマンス - データの最適化」をご覧ください。
引数 varsToKeep と varsToDrop が SQL Server データ ソースでサポートされていない
rxDataStep 関数を使用してテーブルに結果を書き込む場合、操作の一部として含める列または除外する列を指定する便利な方法として、varsToKeep と Varstokeep を使用する方法があります。 ただし、これらの引数は SQL Server データ ソースではサポートされていません。
sp_execute_external_script
での SQL データ型の制限付きサポート
SQL でサポートされているデータ型の一部を R で使用できません。回避策として、サポートされていないデータ型をサポートされているデータ型にキャストしてから、sp_execute_external_script
にデータを渡すことを検討してください。
詳しくは、R のライブラリとデータ型に関する記事をご覧ください。
varchar 列で Unicode 文字列を使用すると、文字列が破損する可能性がある
SQL Server から R/Python に varchar 列で Unicode データを渡すと、文字列が破損する可能性があります。 これは、SQL Server の照合順序でのこれらの Unicode 文字列に対するエンコードが、R/Python で使用される既定の UTF-8 エンコードと一致しない可能性があるためです。
SQL Server から R/Python に ASCII 以外の文字列データを送るには、UTF-8 エンコード (SQL Server 2019 (15.x) で使用可能) を使用するか、nvarchar 型を使用します。
sp_execute_external_script
からは raw
型の値を 1 つしか返せない
R から binary データ型 (R の raw データ型) を返すときは、出力データ フレームで値を送る必要があります。
raw 以外のデータ型では、OUTPUT キーワードを追加することにより、ストアド プロシージャの結果と共にパラメーター値を返すことができます。 詳しくは、「パラメーター」をご覧ください。
raw 型の値が含まれる複数の出力セットを使用する必要がある場合、可能な回避策は、ストアド プロシージャの呼び出しを複数回行うか、ODBC を使用して結果セットを SQL Server に返送することです。
精度の損失
Transact-SQL と R ではさまざまなデータ型がサポートされているため、変換時に数値データ型の精度が損なわれる可能性があります。
暗黙的なデータ型変換について詳しくは、R のライブラリとデータ型に関する記事をご覧ください。
transformFunc パラメーターを使用するときの変数スコープ エラー
モデリングの間にデータを変換するには、rxLinmod
や rxLogit
などの関数で transformFunc 引数を渡すことができます。 ただし、入れ子になった関数呼び出しでは、呼び出しがローカル コンピューティング コンテキストで正しく機能していても、SQL Server のコンピューティング コンテキストではスコープ エラーが発生する可能性があります。
The sample data set for the analysis has no variables (分析用のサンプル データ セットに変数がありません)
たとえば、ローカル グローバル環境で 2 つの関数 f
と g
が定義されており、g
で f
を呼び出すものとします。 g
が含まれる分散またはリモートの呼び出しでは、リモート呼び出しに f
と g
の両方を渡した場合でも、f
が見つからないため、g
の呼び出しがこのエラーで失敗する可能性があります。
この問題が発生した場合は、 f
の定義内の、通常 g
が g
を呼び出す場所より前の任意の場所に、 f
の定義を組み込むことで問題を回避できます。
次に例を示します。
f <- function(x) { 2*x * 3 }
g <- function(y) {
a <- 10 * y
f(a)
}
このエラーを回避するには、次のように定義を書き直します。
g <- function(y){
f <- function(x) { 2*x +3}
a <- 10 * y
f(a)
}
RevoScaleR を使用したデータのインポートと操作
データベースから varchar 列が読み取られるときに、空白文字が削除されます。 これを防ぐには、空白以外の文字で文字列を囲みます。
rxDataStep
などの関数を使用して varchar 列が含まれるデータベース テーブルを作成すると、データのサンプルに基づいて列幅が推定されます。 幅が増減する可能性がある場合、すべての文字列を共通の長さにして空白を埋めることが必要な場合があります。
rxImport
または rxTextToXdf
の繰り返しの呼び出しを使用して行のインポートと追加を実行し、複数の入力ファイルを 1 つの .xdf ファイルに結合する場合、変換を使用した変数のデータ型の変更はサポートされていません。
rxExec
の制限付きサポート
SQL Server 2016 (13.x) では、RevoScaleR パッケージによって提供される rxExec
関数は、シングルスレッド モードでのみ使用できます。
rxGetVarInfo をサポートするためにパラメーターの最大サイズを増やす
非常に多くの変数 (40,000 個以上など) が含まれたデータ セットを使用する場合は、rxGetVarInfo
などの関数を使用するために R を開始するときに、max-ppsize
フラグを設定する必要があります。 max-ppsize
フラグは、ポインター保護スタックの最大サイズを指定します。
R コンソール (RGui.exe や RTerm.exe など) を使用している場合、次のように入力することで max-ppsize の値を 500,000 に設定できます。
R --max-ppsize=500000
rxDTree 関数に関する問題
rxDTree
関数では、式内変換は現在サポートされていません。 特に、係数を即座に作成するための F()
構文の使用はサポートされていません。 ただし、数値データは自動的にビン分割されます。
順序付けされた係数は、 rxDTree
を除くすべての RevoScaleR 分析関数の係数と同様に処理されます。
R での OutputDataSet としての data.table
R で OutputDataSet
として data.table
を使用することは、SQL Server 2017 (14.x) 累積的な更新プログラム 13 (CU 13) 以前ではサポートされていません。 次のメッセージが表示されることがあります。
Msg 39004, Level 16, State 20, Line 2
A 'R' script error occurred during execution of
'sp_execute_external_script' with HRESULT 0x80004004.
Msg 39019, Level 16, State 2, Line 2
An external script error occurred:
Error in alloc.col(newx) :
Internal error: length of names (0) is not length of dt (11)
Calls: data.frame ... as.data.frame -> as.data.frame.data.table -> copy -> alloc.col
Error in execution. Check the output for more information.
Error in eval(expr, envir, enclos) :
Error in execution. Check the output for more information.
Calls: source -> withVisible -> eval -> eval -> .Call
Execution halted
R での OutputDataSet
としての data.table
は、SQL Server 2017 (14.x) 累積的な更新プログラム 14 (CU 14) 以降ではサポートされています。
ライブラリのインストール中に長いスクリプトの実行が失敗する
実行時間の長い外部スクリプト セッションを実行し、dbo で並列に別のデータベースにライブラリをインストールしようとすると、スクリプトが終了する場合があります。
たとえば、master
データベースに対してこの外部スクリプトを実行する場合などです。
USE MASTER
DECLARE @language nvarchar(1) = N'R'
DECLARE @script nvarchar(max) = N'Sys.sleep(100)'
DECLARE @input_data_1 nvarchar(max) = N'select 1'
EXEC sp_execute_external_script @language = @language, @script = @script, @input_data_1 = @input_data_1 with result sets none
go
その間に並列に dbo でライブラリを LibraryManagementFunctional にインストールします。
USE [LibraryManagementFunctional]
go
CREATE EXTERNAL LIBRARY [RODBC] FROM (CONTENT = N'/home/ani/var/opt/mssql/data/RODBC_1.3-16.tar.gz') WITH (LANGUAGE = 'R')
go
DECLARE @language nvarchar(1) = N'R'
DECLARE @script nvarchar(14) = N'library(RODBC)'
DECLARE @input_data_1 nvarchar(8) = N'select 1'
EXEC sp_execute_external_script @language = @language, @script = @script, @input_data_1 = @input_data_1
go
master
データベースに対する以前の実行時間の長い外部スクリプトは、次のエラー メッセージを出して終了します。
'sp_execute_external_script' に HRESULT 0x800704d4 を指定して実行中に、'R' スクリプト エラーが発生しました。
回避策
実行時間の長いクエリと並行してライブラリのインストールを実行しないでください。 または、インストールが完了した後で、実行時間の長いクエリを再実行します。
適用対象: SQL Server 2019 (15.x) on Linux とビッグ データ クラスターのみ。
並列実行を含む R スクリプトの実行時に SQL Server が応答を停止する
SQL Server 2019 (15.x) には、並列実行を使用する R スクリプトに影響を与える回帰が含まれています。 例としては、RxLocalPar
計算コンテキストでの rxExec
の使用や、並行パッケージを使用するスクリプトなどがあります。 この問題は、SQL Server での実行中に null デバイスへの書き込みを行った際に並列パッケージで発生するエラーが原因で発生します。
適用対象: SQL Server 2019 (15.x)。
money/numeric/decimal/bigint データ型の精度の損失
sp_execute_external_script
で R スクリプトを実行すると、money、numeric、decimal、および bigint データ型が入力データとして許可されます。 ただし、それらは R の数値型に変換されるため、きわめて大きい値や小数点値を持つ値で精度の損失が発生します。
- money:セント値が不正確になり、警告が発行されることがあります。Warning: unable to precisely represent cents values. (警告: セント値を正確に表すことができません。)
- numeric/decimal: R スクリプトによる
sp_execute_external_script
では、これらのデータ型の完全な範囲がサポートされておらず、特に分数を持つもので、最後の 10 進の数桁が変更されることがあります。 - bigint:R では最大 53 ビットの整数だけがサポートされ、その後精度が失われ始めます。
rxExecBy 関数に関する問題 - rxExecBy 関数でインストールされているパッケージが見つからない
rxExecBy
関数が呼び出されると、新しい R ランタイム プロセスが開始されます。 この新しいプロセスには更新されたライブラリ パスがないため、既定のライブラリ パス以外の場所にインストールされたパッケージは実行中に見つかりません。
回避策
R パッケージへのパスを明示的に更新する必要があります。 パッケージが外部のライブラリ パスにインストールされている場合、次の R スクリプトを使ってライブラリ パスを更新できます: .libPaths(c(Sys.getenv("MRS_EXTLIB_USER_PATH"), Sys.getenv("MRS_EXTLIB_SHARED_PATH"), .libPaths()))
Python スクリプトの実行に関する問題
このセクションでは、SQL Server での Python の実行に固有の既知の問題と、Microsoft によって公開されている Python パッケージ (revoscalepy や microsoftml など) に関連する問題について説明します。
モデルへのパスが長すぎると、事前トレーニング済みモデルの呼び出しが失敗する
SQL Server 2017 (14.x) の早期リリースに事前トレーニング済みモデルをインストールした場合、トレーニング済みモデル ファイルへの完全なパスが、Python で読み取るには長すぎる可能性があります。 この制限は、後のサービス リリースでは修正されています。
考えられる回避策がいくつかあります。
- 事前トレーニング済みモデルをインストールするときに、カスタムの場所を選択します。
- 可能な場合は、
C:\SQL\MSSQL14.MSSQLSERVER
などの短いパスを使用して、カスタム インストール パスに SQL Server インスタンスをインストールします。 - Windows ユーティリティ Fsutil を使用して、モデル ファイルを短いパスにマップするハード リンクを作成します。
- 最新のサービス リリースに更新します。
シリアル化されたモデルを SQL Server に保存するときのエラー
リモート SQL Server インスタンスにモデルを渡し、revoscalepy で rx_unserialize
関数を使用してバイナリモデルを読み取ろうとすると、次のエラーが表示されることがあります。
NameError: 名前 'rx_unserialize_model' が定義されていません
このエラーが発生するのは、最新バージョンのシリアル化関数を使用してモデルを保存したのに、モデルを逆シリアル化する SQL Server インスタンスでシリアル化 API が認識されない場合です。
問題を解決するには、SQL Server 2017 (14.x) インスタンスを CU 3 以降にアップグレードします。
varbinary 変数を初期化できないと、BxlServer
でエラーが発生する
sp_execute_external_script
を使用して SQL Server で Python コードを実行し、そのコードに varbinary(max)、varchar(max)、またはそれに類する型の出力変数がある場合は、変数を初期化するか、スクリプトの一部として設定する必要があります。 そうしないと、データ交換コンポーネント BxlServer でエラーが発生し、動作が停止します。
この制限は、今後のサービス リリースで修正される予定です。 回避策としては、変数が Python スクリプト内で初期化されていることを確認します。 次の例のように、任意の有効な値を使用できます。
declare @b varbinary(max);
exec sp_execute_external_script
@language = N'Python'
, @script = N'b = 0x0'
, @params = N'@b varbinary(max) OUTPUT'
, @b = @b OUTPUT;
go
declare @b varchar(30);
exec sp_execute_external_script
@language = N'Python'
, @script = N' b = "" '
, @params = N'@b varchar(30) OUTPUT'
, @b = @b OUTPUT;
go
Python コードが正常に実行された場合のテレメトリに関する警告
SQL Server 2017 (14.x) CU 2 以降では、Python コードが正常に実行された場合でも、次のメッセージが表示されることがあります。
外部スクリプトからの STDERR メッセージ: ~PYTHON_SERVICES\lib\site-packages\revoscalepy\utils\RxTelemetryLoggerSyntaxWarning: telemetry_state がグローバル宣言の前で使用されています
この問題は、SQL Server 2017 (14.x) 累積的な更新プログラム 3 (CU 3) で修正されました。
numeric、decimal、money の各データ型がサポートされていない
SQL Server 2017 (14.x) 累積的な更新プログラム 12 (CU 12) 以降では、sp_execute_external_script
で Python を使用する場合、WITH RESULT SETS では数値、10 進、通貨の各データ型がサポートされていません。 次のメッセージが表示されることがあります。
[コード: 39004、SQL の状態: S1000] HRESULT 0x80004004 で 'sp_execute_external_script' の実行中に、'Python' スクリプト エラーが発生しました。
[コード: 39019、SQL の状態: S1000] 外部スクリプト エラーが発生しました:
SqlSatelliteCall error: Unsupported type in output schema. (SqlSatelliteCall エラー: 出力スキーマでサポートされていない型です。) サポートされている型: bit、smallint、int、datetime、smallmoney、real、および float。 char、varchar は部分的にサポートされています。
これは、SQL Server 2017 (14.x) 累積的な更新プログラム 14 (CU 14) で修正されました。
Linux で pip を使用して Python パッケージをインストールするときの不正インタープリター エラー
SQL Server 2019 (15.x) で pip を使用しようとした場合。 次に例を示します。
/opt/mssql/mlservices/runtime/python/bin/pip -h
次のエラーが表示されます。
bash:/opt/mssql/mlservices/runtime/python/bin/pip:/opt/microsoft/mlserver/9.4.7/bin/python/python: 不正インタープリター: No such file or directory
回避策
Python Package Authority (PyPA) から pip をインストールします。
wget 'https://bootstrap.pypa.io/get-pip.py'
/opt/mssql/mlservices/bin/python/python ./get-pip.py
推奨
「sqlmlutils を使用して Python パッケージをインストールする」をご覧ください。
適用対象: SQL Server 2019 (15.x) on Linux
SQL Server 2019 を Windows にインストールした後、pip
を使用して Python パッケージをインストールできない
Windows に SQL Server 2019 (15.x) をインストールした後、DOS コマンド ラインから pip を使用して python パッケージをインストールしようとすると失敗します。 次に例を示します。
pip install quantfolio
次のエラーが返されます。
pip は TLS/SSL を必要とする場所で構成されていますが、Python の SSL モジュールは使用できません。
これは、Anaconda パッケージに固有の問題です。 今後のサービス リリースで修正される予定です。
回避策
次のファイルをコピーします。
libssl-1_1-x64.dll
libcrypto-1_1-x64.dll
コピー元フォルダー
C:\Program Files\Microsoft SQL Server\MSSSQL15.MSSQLSERVER\PYTHON_SERVICES\Library\bin
コピー先フォルダー
C:\Program Files\Microsoft SQL Server\MSSSQL15.MSSQLSERVER\PYTHON_SERVICES\DLLs
その後、新しい DOS コマンド シェル プロンプトを開きます。
適用対象: SQL Server 2019 (15.x) on Windows
Linux で libc++abo.so
を使用せずに sp_execute_external_script
を使用するときのエラー
libc++abi.so
がインストールされていないクリーンな Linux マシンでは、sp_execute_external_script
(SPEES) クエリを実行すると、"そのようなファイルやディレクトリはない" というエラーで失敗します。
例:
EXEC sp_execute_external_script
@language = N'Python'
, @script = N'
OutputDataSet = InputDataSet'
, @input_data_1 = N'select 1'
, @input_data_1_name = N'InputDataSet'
, @output_data_1_name = N'OutputDataSet'
WITH RESULT SETS (([output] int not null));
Msg 39012, Level 16, State 14, Line 0
Unable to communicate with the runtime for 'Python' script for request id: 94257840-1704-45E8-83D2-2F74AEB46CF7. Please check the requirements of 'Python' runtime.
STDERR message(s) from external script:
Failed to load library /opt/mssql-extensibility/lib/sqlsatellite.so with error libc++abi.so.1: cannot open shared object file: No such file or directory.
SqlSatelliteCall error: Failed to load library /opt/mssql-extensibility/lib/sqlsatellite.so with error libc++abi.so.1: cannot open shared object file: No such file or directory.
STDOUT message(s) from external script:
SqlSatelliteCall function failed. Please see the console output for more information.
Traceback (most recent call last):
File "/opt/mssql/mlservices/libraries/PythonServer/revoscalepy/computecontext/RxInSqlServer.py", line 605, in rx_sql_satellite_call
rx_native_call("SqlSatelliteCall", params)
File "/opt/mssql/mlservices/libraries/PythonServer/revoscalepy/RxSerializable.py", line 375, in rx_native_call
ret = px_call(functionname, params)
RuntimeError: revoscalepy function failed.
Total execution time: 00:01:00.387
回避策
次のコマンドを実行します。
sudo cp /opt/mssql/lib/libc++abi.so.1 /opt/mssql-extensibility/lib/
適用対象: SQL Server 2019 (15.x) on Linux
Linux 上の SQL Server 2022 CU6 により Ubuntu 20.04 で sp_execute_external_script
を実行中の一般的なエラー
Ubuntu 20.04 に Linux 用 SQL Server 2022 CU6 をインストールすると、R および Python スクリプトでの sp_execute_external_script
の実行時に次のエラーが発生する可能性があります。
Msg 39012, Level 16, State 14, Line 0
Unable to communicate with the runtime for 'R' script for request id: 94257840-1704-45E8-83D2-2F74AEB46CF7. Please check the requirements of 'R' runtime.
STDERR message(s) from external script:
/usr/lib/R/library/RevoScaleR/rxLibs/x64/libExaCore.so.2(_Z21CriticalSignalHandleri+0x29)[0x7f2568289d89]
/usr/lib/x86_64-linux-gnu/libc.so.6(+0x43090)[0x7f2568d66090]
回避策
次のコマンドを実行してパッケージの依存関係 libssl-dev
をインストールします。すると、SQL Server はシステムによって提供される共有ライブラリ libssl
と libcrypto
を解決できます。
sudo apt-get update
sudo apt-get install libssl-dev
Linux で mssql-launchpadd
を実行すると modprobe
でファイアウォール規則の作成エラーが発生する
sudo journalctl -a -u mssql-launchpadd
を使用して mssql-launchpadd
のログを表示すると、次の出力のようなファイアウォール規則の作成エラーが表示される場合があります。
-- Logs begin at Sun 2021-03-28 12:03:30 PDT, end at Wed 2022-10-12 13:20:17 PDT. --
Mar 22 16:57:51 sqlVm systemd[1]: Started Microsoft SQL Server Extensibility Launchpad Daemon.
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: Extensibility Log Header: <timestamp> <process> <sandboxId> <sessionId> <message>
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: No extensibility section in /var/opt/mssql/mssql.conf file. Using default settings.
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: DataDirectories = /bin:/etc:/lib:/lib32:/lib64:/sbin:/usr/bin:/usr/include:/usr/lib:/usr/lib32:/usr/lib64:/usr/libexec/gcc:/usr/sbin:/usr/share:/var/lib:/opt/microsoft:/opt/mssql-extensibility:/opt/mssql/mlservices:/opt/mssql/lib/zulu-jre-11:/opt/mssql-tools
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: [RG] SQL Extensibility Cgroup initialization is done.
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: Found 1 IP address(es) from the bridge.
Mar 22 16:57:51 sqlVm launchpadd[195676]: modprobe: ERROR: could not insert 'ip6_tables': Operation not permitted
Mar 22 16:57:51 sqlVm launchpadd[195673]: ip6tables v1.8.4 (legacy): can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)
Mar 22 16:57:51 sqlVm launchpadd[195673]: Perhaps ip6tables or your kernel needs to be upgraded.
Mar 22 16:57:51 sqlVm launchpadd[195678]: modprobe: ERROR: could not insert 'ip6_tables': Operation not permitted
Mar 22 16:57:51 sqlVm launchpadd[195677]: ip6tables v1.8.4 (legacy): can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)
Mar 22 16:57:51 sqlVm launchpadd[195677]: Perhaps ip6tables or your kernel needs to be upgraded.
Mar 22 16:57:51 sqlVm launchpadd[195670]: 2022/03/22 16:57:51 [setnetbr] ERROR: Failed to set firewall rules: exit status 3
回避策
次のコマンドを実行して modprobe
を構成し、SQL Server Launchpad サービスを再起動します。
sudo modprobe ip6_tables
sudo systemctl restart mssql-launchpadd
適用対象: SQL Server 2019 (15.x) on Linux 以降
sqlmlutils
を使用して tensorflow
パッケージをインストールできない
sqlmlutils パッケージは SQL Server 2019 (15.x) に Python パッケージをインストールするために使用します。 Microsoft Visual C++ 2015-2019 Redistributable (x64) のダウンロード、インストールおよび更新を行う必要があります。 ただし、tensorflow
パッケージは、sqlmlutils を使用してインストールできません。 tensorflow
パッケージは、SQL Server にインストールされているバージョンより新しい numpy
のバージョンに依存しています。 ただし、numpy
は、tensorflow
をインストールしようとしたときに sqlmlutils
で更新できないプレインストールされたシステム パッケージです。
回避策
管理者モードでコマンド プロンプトを使用して、次のコマンドを実行し、"MSSQLSERVER" をお使いの SQL インスタンスの名前に置き換えます。
"C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\PYTHON_SERVICES\python.exe" -m pip install --upgrade tensorflow
"TLS/SSL" エラーが発生した場合は、この記事で先述した「7.pip を使用して Python パッケージをインストールできない」を参照してください。
適用対象: SQL Server 2019 (15.x) on Windows
Revolution R Enterprise と Microsoft R Open
このセクションでは、Revolution Analytics によって提供される R の接続、開発、およびパフォーマンス ツールに固有の問題を示します。 これらのツールは、以前のプレリリース版の SQL Server で提供されていました。
一般的には、これらの以前のバージョンをアンインストールして、最新バージョンの SQL Server または Microsoft R Server をインストールすることをお勧めします。
Revolution R Enterprise がサポートされていない
Revolution R Enterprise をインストールして任意のバージョンの R Services (データベース内) と共存させることはできません。
Revolution R Enterprise の既存ライセンスがある場合は、SQL Server インスタンスおよび SQL Server インスタンスへの接続に使用するワークステーションとは別のコンピューターに、ライセンスを配置する必要があります。
一部のプレリリース版の R Services (データベース内) には、Revolution Analytics によって作成された Windows 用の R 開発環境が含まれていました。 このツールは提供されなくなっており、サポートされていません。
R Services (データベース内) との互換性のため、代わりに Microsoft R Client をインストールすることをお勧めします。 R Tools for Visual Studio と Visual Studio Code でも、Microsoft R ソリューションがサポートされています。
SQLite ODBC ドライバーと RevoScaleR に関する互換性の問題
SQLite ODBC ドライバーのリビジョン 0.92 は、RevoScaleR と互換性がありません。 リビジョン 0.88 - 0.91 および 0.93 以降には、互換性があることがわかっています。