我想创建一个模型并将其部署到SQL Server中,以便与新的PREDICT()内置函数一起使用。 但是,似乎我被R中的RxSqlServerData方法困住了。 每当我运行脚本时,都会出现此错误:
rxExecJob(rxCallInfo(matchCall,.rxDeprecated = “ covariance”),:数据必须是RxSqlServerData数据源,用于 此计算上下文。
到目前为止,这是我的代码:
#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的新手。任何帮助将不胜感激。
答案 0 :(得分:1)
跑步时
cc <- RxInSqlServer(connectionString = connStr);
rxSetComputeContext(cc)
您告诉R在SQL 计算上下文中运行任何Microsoft分析功能(基本上是以rx开头的功能)。这意味着所有处理将在数据库内部进行。 R本质上是充当SQL的外壳。
自然地,这要求您使用的数据集实际上必须在数据库中:表,视图或查询返回结果集。
随后运行时
risk <- rxImport(input_data)
LinReg_model <- rxLinMod(RiskFPD60 ~ Age, data = risk)
您将数据导入本地数据框中,然后尝试在其上拟合模型。但是您之前曾告诉R在数据库中进行数字加数字运算,并且您的数据是本地的。所以会抱怨。
解决方案是将RxSqlServerData
对象直接传递给rxLinMod
:
LinReg_model <- rxLinMod(RiskFPD60 ~ Age, data = input_data)