最近使用Rmarkdown / Knitr执行SQL块真的很享受,但似乎对更复杂的查询存在限制。我一直在使用带有RJDBC供电连接的Redshift数据库。
特别使用带有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会话时,这似乎被错误/重复翻译。
这是一个已知的限制吗?如果是这样,它在任何地方都有记录?
这是一个已知的错误吗?如果是在现有问题中呢?
编辑:这只是在编织过程中明显发生,单独运行的块以交互方式返回预期结果。
答案 0 :(得分:1)
我建议在Redshift JDBC驱动程序上尝试另一个版本。
我得到了同样的错误,然而,这是在使用Pentaho时所以里程可能会有所不同。我没有找到任何与此相关的文档或其他信息。切换到最新的驱动程序版本后,我的问题得到了解决。我使用的是RedshiftJDBC4-1.2.1.1001.jar(JDBC 4.0兼容)并切换到RedshiftJDBC4-1.1.10.1010.jar。