rxDataStep не удалось загрузить данные в таблицу SQL Server

Я пытаюсь загрузить результат SQL-запроса в новую таблицу после некоторого преобразования. Но даже самый простой сценарий не работает.

   DECLARE @inquery nvarchar(max) = N'
   SELECT TOP 2000000  * from SQL Table'

   DECLARE @Rscript nvarchar(max) = N'

            sqlConnString = "Driver={SQL Server};SERVER='+@@SERVERNAME+N';DATABASE='+DB_NAME()+N';Trusted_Connection=True;"
            outTabName <- "OutputTable"
            outTabDS <- RxSqlServerData(table = outTabName, connectionString = sqlConnString)
          rxDataStep(inData = InputDataSet, outFile = outTabDS, maxRowsByCols = NULL, rowsPerRead = 500000)
   '
   EXEC sp_execute_external_script @language = N'R'
          , @script = @Rscript
          , @input_data_1 = @inquery
   WITH result sets none;

Когда я запускаю это с 1M строк, он работает, но не может писать с 2M строк. Если функция RevoScaleR обрабатывает данные в блоках, то почему проблема с большим количеством строк? Потому что тот же самый запрос приводит к SQL-серверу. Максимальный процент памяти также выделяется для 50 из 32 ГБ ОЗУ.

1 ответ

Функции RevoScaleR обрабатывают данные порциями при использовании источников данных, таких как RxSqlServerData. В этом случае, если вы используете RxSqlServerData для входных данных вместо фрейма данных, вы не должны выходить за пределы памяти. Вот пример:

DECLARE @Rscript nvarchar(max) = N'

    sqlConnString = "Driver={SQL Server};SERVER='+@@SERVERNAME+N';DATABASE='+DB_NAME()+N';Trusted_Connection=True;"
    inTabName <- "InputTable"
    outTabName <- "OutputTable"
    inTabDS <- RxSqlServerData(table = inTabName, connectionString = sqlConnString)
    outTabDS <- RxSqlServerData(table = outTabName, connectionString = sqlConnString)
  rxDataStep(inData = inTabDS, outFile = outTabDS, maxRowsByCols = NULL, rowsPerRead = 500000)'
EXEC sp_execute_external_script @language = N'R'
      , @script = @Rscript
WITH result sets none;
Другие вопросы по тегам