问题标签 [r-dbi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3843 浏览

sql-server - 在 SQL Server 数据库中使用 R DBI 包中的 dbWriteTable 时,Field.types 不起作用

我正在使用 DBI 包和 odbc 包来连接到 SQL Server 数据库。我正在尝试使用field.types参数指定的列类型编写一个表。出于某种原因,这不起作用,并且 R 在编写时会选择自己的数据类型。

一个可重现的例子:

结果:一个名为“tableName”的表,其中包含列

我的问题:

  1. 如何更正上面的示例,以便数据库上的列类型varchar(50)适用于两列?

  2. field.types对于其他示例,如何正确使用该参数?

我想知道的是,我应该使用什么“类型”:我需要“int”还是“integer”还是“INT”(R 区分大小写,所以可能很重要)?然后,我在哪里可以找到这些数据类型的列表?我曾尝试使用 dbDataType,但使用此函数返回的类型也不起作用。还是我做错了什么?

提前感谢您的帮助。

0 投票
1 回答
1256 浏览

sql-server - 为什么通过函数调用 dbListTables 时会给出警告消息?(R DBI)

我使用 DBI 包中的 dbListTables 编写了一个函数,它引发了我无法理解的警告。当我在函数之外运行相同的代码时,我没有收到警告消息。

对于信息,使用的数据库是 Microsoft SQL Server。

可重现的例子

(顺便说一句,我意识到我应该使用 dbDisconnect 来关闭连接。但这似乎会引发类似的警告。所以为了简单起见,我省略了 dbDisconnect。)

警告信息

执行上面的代码时,我在使用第一个选项(通过函数)时收到以下警告消息,但在使用第二个选项(无函数)时我没有收到它。

该警告显然是由 dbListTables 引起的,因为当我从上述函数中省略该行时它会消失。

我的问题

  • 为什么我会收到此警告消息?
  • 更具体地说,为什么我只在通过函数调用 dbListTables 时才得到它?
  • 我做错了什么/我应该做些什么来避免它?

我的会话信息

提前感谢您的帮助!

0 投票
0 回答
566 浏览

r - 无法连接到 Sybase 数据库,需要额外的参数吗?

我正在尝试使用DBIandodbc包连接到 Sybase 数据库 (ASE)。使用这些包连接失败。但是,当使用相同的 dsn 和RODBC包时,连接确实有效。DBI使用和失败的可能原因是什么odbc?连接到 Sybase 服务器时是否应该提供其他参数?(见下文)

可重现的例子

使用 DBI / odbc 时收到的错误

我的问题

  • 在调用 dbConnect 连接到 Sybase 服务器时,是否应该提供额外的参数?
  • 如果有,有哪些?
  • 如果没有,我还做错了什么?(dsn 的工作方式如使用RODBC包所示。)

我试图在这里查找额外的信息,这似乎表明我可能需要额外的参数。但是我在这方面的知识有限,所以我不确定如何适应当前的情况。

sybase 数据库版本

自适应服务器企业 15.7

会话信息

0 投票
1 回答
268 浏览

r - 闪亮的文件输入到数据库

我正在创建一个闪亮的应用程序,用户需要使用闪亮的 FileInput 上传可能相当大的数据 (CSV)。然后我想将此数据保存到远程数据库。

现在我想知道以安全方式将数据导入远程数据库的最佳方法是什么?

  • 通过执行 dbWriteTable,数据库服务器在其自己的文件系统中查找文件,而不是在运行闪亮服务器的服务器中查找文件。

  • 通过首先将数据读入 R 然后执行 dbWriteTable 似乎效率很低。它还会导致闪亮的应用程序挂起,直到此过程完成。

任何建议将不胜感激。

0 投票
4 回答
1188 浏览

r - 仅当查询返回的行数少于 n_max 时才收集

有时,当通过连接到我的Oracle数据库时ROracledbplyr我会运行一个dplyr::collect操作,该操作会获取比预期更多的数据,并且 R 可以处理。

这可能会使 R 崩溃,并且通常表明我应该在获取之前进一步过滤或聚合数据。

如果能够在选择是否获取结果之前检查结果的大小(无需运行两次查询),那就太好了。

让我们命名collect2它的变体collect将允许这样做:

预期行为:

这可能吗?

我也对使用ROracle/DBI不使用的解决方案持开放态度dplyr,例如:

编辑:

请参阅下面作为答案发布的部分解决方案,这不是最佳解决方案,因为有些时间浪费在获取我没用的数据上。

0 投票
2 回答
1219 浏览

r - 如何正确使用sqlAppendTable?

简短的摘要

我正在尝试使用包将 R data.frame 中的数据插入到 SQLServer 数据库上的表中DBI。在阅读了有关 sqlAppendTable的信息后,我希望这个函数可以帮助我生成必要的 SQL 语句。但是,这个函数似乎没有在字符变量周围放置字符串,因此在尝试执行它时会产生错误。我是否正确使用它?我应该为此目的使用此功能吗?如果没有,你能推荐另一种方法吗?

我的代码

数据库表“DBtable”有 3 列,每列都有 type varchar。data.frame "myDataFrame" 也有 3 列类型character相同,名称相同,顺序相同。

问题

sqlAppendTable生成一个不引用字符变量的 SQL 语句,即以下形式的输出:

当在语句中使用此输出时dbExecute,它会生成错误,因为值没有被引用,即,Value one one, ...而不是'Value one one', ....

我的问题

  • 有没有办法让这个函数在字符变量周围加上引号?如果是这样,怎么办?
  • 我可以为此目的使用此功能吗?(该信息表明它“对后端实现者最有用”,无论这意味着什么。)
  • 如果我不能,我可以使用其他功能吗?我宁愿避免使用paste(或类似的函数)创建自定义语句,因为这很乏味、容易出错,并且不容易为不同的表复制。
0 投票
1 回答
336 浏览

r - dbWriteTable 函数返回 TRUE 状态,即使它未能插入记录,因为它违反了模式约束

我正在使用DBI,与数据库RMySql交互的包。MySql

以下是有关配置的更多详细信息:

  • R版本:3.3.2
  • DBI 版本:0.7
  • RMySql 版本:0.10.13

下面是表站点的架构:

如您所见,字段short_name&full_name具有UNIQUE&NOT NULL约束。

在尝试插入具有重复项short_namefull_name表中已存在的行时,dbWriteTable不会让这种行插入发生,但它会返回TRUE状态,即使它违反了UNIQUE约束。NOT NULL约束也会发生同样的事情。

这是DBI&的预期行为dbWriteTable吗?为什么它不返回FALSE状态?

编辑:我还观察到,即使在违反约束的情况下dbSendStatement()dbSendQuery()不会给出任何错误。有什么方法可以了解这个吗?

0 投票
0 回答
1122 浏览

r - 执行存储过程并读取 OUTPUT 参数值和结果集

我想在具有OUTPUT参数的(Microsoft)SQL Server(2012)上执行存储过程,并希望将结果集以及输出值读回 R。

有没有办法

  • 获取 OUTPUT 参数值
  • 同时(不第二次执行存储过程)
  • 获取存储过程的结果集?

我当前解决方法的示例(使用RODBCext而不是RODBC防止 SQL 代码注入):

在 R 中使用的解决方法RODBCextRODBC如果我将 ID 粘贴到sql查询字符串中也可以使用):

