从SQL Server表中提取数据并保存为多个CSV文件?

时间:2017-05-25 21:36:06

标签: r

我正在尝试根据名为ASOFDATE的字段,弄清楚如何从SQL Server表中提取数据并将一个表的内容保存到单独的CSV文件中。我的ASOFDATE是月结束日期。

这是我到目前为止所拥有的。

library(RODBC)

# connect to database 
dbhandle = odbcDriverConnect('driver={SQL Server};server=SERVER_NAME;database=DATABASE_NAME;trusted_connection=true')

sampledata <- sqlQuery(dbhandle, "select * from [SERVER].[dbo].[TABLE]")

# Close the connection
close(dbhandle) 

# Create a Date vector containing the 1st of all the subsequent months and subtract 1 day 
# date.end.month <- seq(as.Date("2012-02-01"),length=4,by="months")-1

ASOFDATE <- seq(as.Date("2016-02-01"),length=12,by="months")-1

在某种程度上,我认为我需要遍历DataFrame,但我不知道该怎么做。

for (i in sampledata) {
  do some kind of filter by ASAOFDATE

write.csv(sampledata, paste0("C:/Users/RSMITH/Desktop/test/", ASOFDATE, ".csv"), row.names = FALSE) 

}

因此,例如,我使用它来从表中获取数据。

dataset&lt; - sqlFetch(dbhandle,“DATA”)

数据集包含以下字段:  N_ID,SEQ_NO,REPORT_PERIOD_END,CONTACT_ID,CONSOL_KEY,CUSTOMER_NAME,COMPANY_CODE,SECTOR,人员,ASOFDATE,COMPANY,REPORT_LINE

我创建了一个月份结束日期列表,我希望“过滤”以获取: ASOFDATE&lt; - seq(as.Date(“2016-02-01”),length = 12,by =“months”) - 1

然后,根据ASOFDATE在表格中“过滤”记录,并将每个块保存为CSV,日期在文件名中。

我100%确定这是可能的,但我只是不知道如何将数据分成块并保存每个块。

1 个答案:

答案 0 :(得分:1)

您可以在此处使用tidyverse。首先,创建一个路径向量,您将文件保存到该路径。然后,根据此listASOFDATE将您的数据拆分为walk,并保存列表中的元素。

library(tidyverse)

paths <- paste0("Desktop/", sampledata$ASOFDATE, ".csv")

sampledata %>% 
  split(.$ASOFDATE) %>% 
  walk2(., paths, ~write_csv(.x, .y))

数据

sampledata <- data_frame(
  ASOFDATE = seq(from = as.Date("2017-05-01"), as.Date("2017-05-05"), "days"),
  var1 = 1:5,
  var2 = 1:5
)