gpt4 book ai didi

python - sp_execute_external_script 内存变量中的 Python 以加快进程

转载 作者:行者123 更新时间:2023-12-04 15:02:25 26 4
gpt4 key购买 nike

有没有办法在每次使用 sp_execute_external_script 执行脚本时使用 pickle.loads 加载一个变量(比如全局变量)?

我有一个使用预处理矩阵处理数据的 Python 脚本。我使用脚本 A 将矩阵保存在表中。

--Script A
DECLARE @matrix VARBINARY(MAX)
EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
...
matrix = pickle.dumps(processed_matrix)
'
, @input_data_1 = N'SOME SELECT QUERY'
, @params = N'@matrix VARBINARY(MAX) OUTPUT'
, @matrix = @matrix OUTPUT

DELETE FROM MatrixTable
INSERT INTO MatrixTable(matrix) VALUES(@matrix)

然后每次运行脚本B时通过一个参数发送矩阵

--Script B
DECLARE @matrix VARBINARY(MAX)
SELECT @matrix = matrix
FROM MatrixTable

EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
preprocessed_matrix = pickle.loads(matrix)
...
'
, @input_data_1 = N'SOME SELECT QUERY'
, @params = N'@matrix VARBINARY(MAX)'
, @matrix = @matrix

因为矩阵只处理一次并且加载多次,所以我认为如果脚本 A 在服务器上运行启动并将生成的矩阵存储在 sql 内存中,可以从脚本 B 访问而无需保存和加载,这可能会很好一张 table 。有没有办法将矩阵存储在内存中,这样我就不需要将它保存到表中并使用 pickle 加载它以使其更快?

最佳答案

你真的需要 pickle 矩阵并以这种方式保存吗?

我只是将矩阵转换为 pandas 数据框并将其存储到 SQL 表中。这样您就可以使用 SQL Server 缓存内存访问它。将其用作重新加载的表。

根据您的数据量,这应该是最佳方法。请记住,SQL Server 将数据存储在 8k 页中,因此将像 VARBINARY(MAX) 这样的 lob 存储到单个列中意味着 SQL Server 必须将数据拆分到多个页面中。

在 SQL 表中逐行显示矩阵是通过 SQL Server 执行此操作的首选方法。它是为此构建和优化的。

关于python - sp_execute_external_script 内存变量中的 Python 以加快进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66739632/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com