如何在R中执行RxSqlServerData方法?

时间:2018-09-26 11:26:15

标签: r sql-server microsoft-r

我想创建一个模型并将其部署到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的新手。任何帮助将不胜感激。

1 个答案:

答案 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)