使用dplyr修改现有的并复制到SQLServer中的新表而不使用collect

时间:2018-02-06 08:16:54

标签: sql-server r dplyr

我找到了a question of similar nature,因为作者转而使用其他工具进行数据处理,我想继续他的问题。

在gist中,我想修改SQLServer中的现有表,然后将新表插入SQLServer,在数据库中提供两个表。目前我正在做这样的事情:

copy_to(channel,iris,'##iris',temporary=FALSE)

iris.st01 <- tbl(channel,'##iris') %>%
  mutate(`Sepal.Length.Sq`=`Sepal.Length`^2) %>%
  collect

copy_to(channel,iris.st01,'##iris_st01',temporary=FALSE)

将数据帧复制出服务器,然后再次插入,因为可以在服务器中完成所有更改,这有点“不太美观”。我想知道是否有更好的方法可以做到这一点?

使用DBI软件包建议我的previous question建议,我想知道这个软件包是否可以做类似的技巧。

谢谢!

更新01

我按照@Moody_Mudskipper的建议,将我的脚本更改为:

copy_to(channel,iris,'##iris',temporary=FALSE)

iris.st01 <- tbl(channel,'##iris') %>%
  mutate(`Sepal.Length.Sq`=`Sepal.Length`^2) %>%
  collect

# copy_to(channel,iris.st01,'##iris_st01',temporary=FALSE)
db_drop_table(channel,'##iris_st01')
DBI::dbSendQuery(channel,'SELECT "Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species", POWER("Sepal.Length", 2.0) AS "Sepal.Length.Sq" INTO ##iris_st01 FROM ##iris')

它正在工作,而你可以看到SELECT "Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species", POWER("Sepal.Length", 2.0) AS "Sepal.Length.Sq" FROM "##iris"实际上来自:

> iris.st01 <- tbl(channel,'##iris') %>%
+     mutate(`Sepal.Length.Sq`=`Sepal.Length`^2) %>% show_query
<SQL>
SELECT "Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species", POWER("Sepal.Length", 2.0) AS "Sepal.Length.Sq"
FROM "##iris"

我在想的是使用show_query来显示SQL查询并通过DBI::dbSendQuery将其“注入”数据库,当查询变得很长时(例如有多个查询),它似乎对我不起作用连接)。

这里有线索吗?谢谢!

0 个答案:

没有答案