Как выполнить метод RxSqlServerData в R? - PullRequest
0 голосов
/ 26 сентября 2018

Я хотел бы создать и развернуть модель в SQL Server, чтобы использовать ее с новой встроенной функцией PREDICT ().Однако кажется, что я застрял с методом RxSqlServerData в R. Каждый раз, когда я запускаю свой скрипт, я получаю эту ошибку:

Ошибка в 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 голосов
/ 27 сентября 2018

Когда вы запускаете

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

, вы указываете R запускать любые аналитические функции Microsoft (в основном те, которые начинаются с rx) в контексте вычисления SQL .Это означает, что вся обработка будет выполняться внутри базы данных.По сути, R действует как оболочка для SQL.

Естественно, для этого необходимо, чтобы набор данных, с которым вы работаете, действительно находился в базе данных: таблица, представление или запрос, возвращающий набор результатов.

Когда вы запускаете

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

, вы импортируете свои данные в локальный фрейм данных, а затем пытаетесь разместить на нем модель.Но вы ранее сказали R, чтобы он занимался обработкой чисел в базе данных, и ваши данные локальны.Так что он будет жаловаться.

Решение состоит в том, чтобы передать ваш RxSqlServerData объект непосредственно rxLinMod:

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