Поделиться через


Перенос данных между SQL Server и файлом XDF (учебник по SQL Server и RevoScaleR)

Область применения: SQL Server 2016 (13.x) и более поздних версий

Эта часть 13 входит в состав серии учебников по RevoScaleR, посвященной использованию функций RevoScaleR в SQL Server.

В этом учебнике вы узнаете, как использовать XDF-файл для передачи данных между удаленным и локальным контекстами вычисления. Хранение данных в файле XDF позволяет выполнять их преобразование.

По завершении используйте данные в файле для создания новой таблицы SQL Server. Функция rxDataStep может применять преобразования к данным и преобразовывать кадры данных в файлы XDF и наоборот.

Создание таблицы SQL Server на основе файла XDF

В этом упражнении вы снова будете использовать данные по мошенничеству с кредитными картами. В этом сценарии вас попросили провести дополнительный анализ данных по пользователям в штатах Калифорния, Орегон и Вашингтон. Чтобы повысить эффективность, вы решили сохранить на локальном компьютере данные только по этим штатам и работать с переменными gender, cardholder, state и balance.

  1. Повторно используйте ранее созданную переменную stateAbb для определения уровней, которые необходимо включить, а затем запишите их в новую переменную statesToKeep.

    statesToKeep <- sapply(c("CA", "OR", "WA"), grep, stateAbb)
    statesToKeep
    

    Результаты

    Целостности и доступности ИЛИ WA
    5 38 48
  2. Определите данные, которые нужно перенести с сервера SQL Server, с помощью запроса Transact-SQL. В дальнейшем эта переменная будет использоваться в качестве аргумента inData функции rxImport.

    importQuery <- paste("SELECT gender,cardholder,balance,state FROM",  sqlFraudTable,  "WHERE (state = 5 OR state = 38 OR state = 48)")
    

    Убедитесь в том, что в запросе нет скрытых символов, например переводов строки или символов табуляции.

  3. Затем определите столбцы, которые будут использоваться при работе с данными в R. Например, в наборе данных небольшого размера нужно только три уровня признаков, так как запрос вернет данные только для трех состояний. Примените переменную statesToKeep для определения включаемых уровней.

    importColInfo <- list(
        gender = list( type = "factor",  levels = c("1", "2"), newLevels = c("Male", "Female")),
        cardholder = list(  type = "factor",  levels = c("1", "2"), newLevels = c("Principal", "Secondary")),
        state = list(   type = "factor",  levels = as.character(statesToKeep), newLevels = names(statesToKeep))
            )
    
  4. Задайте локальный контекст вычисления, так как все данные должны быть доступны на локальном компьютере.

    rxSetComputeContext("local")
    

    Функция rxImport позволяет импортировать данные из любого поддерживаемого источника данных в локальный XDF-файл. Использовать локальную копию данных удобно, если требуется проанализировать данные множеством различных способов и вы хотите избежать многократного выполнения одного и того же запроса.

  5. Создайте объект-источник данных, передав ранее определенные переменные в качестве аргументов функции RxSqlServerData.

    sqlServerImportDS <- RxSqlServerData(
        connectionString = sqlConnString,
        sqlQuery = importQuery,
        colInfo = importColInfo)
    
  6. Вызовите функцию rxImport, чтобы записать данные в файл с именем ccFraudSub.xdf в текущем рабочем каталоге.

    localDS <- rxImport(inData = sqlServerImportDS,
        outFile = "ccFraudSub.xdf",
        overwrite = TRUE)
    

    Объект localDs, возвращенный функцией rxImport, является облегченным объектом-источником данных RxXdfData, который представляет локально сохраненный на диске файл данных ccFraud.xdf.

  7. Вызовите функцию rxGetVarInfo, указав в качестве цели XDF-файл, чтобы убедиться, что схема данных такая же.

    rxGetVarInfo(data = localDS)
    

    Результаты

    rxGetVarInfo(data = localDS)
    Var 1: gender, Type: factor, no factor levels available
    Var 2: cardholder, Type: factor, no factor levels available
    Var 3: balance, Type: integer, Low/High: (0, 22463)
    Var 4: state, Type: factor, no factor levels available
    
  8. Теперь можно вызывать различные функции R, чтобы анализировать объект localDs (аналогично анализу источника данных в SQL Server). Например, можно свести данные по полу:

    rxSummary(~gender + cardholder + balance + state, data = localDS)
    

Следующие шаги

Этот учебник завершает серию, посвященную RevoScaleR и SQL Server. В них было представлено множество понятий, связанных с данными и вычислениями, и был заложен фундамент для дальнейшей работы с учетом ваших собственных проектных требований.

Чтобы углубить знания о RevoScaleR, можно вернуться к списку учебников по R и пройти упражнения, которые вы могли пропустить. Кроме того, можно обратиться к практическим руководствам в содержании, чтобы получить сведения об общих задачах.