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
/dbplyr
github
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