【问题标题】:dbGetQuery in R truncates really long the SQL query (of length 10564 characters)R 中的 dbGetQuery 会截断非常长的 SQL 查询(长度为 10564 个字符)
【发布时间】:2017-09-11 23:48:28
【问题描述】:

我一直在尝试执行一个非常长的 SQL 查询并将结果放入 R 中的数据框中。但以下行会引发错误并在控制台中显示部分查询(截断它)

my_dataframe <- dbGetQuery(conn, my_large_query)

查询的长度是 10564 个字符,其中我使用了很多 CTE。 我已经通过 R Studio 中的选项菜单删除了字符串截断,但我想知道 R 中的 dbGetQuery 函数是否存在字符限制?

有什么建议吗?

  • RDMBS:DB2(在 IBM AS400 上),
  • R 包:DBI(库 - RJDBC)

【问题讨论】:

  • 您的要求可能取决于几个因素,包括您要连接的数据库和用于连接的包。也许您可以包含更多信息。 (话虽如此,那么长的查询......难以理解。也许这可能会受益于减少查询、使用存储过程、使用视图、使用参数化查询等)
  • 我们可以查看您尝试查询的部分内容吗?您可能会重复重复行,并且可以使用 DRY-er 解决方案进行优化。
  • 这是查询的问题(我遇到了一个 CTE,它恰好是数据库中的一个“实际”表)。感谢您的回复

标签: sql r db2 r-dbi


【解决方案1】:

您提到了更改“字符串截断”,但是 warning.length 怎么样?

options("warning.length"={integer})

我还建议您首先在您的数据库可用的任何 GUI 中测试查询。当您验证查询没有问题时,然后在 R 中运行它。

当 dbGetQuery(假设是 DBI 包)抛出 sql/database 错误时,直到查询的全文之后才会显示错误的实际内容。换句话说,如果查询文本在 R 错误输出中被截断,那么即将出现的数据库错误代码/文本将根本不可见。问题可能是非常简单的问题,例如不匹配的括号或缺少逗号。

请注意错误消息是以Error in dbGetQuery(R 问题)还是Error in .verify.JDBC.result(数据库问题)开头。

【讨论】:

  • 在 GUI (db2) 上执行,语法很好。选项(“warning.length”)是默认值(即 1000),我将其设置为 8170,并且不再显示截断的字符串,但我的会话突然崩溃
  • 这是一个数据库问题“.verify.JDBC.result 中的错误”。更新了 SQL 语法 - 我正在从一个坏表中读取数据(恰好是数据库中的一个有效表)感谢您的回复:)感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 2012-07-21
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多