如何在 R 中执行 RxSqlServerData 方法?

How to execute RxSqlServerData method in R?

我想创建一个模型并将其部署到 SQL 服务器中,以便将其与新的 PREDICT() 内置函数一起使用。 但是,我似乎坚持使用 R 中的 RxSqlServerData 方法。 每当我 运行 我的脚本时,我都会收到此错误:

Error in rxExecJob(rxCallInfo(matchCall, .rxDeprecated = "covariance"), : Data must be an RxSqlServerData data source for this compute context.

到目前为止,这是我的代码:

#Logistic plain select sql query
#input_query = 'SELECT app.ClientAgeToApplicationDate AS Age, IIF(conc.FirstInstallmentDelay>60,1,0) AS FPD60 FROM dim.Application app JOIN dim.Contract con ON app.ApplicationID = con.ApplicationID JOIN dim.Contract_Calculated conc ON con.ContractID = conc.ContractId'

#LinReg aggregated query
input_query = '
        *SQL QUERY, too long to paste...*
    '

connStr <- paste("Driver=SQL Server; Server=", "czphaddwh01\dev",
                 ";Database=", "DWH_Staging", ";Trusted_Connection=true", sep = "");

#Set compute context to SQL Server. Does not load any data into a memory of the local client. OBDC can't.
cc <- RxInSqlServer(connectionString = connStr);
rxSetComputeContext(cc)

input_data <- RxSqlServerData(sqlQuery = input_query, connectionString = connStr)
risk <- rxImport(input_data)
#head(risk)

#Binary regression for non-aggregated sql query
#logit_model <- rxLogit(Age ~ FPD60, data = risk)

#LinReg for aggregated sql query
LinReg_model <- rxLinMod(RiskFPD60 ~ Age, data = risk)

我是 R 的新手。非常感谢任何帮助。

当你运行

cc <- RxInSqlServer(connectionString = connStr);
rxSetComputeContext(cc)

你告诉 R 运行 SQL 计算上下文 中的任何 Microsoft 分析函数(基本上是那些以 rx 开头的函数)。这意味着所有处理都将在数据库内部进行。 R 本质上是充当 shell 到 SQL.

当然,这要求您正在使用的数据集必须实际位于数据库中:table、视图或返回结果集的查询。

当你 运行

risk <- rxImport(input_data)
LinReg_model <- rxLinMod(RiskFPD60 ~ Age, data = risk)

您将数据导入本地数据框,然后尝试在其上拟合模型。但是您之前告诉 R 在数据库中执行 number-c运行ching,并且您的数据是本地的。所以它会报错。

解决方案是将您的 RxSqlServerData 对象直接传递给 rxLinMod:

LinReg_model <- rxLinMod(RiskFPD60 ~ Age, data = input_data)