为啥我不能为 SQL Server 2019 创建外部语言?
Posted
技术标签:
【中文标题】为啥我不能为 SQL Server 2019 创建外部语言?【英文标题】:Why can't I create an EXTERNAL LANGUAGE for SQL Server 2019?为什么我不能为 SQL Server 2019 创建外部语言? 【发布时间】:2021-10-15 07:35:44 【问题描述】:我正在尝试了解我在 SQL Server 2019 中的外部语言设置有什么问题。
我无法使用我的语言“Test1”执行任何语句,该语言被设计为一种额外的 Python 外部语言。我的目标是拥有多个 Python 外部语言,这样我就可以为每个拥有单独的库,从而模拟虚拟环境。
我失败的脚本是:
EXEC sp_execute_external_script
@language =N'TEST1',
@script=N'
import pandas as pd
import sys
df = pd.DataFrame("Version": sys.path + [ sys.executable ])
OutputDataSet = df'
WITH RESULT SETS (([Version] nvarchar(256)));
此脚本使用 SQL Server 2019 机器学习服务提供的“Python”语言执行得很好。
我的(无用的)错误消息是:
消息 39004,第 16 级,状态 20,第 87 行 执行“sp_execute_external_script”期间发生“TEST1”脚本错误,HRESULT 为 0x80004004。
完成时间:2021-08-11T16:32:50.5880126-04:00
我的设置是:
-- "Ensure that Machine Learning Services and Language Extensions are installed"
EXEC sp_configure 'external scripts enabled', 1
RECONFIGURE WITH OVERRIDE;
GO
IF EXISTS(SELECT TOP 1 1 FROM sys.external_languages L WHERE L.language = 'TEST1')
BEGIN
DROP EXTERNAL LANGUAGE TEST1
END
GO
-- From: https://github.com/microsoft/sql-server-language-extensions/releases/tag/Python-v1.1.0
CREATE EXTERNAL LANGUAGE TEST1
FROM (CONTENT = N'C:\LanguageExtensions\python-lang-extension-windows-release.zip', FILE_NAME = 'pythonextension.dll');
GO
C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\ExtensibilityLog 处的错误日志说:
2021-08-11 16:32:50.349 启动进程 exthost.exe 成功!
2021-08-11 16:32:50.581 清理会话 ID 9D7958AD-7EC2-48B4-B7E2-0D48D35DA2B5 的上下文 2021-08-11 16:32:50.581 无法删除目录 C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\ExtensibilityData\Appcontainer1\9D7958AD-7EC2-48B4-B7E2-0D48D35DA2B5 与 HR 0x80070020。
2021-08-11 16:32:50.581 无法删除目录 C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\ExtensibilityData\Appcontainer1\26635237-9710-4B29-9233-5E72D1AA8204\Trace 中的文件与 HR 0x80070020。
2021-08-11 16:32:50.581 无法删除目录 C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\ExtensibilityData\Appcontainer1\26635237-9710-4B29-9233-5E72D1AA8204\Trace with HR 0x80070091.
2021-08-11 16:32:50.581 无法删除目录 C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\ExtensibilityData\Appcontainer1\26635237-9710-4B29-9233-5E72D1AA8204\Packages with HR 0x80070091.
2021-08-11 16:32:50.581 无法删除目录 C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\ExtensibilityData\Appcontainer1\FA7BEFC1-F529-43DB-B5D6-68F32EF94BB8,HR 为 0x80070020。
2021-08-11 16:32:50.581 无法删除目录 C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\ExtensibilityData\Appcontainer1\F401FD5A-8563-4361-BCBD-04570C1F6FA0,HR 为 0x80070020。
2021-08-11 16:32:50.581 无法删除目录 C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\ExtensibilityData\Appcontainer1\C83DDF61-F6E5-431B-9A2B-EC4EF545D506,HR 为 0x80070020。
2021-08-11 16:32:50.581 无法删除目录 C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\ExtensibilityData\Appcontainer1\685BE366-D4FE-4C91-83CC-DE1F04AC1FEB,HR 0x80070020。
2021-08-11 16:32:50.581 无法删除目录 C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\ExtensibilityData\Appcontainer1\26635237-9710-4B29-9233-5E72D1AA8204,HR 为 0x80070020。
我尝试过的事情:
我 BCP 将 external_language_file CONTENT varbinary 输出到磁盘,以确认它获得了正确的文件并且它具有正确的内容。如果你想试试这个,你还需要创建一个 .fmt 文件来确保没有前导字节。
我在 rlauncher.config 中关闭了清理并将 TRACE 级别设置为 4,以便更好地报告错误
我授予C:\ProgramData\MSSQLSERVER\Temp-PY
和C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\ExtensibilityData
下的AppContainer0、1、2 对“所有应用程序包”和“MSSQLLaunchpad”的完全控制权
我将C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\PYTHON_SERVICES
放在系统路径上
有什么想法吗?我觉得支持另一种 Python 语言应该很简单。
C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\PYTHON_SERVICES
提供的语言版本可能与https://github.com/microsoft/sql-server-language-extensions/releases/tag/Python-v1.1.0 的预期不符?
【问题讨论】:
【参考方案1】:-
确保您已安装 CU3+。
确保以 PYTHON_SERVICES 结尾的路径在系统 PATH 上,并且也是 PYTHONHOME 和 PYTHONPATH 的值。如果您安装了其他 python,这显然会破坏其他东西,因此您可能希望对 CREATE EXTERNAL LANGUAGE 命令使用 ENVIRONMENT_VARIABLES 参数,而不是设置这些系统范围。
我不为此解决方案承担风险或责任。使用风险自负。
【讨论】:
以上是关于为啥我不能为 SQL Server 2019 创建外部语言?的主要内容,如果未能解决你的问题,请参考以下文章