问题标签 [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.
sql-server - 在 SQL Server 数据库中使用 R DBI 包中的 dbWriteTable 时,Field.types 不起作用
我正在使用 DBI 包和 odbc 包来连接到 SQL Server 数据库。我正在尝试使用field.types
参数指定的列类型编写一个表。出于某种原因,这不起作用,并且 R 在编写时会选择自己的数据类型。
一个可重现的例子:
结果:一个名为“tableName”的表,其中包含列
我的问题:
如何更正上面的示例,以便数据库上的列类型
varchar(50)
适用于两列?field.types
对于其他示例,如何正确使用该参数?
我想知道的是,我应该使用什么“类型”:我需要“int”还是“integer”还是“INT”(R 区分大小写,所以可能很重要)?然后,我在哪里可以找到这些数据类型的列表?我曾尝试使用 dbDataType,但使用此函数返回的类型也不起作用。还是我做错了什么?
提前感谢您的帮助。
sql-server - 为什么通过函数调用 dbListTables 时会给出警告消息?(R DBI)
我使用 DBI 包中的 dbListTables 编写了一个函数,它引发了我无法理解的警告。当我在函数之外运行相同的代码时,我没有收到警告消息。
对于信息,使用的数据库是 Microsoft SQL Server。
可重现的例子
(顺便说一句,我意识到我应该使用 dbDisconnect 来关闭连接。但这似乎会引发类似的警告。所以为了简单起见,我省略了 dbDisconnect。)
警告信息
执行上面的代码时,我在使用第一个选项(通过函数)时收到以下警告消息,但在使用第二个选项(无函数)时我没有收到它。
该警告显然是由 dbListTables 引起的,因为当我从上述函数中省略该行时它会消失。
我的问题
- 为什么我会收到此警告消息?
- 更具体地说,为什么我只在通过函数调用 dbListTables 时才得到它?
- 我做错了什么/我应该做些什么来避免它?
我的会话信息
提前感谢您的帮助!
r - 无法连接到 Sybase 数据库,需要额外的参数吗?
我正在尝试使用DBI
andodbc
包连接到 Sybase 数据库 (ASE)。使用这些包连接失败。但是,当使用相同的 dsn 和RODBC
包时,连接确实有效。DBI
使用和失败的可能原因是什么odbc
?连接到 Sybase 服务器时是否应该提供其他参数?(见下文)
可重现的例子
使用 DBI / odbc 时收到的错误
我的问题
- 在调用 dbConnect 连接到 Sybase 服务器时,是否应该提供额外的参数?
- 如果有,有哪些?
- 如果没有,我还做错了什么?(dsn 的工作方式如使用
RODBC
包所示。)
我试图在这里查找额外的信息,这似乎表明我可能需要额外的参数。但是我在这方面的知识有限,所以我不确定如何适应当前的情况。
sybase 数据库版本
自适应服务器企业 15.7
会话信息
r - 闪亮的文件输入到数据库
我正在创建一个闪亮的应用程序,用户需要使用闪亮的 FileInput 上传可能相当大的数据 (CSV)。然后我想将此数据保存到远程数据库。
现在我想知道以安全方式将数据导入远程数据库的最佳方法是什么?
通过执行 dbWriteTable,数据库服务器在其自己的文件系统中查找文件,而不是在运行闪亮服务器的服务器中查找文件。
通过首先将数据读入 R 然后执行 dbWriteTable 似乎效率很低。它还会导致闪亮的应用程序挂起,直到此过程完成。
任何建议将不胜感激。
r - 仅当查询返回的行数少于 n_max 时才收集
有时,当通过连接到我的Oracle
数据库时ROracle
,dbplyr
我会运行一个dplyr::collect
操作,该操作会获取比预期更多的数据,并且 R 可以处理。
这可能会使 R 崩溃,并且通常表明我应该在获取之前进一步过滤或聚合数据。
如果能够在选择是否获取结果之前检查结果的大小(无需运行两次查询),那就太好了。
让我们命名collect2
它的变体collect
将允许这样做:
预期行为:
这可能吗?
我也对使用ROracle
/DBI
不使用的解决方案持开放态度dplyr
,例如:
编辑:
请参阅下面作为答案发布的部分解决方案,这不是最佳解决方案,因为有些时间浪费在获取我没用的数据上。
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
(或类似的函数)创建自定义语句,因为这很乏味、容易出错,并且不容易为不同的表复制。
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_name
或full_name
表中已存在的行时,dbWriteTable
不会让这种行插入发生,但它会返回TRUE
状态,即使它违反了UNIQUE
约束。NOT NULL
约束也会发生同样的事情。
这是DBI
&的预期行为dbWriteTable
吗?为什么它不返回FALSE
状态?
编辑:我还观察到,即使在违反约束的情况下dbSendStatement()
也dbSendQuery()
不会给出任何错误。有什么方法可以了解这个吗?
r - 执行存储过程并读取 OUTPUT 参数值和结果集
我想在具有OUTPUT
参数的(Microsoft)SQL Server(2012)上执行存储过程,并希望将结果集以及输出值读回 R。
有没有办法
- 获取 OUTPUT 参数值
- 同时(不第二次执行存储过程)
- 获取存储过程的结果集?
我当前解决方法的示例(使用RODBCext
而不是RODBC
防止 SQL 代码注入):
在 R 中使用的解决方法RODBCext
(RODBC
如果我将 ID 粘贴到sql
查询字符串中也可以使用):
PS:这里有一些相关的问题并没有为我的问题提供完整的解决方案,例如:
mysql - 带有文本的 dbSendQuery INSERT 语句
我正在尝试对我的数据库使用动态插入语句,但它在字符列上失败。请参阅下面的代码。
#fails 行产生此错误:
query1 的值为:
我意识到问题是文本值周围缺少单引号('),但必须有一个解决方法。任何帮助表示赞赏。我尝试添加列类型,但无法使其正常工作。
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 亿行,但需要很长时间。在这一点上,所花费的时间对我来说不是问题。