适用于: SQL Server 2016 (13.x) 及更高版本
这是 RevoScaleR 教程系列的第 10 个教程,RevoScaleR 教程介绍如何在 SQL Server 中使用 RevoScaleR 函数。
在本教程中,将学习如何从 SQL Server 获取数据,然后使用 rxImport 函数将感兴趣的数据放入本地文件中。 这样一来,就可以在本地计算上下文中重复对数据进行分析,而无需重新查询数据库。
rxImport 函数可用于将数据从数据源移到会话内存中的数据帧或磁盘中的 XDF 文件。 如果未指定某个文件作为目标,数据会作为数据框放入内存中。
从 SQL Server 将数据子集提取到本地内存
你已决定仅详细检查高风险个体。 SQL Server 中的源表很大,因此,你只想获取有关高风险客户的信息。 随后,你将该数据加载到本地工作站内存中的数据帧。
将计算上下文重置为本地工作站。
rxSetComputeContext("local")如果 sqlQuery 参数中存在效的 SQL 语句,则创建新的 SQL Server 数据源对象。 此示例获取具有最高风险评分的观测值的子集。 这样一来,只有真正需要的数据才会放入本地内存。
sqlServerProbDS \<- RxSqlServerData( sqlQuery = paste("SELECT * FROM ccScoreOutput2", "WHERE (ccFraudProb > .99)"), connectionString = sqlConnString)调用函数 rxImport 可将数据读取到本地 R 会话中的数据帧。
highRisk <- rxImport(sqlServerProbDS)如果操作成功,应该会看到如下所示的状态消息:“读取的行数:35,处理的总行数:35,总区块时间:0.036 秒”
现在,高风险观察数据已位于内存中数据帧内,可使用各种 R 函数来操纵该数据帧。 例如,可根据风险评分对客户排序,并打印存在最高风险的客户的列表。
orderedHighRisk <- highRisk[order(-highRisk$ccFraudProb),] row.names(orderedHighRisk) <- NULL head(orderedHighRisk)
结果
ccFraudLogitScore state gender cardholder balance numTrans numIntlTrans creditLine ccFraudProb1
9.786345 SD Male Principal 23456 25 5 75 0.99994382
9.433040 FL Female Principal 20629 24 28 75 0.99992003
8.556785 NY Female Principal 19064 82 53 43 0.99980784
8.188668 AZ Female Principal 19948 29 0 75 0.99972235
7.551699 NY Female Principal 11051 95 0 75 0.99947516
7.335080 NV Male Principal 21566 4 6 75 0.9993482
详细了解 rxImport
不仅可以使用 rxImport 来移动数据,还可在读取它的过程中转换数据。 例如,可以为固定宽度的列指定字符数,提供变量的说明,设置因子列的级别,甚至还能创建可在导入后使用的新级别。
rxImport 函数在导入过程中将变量名称分配到列,但可以使用 colInfo 参数指示新变量名称,或使用 colClasses 参数更改数据类型。
通过在 transforms 参数中指定其他操作,可以对读取的每个数据区块执行基本处理。