PS:这里有一些相关的问题并没有为我的问题提供完整的解决方案,例如:

0 投票
1 回答
1210 浏览

mysql - 带有文本的 dbSendQuery INSERT 语句

我正在尝试对我的数据库使用动态插入语句,但它在字符列上失败。请参阅下面的代码。

#fails 行产生此错误:

query1 的值为:

我意识到问题是文本值周围缺少单引号('),但必须有一个解决方法。任何帮助表示赞赏。我尝试添加列类型,但无法使其正常工作。

0 投票
0 回答
480 浏览

r - 当为 hive 数据库中的一个非常大的表删除限制时,dbGetQuery 会限制

全部,

我正在尝试使用 R 中的 RJDBC 、 rJava 和 DBI 包从位于远程 linux 机器上的 mapr hive/hadoop 集群中的大型 hive 表中提取数据。

我在连接到 hive 集群时没有任何问题。我试图从中提取数据的表 1 的大小为 500M(百万)行 x 16 列。

这是代码:

以上工作完美, df data.frame 包含我想要的内容。但是,如果我从最后一个代码段中删除限制,则会收到错误消息:

错误:

我用谷歌搜索了错误的最后一部分,Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask并试图将这 2 个语句放在 之前dbGetQuery,但无法摆脱错误。

当我从我的选择语句中删除限制时,有人知道为什么我会收到错误吗?它甚至可以在有限制的情况下处理 1.2 亿行,但需要很长时间。在这一点上,所花费的时间对我来说不是问题。