2017-09-16 24 views
8

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

cevap

0

Bu Hadley Wickham sağlanan github linke cevap budur: zamanında bu, bu URL'yi kontrol bir varyant argüman yok

translate_sql() artık

Nitekim varyant argümanı belgelenmemiş, örnekler kullansa da, sanırım bir sonraki versiyon için düzeltilecek.

başka seçenek dbplyr::sql_variant eski sürümünü elde etmektir tahmin http://dbplyr.tidyverse.org/articles/new-backend.html ve http://dbplyr.tidyverse.org/articles/sql-translation.html

göz at:

o sunmak için bu vardı özel SQL çeviriler nasıl tanımlanacağını istedi.

İlgili konular