使用RJDBC连接R和Netezza

使用RJDBC连接R和Netezza,r,jdbc,netezza,R,Jdbc,Netezza,我正在尝试使用JDBC驱动程序将R与Netezza连接起来 我成功地与数据库连接,但结果不正确 # Here are the connection details library(RJDBC) drv <- JDBC(driverClass="org.netezza.Driver", classPath = "C://JDBC//nzjdbc.jar", "'") con <- dbConnect(drv, "jdbc:netezza://10.206.0.66:5480//DBAS

我正在尝试使用JDBC驱动程序将R与Netezza连接起来

我成功地与数据库连接,但结果不正确

# Here are the connection details
library(RJDBC)
drv <- JDBC(driverClass="org.netezza.Driver", classPath = "C://JDBC//nzjdbc.jar", "'")
con <- dbConnect(drv, "jdbc:netezza://10.206.0.66:5480//DBASE", "USER", "PASS")

# > con
# An object of class "JDBCConnection"
# Slot "jc":
# [1] "Java-Object{org.netezza.sql.NzConnection@bce3d7}"

# Slot "identifier.quote":
# [1] "'"

res <- dbSendQuery(con, "SELECT * FROM DBASE.MARBEL.DATOS limit 10000;")
res <- fetch(res, n = -1)

你知道怎么解决这个问题吗??我有一个正常工作的ODBC连接,但我更愿意使用JDBC。

我将您的输出一直向右滚动,看起来您的列中的字符串非常宽(它们是CHAR而不是VARCHAR?),因此结果不适合R控制台的宽度。因此R以这种方式显示它们

因此,请尝试在查询中删除它们

select rtrim(SUB_ACCOUNT_ID), ...
或在R中:

require('stringr')
res$SUB_ACCOUNT_ID <- str_trim(res$SUB_ACCOUNT_ID)
require('stringr'))

res$SUB_ACCOUNT_ID基于Alex answer,我编写了这个函数来在所有变量中使用rtrim

query_nzz <- function(con, select="select * ", from="", where = "", limit = " 10000; "){
  options(scipen=666)

  # Get variable Names
  query_names = paste(select, " from ",from, where, sep = " ")
  names <- dbGetQuery(con, paste(query_names,"limit 1;", sep= " "))
  names <- names(names)

  # Trim spaces
  select <- paste0("trim(",names,") as ", names, collapse = ",")

  query = paste0("select ", select, " from ", from, where, " limit ",deparse(limit),";")
  data = dbGetQuery(con, query)
  data
}

query\u nzz您是如何获得“res”的?你能发布缺失的代码+表定义吗?我已经添加了缺失的内容。该表有70列不同的数据类型。由于输出的格式,复制粘贴此内容需要几页时间。由于我定期成功地将RJDBC与Teradata一起使用,R如何连接到netezza似乎存在问题。请尝试使用
paste0('trim(',names',')As',names,collapse=',')
而不是循环。
query_nzz <- function(con, select="select * ", from="", where = "", limit = " 10000; "){
  options(scipen=666)

  # Get variable Names
  query_names = paste(select, " from ",from, where, sep = " ")
  names <- dbGetQuery(con, paste(query_names,"limit 1;", sep= " "))
  names <- names(names)

  # Trim spaces
  select <- paste0("trim(",names,") as ", names, collapse = ",")

  query = paste0("select ", select, " from ", from, where, " limit ",deparse(limit),";")
  data = dbGetQuery(con, query)
  data
}
  dt <- query_nzz(
    con,
    select = "select * ",
    from = "DATABASE.TABLENAME",
    where = "",
    limit = 100000
  )