r - 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 函数以块的形式处理数据,但为什么有更多的行数是个问题?因为相同的查询 ger 会导致 SQL 服务器。最大内存百分比也分配给 50 个 32 GB RAM。
解决方案
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;
推荐阅读
- r - R bookdown:如何更改用于呈现 PDF 书籍的目录标题
- android - 将 Koltin Flow 与 LiveData 一起使用时未调用 onCompletion
- node.js - Node.js 说它在 minVersion 设置为 1.3 并使用 1.3 连接客户端时使用 tls1.2
- c# - 为什么 Application Insights TrackException 不记录任何内容?
- python - 使用可变长度输入服务 TF 模型
- sql - Oracle SQL:将 SELECT FOR UPDATE SKIP LOCKED 与 ordering 和 rownum 限制相结合的查询的可能性
- avro - 如何理解avro中Object Container Files的概念?
- iis - 网络服务器强制 X-FRAME-OPTIONS SAMEORIGIN
- javascript - 将 BootstrapVue 与 Vue.Draggable 一起使用?并将项目从列表中删除到 b 表?
- c - getchar() 函数将输入作为输入