dbplyr
имеет несколько очень полезных функций моделирования, поэтому вы можете писать запросы, не подключенные к какой-либо реальной базе данных, но я не могу получить фактические имена таблиц ни в одном из запросов, которые я пишу таким образом. Все их имена просто `df`
, и я не могу их потом изменить. На самом деле я нигде не вижу `df`
ни в объекте запроса, ни в его атрибутах (у него их нет), так что теперь я понятия не имею, как dbplyr
вообще обрабатывает имена таблиц.
MWE:
library(dbplyr)
library(dplyr, warn.conflicts = FALSE)
library(magrittr)
library(purrr, warn.conflicts = FALSE)
query <- tbl_lazy(df = mtcars)
query %$% names(ops)
#> [1] "x" "vars"
show_query(query)
#> <SQL>
#> SELECT *
#> FROM `df`
# The actual data frame is stored in the object under the name `x`, but
# renaming it has no effect, unsurprisingly (since it wasn't named `df`
# anyway)
query %<>% modify_at("ops", set_names, "mtcars", "vars")
query %$% names(ops)
#> [1] "mtcars" "vars"
show_query(query)
#> <SQL>
#> SELECT *
#> FROM `df`
Мой вариант использования, кстати, заключается в том, что мне нужно запускать SQL-запросы в другой системе с фактическим доступом к серверу, поэтому я хотел бы иметь R-скрипты, которые создают синтаксис SQL, готовый к запуску в этой системе, даже если R может' т подключиться к нему. Создание пустой фиктивной базы данных со структурой реальной вещи (имена таблиц и столбцов, типы столбцов, но без строк) является вариантом, но, очевидно, было бы проще просто использовать эти симуляции в свободной форме, если только SQL может быть сгенерирован готовым для вырезания и вставки. (lazy_frame()
выглядел более подходящим для таких несуществующих таблиц, но, знаете ли, на самом деле это просто оболочка для tbl_lazy(tibble())
, так что точно такая же проблема с именем `df`
.)
Создано 12 декабря 2019 года с помощью пакета reprex (v0.3.0)