小编Mic*_*iel的帖子

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

我正在尝试使用RJDBC的dbWritetable以下列方式从R到SAP HANA编写一个大型数据集(10个字符串,100M记录)

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)
Run Code Online (Sandbox Code Playgroud)

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

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

ROracle有一个bulk_write选项似乎可以解决这个问题,但由于我正在尝试写HANA,我需要RJDBC或RODBC.

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

sap r rjdbc

10
推荐指数
1
解决办法
997
查看次数

通过两个最近的变量合并data.table

我有两个数据表,其中包含x,y坐标和其他一些我希望根据最近邻距离合并的信息,即x和y的平方差最小值(dx_i = min([(x_i-x_j)^ 2+(y_i-y_j)^ 2] ^ 0.5).说我有以下两组:

DT1=data.table(x=1:5,y=3:7)    
DT2=data.table(x=c(2,4,2,3,6),y=c(2.5,3.1,2,3,5),Q=c('a','b','c','d','e'))
Run Code Online (Sandbox Code Playgroud)

那么合并的期望结果将是:

   x y Q
1: 1 3 a
2: 2 4 d
3: 3 5 d
4: 4 6 e
5: 5 7 e
Run Code Online (Sandbox Code Playgroud)

我当然可以在DT1上编写一个循环来计算DT1中每行的最近邻居,然后根据这个计算进行合并,但这似乎打败了数据表的目的.而且,对于数百万行的数据表来说,这将是非常慢的.

我知道对于单个列我可以像这样做最近邻居合并

DT2[DT1,roll="nearest"]
Run Code Online (Sandbox Code Playgroud)

但是,当我为要合并的表定义2个键(x和y)时,(逻辑上)不起作用.是否存在2参数最近邻居合并的类似语法?如果没有,是否有更聪明的方法来做这个然后循环,就像我提到的那样?

merge r data.table

7
推荐指数
1
解决办法
762
查看次数

标签 统计

r ×2

data.table ×1

merge ×1

rjdbc ×1

sap ×1