讓我們來看看例子?sql_variant
:dbplyr中的sql_variant是否像它應該那樣工作?
我們定義聚合函數一個新的翻譯功能,從默認的擴展:
postgres_agg <- sql_translator(.parent = base_agg,
cor = sql_prefix("corr"),
cov = sql_prefix("covar_samp"),
sd = sql_prefix("stddev_samp"),
var = sql_prefix("var_samp")
)
我們再定義一個新的變種,這是從製作在3種不同類型(這裏是2)的翻譯功能:
postgres_var <- sql_variant(
base_scalar,
postgres_agg
)
translate_sql(cor(x, y), variant = postgres_var)
# <SQL> COR("x", "y")
translate_sql(sd(income/years), variant = postgres_var)
# <SQL> SD("income"/"years")
這些不看翻譯對我來說,不應該他們是"CORR"
和"STDDEV_SAMP"
?
# Original comment:
# Any functions not explicitly listed in the converter will be translated
# to sql as is, so you don't need to convert all functions.
translate_sql(regr_intercept(y, x), variant = postgres_var)
# <SQL> REGR_INTERCEPT("y", "x")
這一個表現不如預期,這就像其他2
在另一方面默認轉換職能的工作,請參閱:
translate_sql(mean(x), variant = postgres_var)
#<SQL> avg("x") OVER()
這是一個錯誤嗎?或者我錯過了什麼?
我的目標是創建一些變數Oracle
,並用它在下面的流行時尚,那麼對於更復雜的功能(與SQLite
例子是可再生的):
con <- DBI::dbConnect(RSQLite::SQLite(), path = ":memory:")
copy_to(con, cars, "cars")
con %>% tbl("cars") %>% summarize(dist = group_concat(dist)) # works as expected, as we're stealing the keyword from sqlite directly
sqlite_variant <- sql_variant(aggregate=sql_translator(.parent = base_agg,gpc = sql_prefix("group_concat")))
con %>% tbl("cars") %>% summarize(dist = gpc(dist)) # how do I make this work ?
編輯:
一個賞金後來仍然沒有解決方案,我交叉發佈問題直接在dplyr
/dbplyr
github
頁面,我不確定它是否已經或將得到關注,但如果我(或其他人)不更新這一次,檢查此網址:https://github.com/tidyverse/dplyr/issues/3117