我找到了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建议,我想知道这个软件包是否可以做类似的技巧。
谢谢!
我按照@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
将其“注入”数据库,当查询变得很长时(例如有多个查询),它似乎对我不起作用连接)。
这里有线索吗?谢谢!