Redshift上的Rmarkdown / knitr中的SQL块是否支持INNER JOIN和公用表表达式?

时间:2017-07-26 11:09:39

标签: r inner-join knitr r-markdown common-table-expression

最近使用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会话时,这似乎被错误/重复翻译。

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

这是一个已知的错误吗?如果是在现有问题中呢?

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

1 个答案:

答案 0 :(得分:1)

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

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