【发布时间】:2017-09-17 15:27:50
【问题描述】:
由于a bug in dbplyr、copy_to 和compute 目前不适用于 SQL Server 连接。
connStr <- "driver=ODBC Driver 13 for SQL Server;server=localhost;..."
db <- DBI::dbConnect(odbc::odbc(), .connection_string=connStr)
copy_to(db, mtcars)
#Error: <SQL> 'CREATE TEMPORARY TABLE "mtcars" (
# "row_names" varchar(255),
# "mpg" FLOAT,
# ...
# nanodbc/nanodbc.cpp:1587: 42000: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Unknown object type 'TEMPORARY' used in a CREATE, DROP, or ALTER statement.
# use raw DBI functionality to create table
DBI::dbWriteTable(db, "mtcars", mtcars)
qry <- tbl(db, "mtcars") %>% group_by(am) %>% summarise(m=mean(mpg))
compute(qry)
#Error: <SQL> 'CREATE TEMPORARY TABLE "isrxofsskr" AS SELECT "am" AS "am", "m" #AS "m"
#FROM (SELECT "am", AVG("mpg") AS "m"
#FROM "mtcars"
#GROUP BY "am") "htrkkxabrn"'
# nanodbc/nanodbc.cpp:1587: 42000: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Unknown object type 'TEMPORARY' used in a CREATE, DROP, or ALTER statement.
dbplyr repo 上有一个有效的 PR 可以解决这个问题,但没有说明何时合并(或何时到达 CRAN)。同时,如何在不将数据读入 R 的情况下从查询中创建表?
【问题讨论】:
-
@Hack-R 正确。理想情况下,我希望能够选择是创建永久表还是临时表。
-
嘿,这可能是一个愚蠢的问题,但由于该错误只是 SQL 语法稍微不正确,我们可以不只是稍微编辑一下包源来修复它吗?我认为您只需要删除“临时”一词(或使用拉取请求中的代码,也许通过在合并它的地方创建一个分支,然后使用 install_github 安装您的分支?)。
标签: sql-server r dplyr r-dbi dbplyr