【问题标题】:Does sql_variant in dbplyr work as it should?dbplyr 中的 sql_variant 是否正常工作?
【发布时间】:2017-09-16 10:52:15
【问题描述】:

我们看一下?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

【问题讨论】:

    标签: r dplyr dbplyr


    【解决方案1】:

    这是 Hadley Wickham 在提供的 github 链接上回答的内容:

    translate_sql() 不再有变体参数

    确实没有记录变体参数,尽管示例使用它,但我想它会在下一个版本中更正。

    当被问及如何定义自定义 SQL 翻译时,他可以提供:

    看看http://dbplyr.tidyverse.org/articles/new-backend.htmlhttp://dbplyr.tidyverse.org/articles/sql-translation.html

    我想另一种选择是获取旧版本的dbplyr::sql_variant

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      • 2012-12-12
      • 2014-06-18
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多