StoredProcedure: хранимая процедура SQL Server: генератор класса
StoredProcedure
: создает объект хранимой процедуры SQL Server и, при необходимости, SQL-файл, содержащий запрос на создание хранимой процедуры. StoredProcedure$registrationVec содержит строки, представляющие запросы, необходимые для создания хранимой процедуры
Использование
StoredProcedure (func, spName, ..., filePath = NULL ,dbName = NULL,
connectionString = NULL, batchSeparator = "GO")
Аргументы
func
Допустимая функция R или строковое имя допустимой функции R: 1. Все переменные, на которых основывается функция, должны либо быть определены внутри функции, либо предоставлены в качестве входных параметров. Входные параметры могут содержать не более 1 кадра данных. 2. Функция должна возвращать либо кадр данных, либо именованный список, либо значение NULL. В списке может присутствовать лишь один кадр данных.
spName
Строка символов, задающая имя хранимой процедуры.
...
Необязательные входные и выходные параметры для хранимой процедуры должны быть объектами классов InputData, InputParameter или outputParameter.
filePath
Строка символов, указывающая путь к каталогу, в котором создается SQL-файл. Если указано значение NULL, SQL-файл не создается.
dbName
Строка символов, указывающая имя используемой базы данных.
connectionString
Строка символов, указывающая строку подключения.
batchSeparator
Требуемый разделитель пакетов SQL (уместно, только если определен filePath)
Значение
Объект хранимой процедуры SQL Server
Примеры
## Not run:
############# Example 1 #############
# etl1 - reads from and write directly to the database
etl1 <- function() {
# The query to get the data
qq <- "select top 10000 ArrDelay,CRSDepTime,DayOfWeek from AirlineDemoSmall"
# The connection string
conStr <- paste("Driver={ODBC Driver 13 for SQL Server};Server=.;Database=RevoTestDB;",
"Trusted_Connection=Yes;", sep = "")
# The data source - retrieves the data from the database
dsSqls <- RxSqlServerData(sqlQuery=qq, connectionString=conStr)
# The destination data source
dsSqls2 <- RxSqlServerData(table ="cleanData", connectionString = conStr)
# A transformation function
transformFunc <- function(data) {
data$CRSDepHour <- as.integer(trunc(data$CRSDepTime))
return(data)
}
# The transformation variables
transformVars <- c("CRSDepTime")
rxDataStep(inData = dsSqls,
outFile = dsSqls2,
transformFunc=transformFunc,
transformVars=transformVars,
overwrite = TRUE)
return(NULL)
}
# Create a StoredProcedure object
sp_ds_ds <- StoredProcedure(etl1, "spTest",
filePath = ".", dbName ="RevoTestDB")
# Define a connection string
conStr <- paste("Driver={ODBC Driver 13 for SQL Server};Server=.;Database=RevoTestDB;",
"Trusted_Connection=Yes;", sep = "")
# register the stored procedure with a database
registerStoredProcedure(sp_ds_ds, conStr)
# execute the stored procedure
executeStoredProcedure(sp_ds_ds, connectionString = conStr)
############# Example 2 #############
# train 1 takes a data frame with clean data and outputs a model
train1 <- function(in_df) {
in_df[,"DayOfWeek"] <- factor(in_df[,"DayOfWeek"], levels=c("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"))
# The model formula
formula <- ArrDelay ~ CRSDepTime + DayOfWeek + CRSDepHour:DayOfWeek
# Train the model
rxSetComputeContext("local")
mm <- rxLinMod(formula, data=in_df)
mm <- rxSerializeModel(mm)
return(list("mm" = mm))
}
# create InputData Object for an input parameter that is a data frame
# note: if the input parameter is not a data frame use InputParameter object
id <- InputData(name = "in_df",
defaultQuery = paste0("select top 10000 ArrDelay,CRSDepTime,",
"DayOfWeek,CRSDepHour from cleanData"))
# create an OutputParameter object for the variable inside the return list
# note: if that variable is a data frame use OutputData object
out <- OutputParameter("mm", "raw")
# connections string
conStr <- paste0("Driver={ODBC Driver 13 for SQL Server};Server=.;Database=RevoTestDB;",
"Trusted_Connection=Yes;")
# create the stored procedure object
sp_df_op <- StoredProcedure("train1", "spTest1", id, out,
filePath = ".")
# register the stored procedure with the database
registerStoredProcedure(sp_df_op, conStr)
# get the linear model
model <- executeStoredProcedure(sp_df_op, connectionString = conStr)
mm <- rxUnserializeModel(model$params$op1)
## End(Not run)