Mover dados entre o SQL Server e o ficheiro XDF (tutorial do SQL Server e do RevoScaleR)

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores

Este é o tutorial 13 da série de tutoriais RevoScaleR sobre como usar funções RevoScaleR com SQL Server.

Neste tutorial, vais aprender a usar um ficheiro XDF para transferir dados entre contextos de computação remotos e locais. Armazenar os dados num ficheiro XDF permite-lhe realizar transformações nos dados.

Quando terminas, usas os dados do ficheiro para criar uma nova tabela SQL Server. A função rxDataStep pode aplicar transformações aos dados e realiza a conversão entre frames de dados e ficheiros .xdf.

Crie uma tabela SQL Server a partir de um ficheiro XDF

Neste exercício, volta a utilizar os dados sobre fraude com cartões de crédito. Neste cenário, foi-lhe pedido que faça uma análise extra sobre utilizadores nos estados da Califórnia, Oregon e Washington. Para ser mais eficiente, decidiu armazenar os dados apenas desses estados no seu computador local e trabalhar apenas com as variáveis género, titular do cartão, estado e saldo.

  1. Reutilize a stateAbb variável que criou anteriormente para identificar os níveis a incluir e escreva-os numa nova variável, statesToKeep.

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

    Results

    AC OR WA
    5 38 48
  2. Defina os dados que quer trazer de SQL Server, usando uma consulta Transact-SQL. Mais tarde usas esta variável como argumento inData para rxImport.

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

    Certifique-se de que não há caracteres ocultos, como saltos de linha ou tabulações, na consulta.

  3. De seguida, defina as colunas a usar ao trabalhar com os dados em R. Por exemplo, no conjunto de dados mais pequeno, só precisas de três níveis de fatores, porque a consulta devolve dados apenas para três estados. Aplique a statesToKeep variável para identificar os níveis corretos a incluir.

    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. Defina o contexto de computação para local, porque quer que todos os dados estejam disponíveis no seu computador local.

    rxSetComputeContext("local")
    

    A função rxImport pode importar dados de qualquer fonte de dados suportada para um ficheiro XDF local. Usar uma cópia local dos dados é conveniente quando se quer fazer várias análises diferentes sobre os dados, mas evitar executar a mesma consulta repetidamente.

  5. Crie o objeto fonte de dados passando as variáveis previamente definidas como argumentos para o RxSqlServerData.

    sqlServerImportDS <- RxSqlServerData(
        connectionString = sqlConnString,
        sqlQuery = importQuery,
        colInfo = importColInfo)
    
  6. Chame rxImport para escrever os dados num ficheiro chamado ccFraudSub.xdf, no diretório de trabalho atual.

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

    O localDs objeto devolvido pela função rxImport é um objeto fonte de dados RxXdfData leve que representa o ficheiro ccFraud.xdf de dados armazenado localmente no disco.

  7. Chame rxGetVarInfo no ficheiro XDF para verificar se o esquema de dados é o mesmo.

    rxGetVarInfo(data = localDS)
    

    Results

    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. Agora pode chamar várias funções R para analisar o objeto localDs, tal como faria com os dados de origem no SQL Server. Por exemplo, pode resumir por género:

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

Passo seguinte

Este tutorial conclui a série de tutoriais em várias partes sobre RevoScaleR e SQL Server. Apresentou-lhe inúmeros conceitos relacionados com dados e computacionais, dando-lhe uma base para avançar com os seus próprios requisitos de dados e projetos.

Para aprofundar o seu conhecimento do RevoScaleR, pode voltar à lista de tutoriais do R para passar por quaisquer exercícios que possa ter perdido. Em alternativa, consulte os artigos de instruções no índice para obter informações sobre tarefas gerais.