Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 扩展dplyr和内部函数的使用_Sql_R_Dplyr_R S3 - Fatal编程技术网

Sql 扩展dplyr和内部函数的使用

Sql 扩展dplyr和内部函数的使用,sql,r,dplyr,r-s3,Sql,R,Dplyr,R S3,我正在开发RSQLServer包的分支,并试图实现连接。在当前版本的包中,使用sql\u join.DBIConnection实现任何与DBI连接的数据库的连接。然而,这种实现在SQLServer上并不适用。例如,它使用SQL server不支持的USING 我已经有了这个函数的一个版本sql\u join.SQLServerConnection正在运行(虽然还没有完成)。我的函数尽可能基于sql\u join.DBIConnection。我遇到的一个问题是,sql\u join.DBIConn

我正在开发
RSQLServer
包的分支,并试图实现连接。在当前版本的包中,使用
sql\u join.DBIConnection
实现任何与DBI连接的数据库的连接。然而,这种实现在SQLServer上并不适用。例如,它使用SQL server不支持的
USING

我已经有了这个函数的一个版本
sql\u join.SQLServerConnection
正在运行(虽然还没有完成)。我的函数尽可能基于
sql\u join.DBIConnection
。我遇到的一个问题是,
sql\u join.DBIConnection
调用了
dplyr
中许多未导出的函数,例如
common\u by
。目前,我已经通过使用
dplyr:::common_by
解决了这个问题,但我知道这不是理想的做法

我应该:

  • 请Hadley Wickham/Romain Francois导出相关函数,使开发基于
    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
    }
    

    sql\u join.SQLServerConnection在我看来,您可能不必使用这些函数。由于
    dplyr
    现在将其数据库功能放在
    dbplyr
    中,因此相关代码为。我看不到
    auto_name
    common_by
    在那里的用法

    我强烈建议在阅读后遵循中的步骤


    还值得回顾一下其他一些备选后端,例如使用JDBC的Apache Drill的Hrbrmaster

    @hadley这可能是您最佳实践部分的一个很好的旁注/案例研究。@NickK,只是旁注:我在Google BigQuery中遇到了类似的问题,并使用
    实现了
    sql\u join
    。请看看这个。我的猜测是,它很有可能在开箱即用的情况下与SQL Server一起工作。@NickK,也在主题:请参见(已合并的)pull请求中。我被明确鼓励在
    中重新使用
    dplyr
    函数,而不是重新实现它。@akhmed,谢谢。看起来您遇到了与SQL Server类似的问题,并且有类似的解决方案!我会试试看。如果它在BigQuery之外也有用的话,那就太好了!(我想唯一的变化是:SQL Server需要将“JOIN EACH”替换回“JOIN”)