我如何从dplyr :: tbl获取详细的数据库错误消息?

时间:2018-08-10 19:09:31

标签: r dplyr dbplyr

我正在使用R绘制一些我从数据库(具体来说是Stack Exchange data dump)中提取的数据:

dplyr::tbl(serverfault, 
           dbplyr::sql("
select year(p.CreationDate) year,
       avg(p.AnswerCount*1.0) answers_per_question,
       sum(iif(ClosedDate is null, 0.0, 100.0))/count(*) close_rate
from Posts p
where PostTypeId = 1
group by year(p.CreationDate)
order by year(p.CreationDate)
"))

查询works fine on SEDE,但我在R控制台中收到此错误:

Error: <SQL> 'SELECT *
FROM (
select year(p.CreationDate) year,
       avg(p.AnswerCount*1.0) answers_per_question,
       sum(iif(ClosedDate is null, 0.0, 100.0))/count(*) close_rate
from Posts p
where PostTypeId = 1
group by year(p.CreationDate)
order by year(p.CreationDate)
) "zzz11"
WHERE (0 = 1)'
  nanodbc/nanodbc.cpp:1587: 42000: [FreeTDS][SQL Server]Statement(s) could not be prepared. 

我认为“声明无法准备”。表示SQL Server由于某种原因不喜欢该查询。不幸的是,它并没有暗示出什么问题。经过一段时间的查询摆弄后,我发现根据错误消息,它被包装在一个子查询中。复制并执行由链中的一个库构建的完整查询,SQL Server给了我以下信息:

  

除非还指定了TOP,OFFSET或FOR XML,否则ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效。

现在解决方案显而易见:删除(或注释掉)order by子句。但是 R控制台中的详细错误消息在哪里?我正在使用Rstudio,应该很重要。如果我可以在正在处理的代码旁边找到完整的异常,它将帮助我更快地修复错误。 (而且要清楚一点,我经常从dplyr :: tbl收到隐秘的错误,通常使用binary search debugging来修复它们。)

0 个答案:

没有答案