en ?sql_variant
örneğin bir göz atalım:dbplyr içinde sql_variant gerektiği gibi çalışır mı?
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")
)
Daha sonra yapılır yeni varyant, tanımlayın:
Biz varsayılan bir genişletilmiş toplu işlevler için yeni bir çevirmen işlevini tanımlamak (burada 2) 3 farklı tipte çeviri fonksiyonları: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")
Bunlar bana tercüme bak, onlar olmamalı yok "CORR"
ve "STDDEV_SAMP"
?
translate_sql(mean(x), variant = postgres_var)
#<SQL> avg("x") OVER()
Bir böcek Doğru: beklendiği gibi
# 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")
Bu seferki, bkz sadece tercüme fonksiyonlar çalışan diğer yandan varsayılan olarak diğer 2.
gibi olan davranır? ya da bir şey mi eksik?
Amacım (tekrarlanabilir olması SQLite
örneğin) Oracle
bazı varyantlar oluşturmak ve daha karmaşık fonksiyonlar için, daha sonra bunu şu şekilde kullanmaktır:
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 ?
DÜZENLEME:
Bir ödül daha sonra hala bir çözüm, ben sorunu var mı yoksa dikkat edecek mi emin değilim, ama ben (veya bir başkası) güncellemek durumunda değil, ben doğrudan doğruya dplyr
/dbplyr
sayfasında yayınlanmıştır. https://github.com/tidyverse/dplyr/issues/3117