2015-07-10 4 views
12

Я работаю над вилкой пакета RSQLServer и пытаюсь реализовать объединения. С текущей версией пакета объединения для любой базы данных, основанной на DBI, реализованы с использованием sql_join.DBIConnection. Однако эта реализация не очень хорошо работает для SQL-сервера. Например, он использует USING, который не поддерживается сервером SQL.Расширение dplyr и использование внутренних функций

У меня есть версия этой функции sql_join.SQLServerConnection работает (хотя еще не завершена). Я основывал свою функцию на sql_join.DBIConnection как можно больше. Один из вопросов, который у меня был, заключается в том, что sql_join.DBIConnection вызывает несколько неэкспонированных функций в пределах dplyr, таких как common_by. На данный момент я работал над этим, используя dplyr:::common_by, но я знаю, что это не идеальная практика.

Должен ли я:

  1. Задать Hadley Викхам/Romain Франсуа экспортировать соответствующие функции, чтобы сделать жизнь проще для людей, развивающихся пакетов, которые строят на dplyr?
  2. Скопируйте внутренние функции в пакет, над которым я работаю?
  3. Продолжить использование оператора ::: для вызова функций?
  4. Что-то еще?

Очевидно, что с опцией 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 
} 
+5

@hadley это может быть приятным побочным примечанием/тематическим исследованием в вашем разделе [R Packages] (http://r-pkgs.had.co.nz/). – JasonAizkalns

+1

@NickK, Только побочный комментарий: У меня была аналогичная проблема с Google BigQuery и реализована 'sql_join' с' ::: '. Взгляните на этот запрос [pull request] (https://github.com/hadley/bigrquery/pull/56). Я предполагаю, что существует очень высокая вероятность того, что он должен работать с SQL Server прямо из коробки. – akhmed

+0

@NickK, также по теме: см. [Это обсуждение] (https://github.com/hadley/bigrquery/pull/55) в запросе (уже объединенного) pull. Мне было настоятельно предложено повторно использовать функцию 'dplyr' с' ::: 'вместо повторной реализации. – akhmed

ответ

1

Она смотрит на меня, как вы можете не использовать эти функции глаголов. Так как dplyr теперь использует его функциональность базы данных в dbplyr, соответствующий код here. Я не вижу использования auto_names или common_by.

Я настоятельно рекомендую выполнить следующие шаги в Creating New Backends после прочтения SQL Translation.

Возможно, стоит рассмотреть некоторые другие альтернативные серверы, такие как sergeant package Hrbrmaster для сверла Apache с использованием JDBC.