我正在研究RSQLServer
包的分支,并尝试实现联接。使用当前版本的软件包,可以使用sql_join.DBIConnection
实现任何DBI连接数据库的连接。但是,该实现对SQL服务器不起作用。例如,它使用SQL服务器不支持的USING
。
我已经使用了这个函数sql_join.SQLServerConnection
的一个版本(虽然尚未完成)。我尽可能基于sql_join.DBIConnection
的功能。我遇到的一个问题是sql_join.DBIConnection
在dplyr
内调用了许多未导出的函数,例如common_by
。目前,我使用dplyr:::common_by
解决了这个问题,但我知道这不是理想的做法。
我应该:
dplyr
构建的包?:::
运算符来调用函数吗?显然,使用选项3,接口可能会发生变化(因为它们不是导出的功能),并且包装会在较长时间内中断。
示例代码:
sql_join.SQLServerConnection <- function (con, x, y, type = "inner", by = NULL, ...) {
join <- switch(type, left = sql("LEFT"), inner = sql("INNER"),
right = sql("RIGHT"), full = sql("FULL"), stop("Unknown join type:",
type, call. = FALSE))
by <- dplyr:::common_by(by, x, y)
using <- FALSE # all(by$x == by$y)
x_names <- dplyr:::auto_names(x$select)
y_names <- dplyr:::auto_names(y$select)
# more code
}
答案 0 :(得分:1)
在我看来,您可能不必使用这些功能动词。由于dplyr
现在将其数据库功能放在dbplyr
中,因此相关代码为here。我在那里看不到使用auto_names
或common_by
。
我强烈建议您在阅读Creating New Backends后按照SQL Translation中的步骤进行操作。
对于使用JDBC的Apache Drill,也可能值得查看其他一些备用后端,例如Hrbrmaster&#39;} sergeant package。