2017-07-26 90 views
1

最近很喜欢使用Rmarkdown/Knitr执行SQL块,但它似乎对更复杂的查询有限制。我一直在使用带有RJDBC供电连接的Redshift数据库。Redshift中的Rmarkdown/knitr中的SQL块是否支持INNER JOIN和Common Table Expressions?

具体使用公共表表达式与INNER JOIN

```{sql, connection=redshift, output.var="Field_count"} 
WITH 
    cte AS (
     SELECT DISTINCT field 
     FROM 
     table 
     WHERE date >= '2017-01-01' 
)SELECT count(DISTINCT field) 
FROM cte 
INNER JOIN table_2 t2 ON t2.join_here = cte.join_here; 
``` 

我已经成功地使用CTE和INNER JOIN个人查询,但将它们结合起来导致的错误:

Error in .verify.JDBC.result(r, "Unable to retrieve JDBC results set for ", : Unable to retrieve JDBC result set for WITH 
     cte AS (
      SELECT DISTINCT field 
      FROM 
      table 
      WHERE date >= '2017-01-01' 
    )SELECT count(DISTINCT field) 
    FROM cte 
    INNER JOIN table_2 t2 ON t2.join_here = cte.join_here; ([Amazon] (500335) One query is expected: WITH 
     cte AS (
      SELECT DISTINCT field 
      FROM 
      table 
      WHERE date >= '2017-01-01' 
    )SELECT count(DISTINCT field) 
    FROM cte 
    INNER JOIN table_2 t2 ON t2.join_here = cte.join_here;) Calls: <Anonymous> ... dbSendQuery -> dbSendQuery -> .local -> .verify.JDBC.reslt Execution Halted 

看来,在查询出RStudio会话时,这个错误被翻译/重复。

这是一个已知的限制吗?如果是这样,它记录在任何地方?

这是一个已知的错误吗?如果是的话,它在现有的问题?

编辑:这只是明显发生在针织过程中,单独运行大块交互式返回预期结果。

回答

1

我建议在Redshift JDBC驱动程序上尝试另一个版本。

我得到了同样的错误,但是,它使用Pentaho时,因此里程可能会有所不同。我没有找到任何与此相关的文档或其他信息。我的问题通过切换离开最新的驱动程序版本得到解决。我使用RedshiftJDBC4-1.2.1.1001.jar(兼容JDBC 4.0)并切换到RedshiftJDBC4-1.1.10.1010.jar。

+0

确认使用4.0和'RedshiftJDBC4-1.1.10.1010.jar'修复了这个问题,当它最初在4.2上运行'RedshiftJDBC42-1.1.17.1017.jar'并且在使用'RedshiftJDBC42-1.2.1001.jar'测试时失败。有趣的是,要知道这是在最近的罐子里是一个突破的错误,还是在我的身边有某些东西导致了错误。用'RedshiftJDBC42-1.1.17.1017.jar'测试过,也失败了。 – DaveRGP

+0

不能重述上述,它的意思是说“用'RedshiftJDBC4-1.1.17.1017.jar'测试也失败了。 – DaveRGP