Я работаю над вилкой пакета RSQLServer
и пытаюсь реализовать объединения. С текущей версией пакета объединения для любой базы данных, основанной на DBI, реализованы с использованием sql_join.DBIConnection
. Однако эта реализация не очень хорошо работает для SQL-сервера. Например, он использует USING
, который не поддерживается сервером SQL.Расширение dplyr и использование внутренних функций
У меня есть версия этой функции sql_join.SQLServerConnection
работает (хотя еще не завершена). Я основывал свою функцию на sql_join.DBIConnection
как можно больше. Один из вопросов, который у меня был, заключается в том, что sql_join.DBIConnection
вызывает несколько неэкспонированных функций в пределах dplyr
, таких как common_by
. На данный момент я работал над этим, используя dplyr:::common_by
, но я знаю, что это не идеальная практика.
Должен ли я:
- Задать Hadley Викхам/Romain Франсуа экспортировать соответствующие функции, чтобы сделать жизнь проще для людей, развивающихся пакетов, которые строят на
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
}
@hadley это может быть приятным побочным примечанием/тематическим исследованием в вашем разделе [R Packages] (http://r-pkgs.had.co.nz/). – JasonAizkalns
@NickK, Только побочный комментарий: У меня была аналогичная проблема с Google BigQuery и реализована 'sql_join' с' ::: '. Взгляните на этот запрос [pull request] (https://github.com/hadley/bigrquery/pull/56). Я предполагаю, что существует очень высокая вероятность того, что он должен работать с SQL Server прямо из коробки. – akhmed
@NickK, также по теме: см. [Это обсуждение] (https://github.com/hadley/bigrquery/pull/55) в запросе (уже объединенного) pull. Мне было настоятельно предложено повторно использовать функцию 'dplyr' с' ::: 'вместо повторной реализации. – akhmed