标签: rjdbc

RJDBC::dbConnect 期间的 Java 异常错误:如何静默忽略?

我正在尝试使用 RJDBC 从 R 中连接到 SAS 驱动的远程数据库。我第一次执行 a 时dbConnect,出现错误:

Error in .jcall(drv@jdrv, "Ljava/sql/Connection;", "connect", as.character(url)[1],
: java.lang.NoClassDefFoundError: com/sas/net/crypto/CryptoException
Run Code Online (Sandbox Code Playgroud)

当我dbConnect在第一次调用后第二次执行时,它连接正常,并且我返回一个 class 对象JDBCConnection

我查看了sas.core.jar文件(来自最新的 94M2 SAS JDBC 驱动程序),并且可以看到其中CryptoException列出的内容。但是,我也很好奇为什么它试图抛出一个CryptoException.

问题 1:如何在第一次dbConnect调用时默默忽略错误?

问题 2:它为什么要尝试抛出CryptoException?我能做些什么来防止这种情况?(这可能会取消问题 1。)

java r sas rjdbc

5
推荐指数
1
解决办法
2292
查看次数

在并行计算环境中使用RJDBC时出现服务器内存不足问题

我有一个带有16个内核和8Gb内存的R服务器,它初始化了一个本地SNOW集群,例如10个工作者.每个工作人员从Microsoft SQL服务器下载一系列数据集,将它们合并到某个键上,然后在将结果写入SQL服务器之前对数据集运行分析.worker和SQL Server之间的连接通过RJDBC连接运行.当多个工作程序从SQL服务器获取数据时,ram使用情况会爆炸,R服务器崩溃.

奇怪的是,与加载数据集的大小相比,加载数据的工作者使用ram的用法似乎不成比例地大.每个数据集包含大约8000行和6500列.当在磁盘上保存为R对象时,这将转换为大约20MB,在保存为逗号分隔文件时大约为160MB.然而,R会话的ram使用大约是2,3 GB.

以下是代码的概述(一些提高可读性的印刷更改):

使用RJDBC建立连接:

require("RJDBC")
drv <- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver","sqljdbc4.jar")
con <<- dbConnect(drv, "jdbc:sqlserver://<some.ip>","<username>","<pass>")
Run Code Online (Sandbox Code Playgroud)

在此之后,有一些代码将函数输入向量requestedDataSets与所有表的名称进行排序,以按记录数查询,这样我们就可以从最大到最小加载数据集:

nrow.to.merge <- rep(0, length(requestedDataSets))
for(d in 1:length(requestedDataSets)){
nrow.to.merge[d] <- dbGetQuery(con, paste0("select count(*) from",requestedDataSets[d]))[1,1]
}
merge.order <- order(nrow.to.merge,decreasing = T)
Run Code Online (Sandbox Code Playgroud)

然后我们通过requestedDatasets向量并加载和/或合并数据:

for(d in merge.order){
    # force reconnect to SQL server
    drv <- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver","sqljdbc4.jar")
    try(dbDisconnect(con), silent = T)
    con <<- dbConnect(drv, "jdbc:sqlserver://<some.ip>","<user>","<pass>")
    # remove the to.merge object
    rm(complete.data.to.merge)
    # force garbage collection
    gc()
    jgc()
    # ask database for dataset d
    complete.data.to.merge <- dbGetQuery(con, …
Run Code Online (Sandbox Code Playgroud)

memory sql-server garbage-collection r rjdbc

5
推荐指数
1
解决办法
148
查看次数

R JDBC错误“无法检索JDBC结果集以插入...”

我试图将R data.frame写入Netezza表。它有大约5.5万行,并且我将4GB设置为Java的内存限制(选项(java.parameters =“ -Xmx4096m”))

查询:

insert into MY_TABLE_NAME select * from external 'csv_file_containing_data_frame.csv' using (delim ',' remotesource 'jdbc');
Run Code Online (Sandbox Code Playgroud)

当我从诸如DbVisualizer之类的工具运行SQL时,上面的SQL 可以正常工作,但是当我尝试从RStudio运行它时出现以下错误。

R代码:

driver <- JDBC(driverClass="org.netezza.Driver", classPath = "drivers//nzjdbc.jar", "'")

connWrite <- dbConnect(driver, "jdbc:netezza://DB_SERVER:1234//DB_NAME", username, password)

str_insert_query <- paste(
    "insert into MY_TABLE select * from external '", OutputFile , "' using (delim ',' remotesource 'jdbc');", sep = ""

dbSendQuery(connWrite, str_insert_query[1])

dbDisconnect(connWrite)
Run Code Online (Sandbox Code Playgroud)

错误信息:

Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ",  : 
  Unable to retrieve JDBC result set for …
Run Code Online (Sandbox Code Playgroud)

r netezza rjdbc

5
推荐指数
1
解决办法
7125
查看次数

Postgres DB无法通过RJDBC连接到R.

我一直试图通过R从PostgreSQL数据库查询数据.我尝试用一​​些不同的软件包(RODBC, RJDBC, DBI, RPostgres等等)对猫进行换肤,但我似乎不断收到驱动程序错误.奇怪的是,我从来没有遇到过使用相同的驱动程序/ URL和设置从SQLWorkbench/J连接到Postgres的麻烦.

我已尝试使用postgresql-9.2-1002.jdbc4.jarpostgresql-9.3-1100.jdbc41.jar,以及"PostgreSQL"R中的通用驱动程序.两个jar文件分别是(i)我一直使用SQLWorkbench/J的驱动程序和(ii)相同驱动程序的稍新版本.然而,当我尝试使用它时......

drv_custom <- JDBC(driverClass = "org.postgresql.Driver", classPath="/Users/xxxx/postgresql-9.3-1100.jdbc41.jar")
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

Error in .jfindClass(as.character(driverClass)[1]) : class not found
Run Code Online (Sandbox Code Playgroud)

好的,接下来我尝试使用通用驱动程序:

drv_generic <- dbDriver("PostgreSQL")
Run Code Online (Sandbox Code Playgroud)

奇怪的是,它不希望我输入用户名:

>con <- dbConnect(drv=drv_generic, "jdbc:postgresql://xxx.xxxxx.com", port=xxxx,     uid="xxxx", password="xxxx")
>Error in postgresqlNewConnection(drv, ...) : unused argument (uid = "xxxx")
Run Code Online (Sandbox Code Playgroud)

所以我没有用户/ uid尝试:

con < - dbConnect(drv_generic,"jdbc:postgresql://padb-01.jiwiredev.com:5439",password ="paraccel")

并得到一个错误....

Error in postgresqlNewConnection(drv, ...) : 
RS-DBI driver: (could not connect jdbc:postgresql://padb-01.xxx.com:5439@local on dbname "jdbc:postgresql://xxxx.xxxx.com:5439")
Run Code Online (Sandbox Code Playgroud)

显然语法错了?

然后我回过头来尝试"自定义"驱动程序(前面的.jar文件之一),但没有指定driverClass.

drv_custom1 < - JDBC(classPath ="/ Users/xxxx/postgresql-9.2-1002.jdbc4.jar") …

java postgresql r jdbc rjdbc

4
推荐指数
1
解决办法
7142
查看次数

使用JDBC连接R和Teradata

我正在尝试使用RJDBC连接R和Teradata.

我发现这个链接有一个使用mysql的例子,但我不知道如何用teradata做同样的事情.

library(RJDBC)
drv <- JDBC("com.mysql.jdbc.Driver",
           "/etc/jdbc/mysql-connector-java-3.1.14-bin.jar",
           identifier.quote="`")
conn <- dbConnect(drv, "jdbc:mysql://localhost/test", "user", "pwd")
Run Code Online (Sandbox Code Playgroud)

我已经下载了这个驱动程序:http: //downloads.teradata.com/download/connectivity/jdbc-driver 但是我不确定我应该在哪里引用该目录.

我知道有一个teradataR包在那里,但我不知道它是否真的使用R 3.0.0工作.

目前我只是将数据从数据库中拉出来很有意思.简单的事情SELECT * FROM table.问题是RODBC很慢......

还有其他选择来完成这项任务吗?

r teradata rodbc rjdbc

4
推荐指数
1
解决办法
5813
查看次数

从R - windows 10连接到amazon redshift时出错

当使用JDBC函数将R连接到amazon redshift时(我使用的是Windows 10),我收到以下错误:

Error in .jfindClass(as.character(driverClass)[1]) : class not found
Run Code Online (Sandbox Code Playgroud)

我正在运行的代码是

install.packages("rJava")
install.packages("RJDBC")
library(rJava)
library(RJDBC)

download.file('http://s3.amazonaws.com/redshift-downloads/drivers/RedshiftJDBC41-1.1.13.1013.jar','RedshiftJDBC41-1.1.13.1013.jar')
driver <- JDBC("com.amazon.redshift.jdbc41.Driver", "RedshiftJDBC41-1.1.13.1013.jar", identifier.quote = "`")
Run Code Online (Sandbox Code Playgroud)

为了获得有关错误的更多信息,我运行了这个:

 .jclassLoader()$setDebug(1L)
Run Code Online (Sandbox Code Playgroud)

并且完整的错误跟踪是:

RJavaClassLoader: added 'RedshiftJDBC41-1.1.13.1013.jar' to the URL class path loader
RJavaClassLoader: adding Java archive file 'RedshiftJDBC41-1.1.13.1013.jar' to the internal class path
RJavaClassLoader: added 'C:/Users/user/Documents/R/win-library/3.2/RJDBC/java/RJDBC.jar' to the URL class path loader
RJavaClassLoader: adding Java archive file 'C:/Users/user/Documents/R/win-library/3.2/RJDBC/java/RJDBC.jar' to the internal class path
RJavaClassLoader@33909752.findClass(com.amazon.redshift.jdbc41.Driver)
 - URL loader did not find it: java.lang.ClassNotFoundException: com.amazon.redshift.jdbc41.Driver
RJavaClassLoader.findClass("com.amazon.redshift.jdbc41.Driver")
 - trying class …
Run Code Online (Sandbox Code Playgroud)

r rjdbc amazon-redshift windows-10

4
推荐指数
1
解决办法
2608
查看次数

使用RJDBC/RHive从R连接到远程Hive服务器

我正在使用RJDBC 0.2-5连接到Rstudio中的Hive.我的服务器有hadoop-2.4.1和hive-0.14.我按照下面提到的步骤连接到Hive.

library(DBI)
library(rJava)
library(RJDBC)
.jinit(parameters="-DrJava.debug=true")
drv <- JDBC("org.apache.hadoop.hive.jdbc.HiveDriver", 
            c("/home/packages/hive/New folder3/commons-logging-1.1.3.jar",
              "/home/packages/hive/New folder3/hive-jdbc-0.14.0.jar",
              "/home/packages/hive/New folder3/hive-metastore-0.14.0.jar",
              "/home/packages/hive/New folder3/hive-service-0.14.0.jar",
              "/home/packages/hive/New folder3/libfb303-0.9.0.jar",
              "/home/packages/hive/New folder3/libthrift-0.9.0.jar",
              "/home/packages/hive/New folder3/log4j-1.2.16.jar",
              "/home/packages/hive/New folder3/slf4j-api-1.7.5.jar",
              "/home/packages/hive/New folder3/slf4j-log4j12-1.7.5.jar",
              "/home/packages/hive/New folder3/hive-common-0.14.0.jar",
            "/home/packages/hive/New folder3/hadoop-core-0.20.2.jar",
            "/home/packages/hive/New folder3/hive-serde-0.14.0.jar",
             "/home/packages/hive/New folder3/hadoop-common-2.4.1.jar"),
            identifier.quote="`")

conHive <- dbConnect(drv, "jdbc:hive://myserver:10000/default",
                  "usr",
                  "pwd")
Run Code Online (Sandbox Code Playgroud)

但我总是收到以下错误:

.jcall中的错误(drv @ jdrv,"Ljava/sql/Connection;","connect",as.character(url)[1],:java.lang.NoClassDefFoundError:无法初始化类org.apache.hadoop.hive .conf.HiveConf $ ConfVars

即使我尝试使用不同版本的Hive jar,Hive-jdbc-standalone.jar但似乎没有任何工作..我也使用RHive连接到Hive,但也没有成功.

任何人都可以帮助我吗?..我有点卡住:(

hadoop hive r rjdbc

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