r - 由于逐条记录插入,使用 dbWritetable 使用 RJDBC 写入 SAP HANA 非常慢

标签 r hana rjdbc

我正在尝试使用 RJDBC 的 dbWritetable 通过以下方式将大型数据集(10 列,100M 记录)从 R 写入 SAP HANA

library("RJDBC")
drv <- JDBC("com.sap.db.jdbc.Driver", "/data/hdbclient/ngdbc.jar", "'")
database <- dbConnect( drv,"jdbc:sap://servername", "USER", "PASS")

dbWriteTable(database, "largeSet", largeSet)

这有效,但速度非常慢(每小时 75k 条记录)。我也测试了 RODBC ( sqlsave ),这显示了同样的问题。

查看背后的代码 dbWriteTable似乎写入是逐条记录的(即与插入相同)并且确实使用逐行插入使用 dbSendUpdate显示相同的性能。我已经验证问题不在于连接速度本身。

ROracle 有一个 bulk_write选项似乎解决了这个问题,但由于我正在尝试写入 HANA,因此我需要 RJDBC 或 RODBC。

谁能告诉我如何通过运行批量写入或其他方法来加快写入 HANA 的速度?

最佳答案

如果您的主要目标是加快速度,而无需更改太多其他内容,您可以切换到 sjdbc包,在这方面比 RJDBC 性能要好得多(遗憾的是,近年来并没有引起太多关注)。

当我写这篇文章并查看 时克兰 ,看起来西蒙最近才发现它并在一周前发布了一个新版本。这实际上包括对 dbSendUpdate 的改进。 :

https://cran.r-project.org/web/packages/RJDBC/NEWS

关于r - 由于逐条记录插入,使用 dbWritetable 使用 RJDBC 写入 SAP HANA 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32053454/

相关文章:

r - 在 R 中为 gstat 中的克里金法创建网格

key - 如何使用 SAP HANA 向现有表添加(主)键

sql - 使多行的列值无效

r - 使用 RJDBC 将数据帧写入 Teradata 表

r - 如何计算移动平均线交叉后的天数?

r - R 中的 glm() 错误

mysql - SQL 查询 nvarchar 至今

r - 如何防止截断 R 中的错​​误消息

r - 尝试连接到Hive服务器时出现RJDBC错误:org.apache.thrift.TApplicationException:无效的方法名称: 'execute'

r - 图例中的更长的行()