简体   繁体   English

使用RODBC的R动态SQL查询并导出到.csv

[英]R dynamic sql query using RODBC and export to .csv

If I run the following code in R studio then it works but I have set sys.sleep. 如果我在R studio中运行以下代码,则可以运行,但已设置sys.sleep。 I have a large batch of queries to run and I don't know how long each will take. 我有大量查询要运行,但我不知道每个查询要花多长时间。 If I exclude the sys.sleep then the exports are blank as the export is run before the query is complete. 如果我排除sys.sleep,则导出是空白的,因为在查询完成之前运行了导出。 Is there a way of getting R to wait until the query is complete? 有没有办法让R等待查询完成?

#setup
  #install.packages("stringr", dependencies=TRUE)
  require(stringr)
  library(RODBC)    

#odbc connection
  db <- odbcDriverConnect("dsn=DW Master;uid=username;pwd=password;")   

#sql to be run
  qstr <- "select top 10 * from prod"

#variable
  weeknum<-c('201401','201402','201403')

for (i in weeknum ) 
  {
  data <- sqlQuery(db, qstr, believeNRows = FALSE)
  Sys.sleep(10)
  filename<-paste("data_", str_trim(i), ".csv")
  filename
  write.csv(data, file = filename)
  }

From this SO post , try adding the rows_at_time argument: 从这个SO帖子中 ,尝试添加rows_at_time参数:

data <- sqlQuery(db, qstr, believeNRows = FALSE, rows_at_time = 1)

Alternatively you can break up the two processes: 或者,您可以分解两个过程:

# QUERIES TO DATA FRAMES
weeknum<-c('201401','201402','201403')
for (i in weeknum ) {
  data <- sqlQuery(db, qstr, believeNRows = FALSE, rows_at_time = 1)
  assign(paste("data",i,sep=""),data)   
}

# DATA FRAMES TO CSV FILES
dfList <- c('data201401','data201402','data201403')
for (n in dfList) {
  df<-get(n)
  filename<-paste(n, ".csv", sep="")
  write.csv(df, file = filename)
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM