我目前正在使用 Python 将一些代码从 Spark 移植到 MSSQL Analytical Services。一切都很好,花花公子,但我不确定我的解决方案是否适合脚本的多个输入。
考虑以下代码片段:
DROP PROCEDURE IF EXISTS SampleModel;
GO
CREATE PROCEDURE SampleModel
AS
BEGIN
exec sp_execute_external_script
@language =N'Python',
@script=N'
import sys
sys.path.append("C:\path\to\custom\package")
from super_package.sample_model import run_model
OutputDataSet = run_model()'
WITH RESULT SETS ((Score float));
END
GO
INSERT INTO [dbo].[SampleModelPredictions] (prediction) EXEC [dbo].[SampleModel]
GO
我有一个名为的自定义包super_package
和一个名为sample_model
. 由于这个模型使用多个数据库表作为输入,我宁愿把所有东西都放在一个地方,我有一个模块可以连接到数据库并直接获取数据:
def go_go_get_data(query, config):
return rx_data_step(RxSqlServerData(
sql_query=query,
connection_string=config.connection_string,
user=config.user,
password=config.password))
在run_model()
函数内部,我使用函数从数据库中获取所有必要的数据go_go_get_data
。
如果数据太大而无法一次性处理,我会进行一些分页。一般来说,我不能加入表格,所以这个解决方案不起作用。问题是:这是解决这个问题的正确方法吗?还是我错过了什么?目前这可行,但由于我仍处于开发/试用阶段,我无法确定这是否会扩展。我宁愿使用存储过程的参数,也不愿在 Python 上下文中获取。