2017-09-16 3 views
8

Schauen wir uns das Beispiel in ?sql_variant einen Blick:Funktioniert sql_variant in dbplyr wie es sollte?

Wir haben eine neue Übersetzungsfunktion für aggregierte Funktionen definieren, aus dem Standard erweitert ein:

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") 
) 

Wir definieren dann eine neue Variante, die aus gemacht wird Übersetzungsfunktionen der 3 verschiedenen Typen (hier 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") 

Diese müssen nicht mir übersetzt aussehen, sollten sie nicht sein "CORR" und "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") 

Dieses verhält sich wie erwartet, die ebenso wie die anderen 2.

Auf der anderen Seite Standard übersetzt Funktionen arbeiten, siehe:

translate_sql(mean(x), variant = postgres_var) 
#<SQL> avg("x") OVER() 

Es ist ein Fehler richtig? oder verpasse ich etwas?

Mein Ziel ist es, einige Varianten für Oracle und verwenden Sie es in der folgenden Art und Weise zu erstellen, dann für kompliziertere Funktionen (zB mit SQLite reproduzierbar sein):

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 ? 

EDIT:

Ein Bounty später noch keine Lösung, ich habe das Problem in der dplyr/dbplyrgithub Seite direkt gepostet, wo ich nicht sicher bin, ob es Aufmerksamkeit hat oder bekommen wird, aber für den Fall, dass ich (oder jemand anderes) nicht aktualisieren dies in der Zeit, überprüfen Sie diese URL: https://github.com/tidyverse/dplyr/issues/3117

Antwort

0

Dies ist, was Hadley Wickham auf Github bereitgestellt Link beantwortet:

translate_sql() keine Variante Argument mehr

der Tat die variant Argument ist nicht dokumentiert, obwohl die Beispiele es verwenden, ich nehme an, es wird für die nächste Version korrigiert werden.

die Frage, wie benutzerdefinierte SQL-Übersetzungen definieren er dies zu bieten hatte: Habe

einen Blick auf http://dbplyr.tidyverse.org/articles/new-backend.html und http://dbplyr.tidyverse.org/articles/sql-translation.html

ich denke, eine weitere Option ist die ältere Version von dbplyr::sql_variant zu bekommen.

Verwandte Themen