【问题标题】:using RODBC sqlquery in R to import long string, but R truncate the string, how to get around this?在 R 中使用 RODBC sqlquery 导入长字符串,但 R 截断字符串,如何解决这个问题?
【发布时间】:2018-10-14 02:58:36
【问题描述】:

我正在使用 R 库 (RODBC) 导入 sql 存储过程的结果并将其保存在数据框中,然后使用 write.table 导出该数据框以将其写入 xml 文件(来自 sql 的结果是xml 输出) 无论如何,R 正在截断字符串(从 sql 导入的 xml 结果)。 我试图找到一个函数或一个选项来扩展 R 数据框单元格的大小/长度,但没有找到任何 我还尝试在 write.table 语句中使用 sqlquery 来忽略使用数据框,但它也不起作用,从 sql 导入的数据总是被截断。 任何人都有任何可以帮助我的建议或答案。 这是我的代码

#library & starting the sql connection
library(RODBC)
my_conn<-odbcDriverConnect('Driver={SQL Server};server=sql2014;database=my_conn;trusted_connection=TRUE') 

#Create a folder and a path to save my output
x <- "C:/Users/ATM1/Documents/R/CSV/test"
dir.create(x, showWarnings=FALSE)
setwd(x)
Mpath <- getwd()

#importing the data from sql store procedure output
xmlcode1 <- sqlquery(my_conn, "exec dbo.p_webDefCreate 'SA25'", stringsAsFactors=F, as.is=TRUE)


#writing to a file
write.table(xmlcode1, file=paste0(Mpath,"/SA5b_def.xml"), quote = FALSE, col.names = FALSE, row.names = FALSE)

我得到的是不是完整输出的纯文本。 下面的代码是我如何找到我的字符串的当前长度

stri_length(xmlcode1) [1] 65534

【问题讨论】:

  • 嗨本杰明,这个问题没有回答我的问题,我的存储过程结果是 xml,而不是我可以尝试使用它的列大小或其他什么的表。该 xml 输出被读取为一个字符串,然后保存到一个 xml 文件中,它应该被视为 xml 但它不会发生,因为它被截断了。当我使用具有较短结果的不同表名运行存储过程时,一切运行顺利,但结果不长
  • 你是对的。我没有意识到您没有从表中提取数据。恐怕我没有给你一个好的解决方案。也许试试DBI 风格的界面? (基于 ODBC 驱动程序的限制,我不确定它会有多好)
  • 不幸的是我不能使用 BDI,我只限于我的代理所拥有的 R 包,我们不允许下载任何东西,他们有某种程序他们去在下载任何软件包之前通过。你知道我可以将导入的字符串分成两半并将其保存在两个数据帧中的方法吗,因为我可以在写入文件时将这两者结合起来

标签: r string dataframe truncate rodbc


【解决方案1】:

我正在使用 PostgeSQL,但在使用 RODBC 包导入 R 时遇到了相同的截断问题。我使用 Michael Kassa 的解决方案稍作更改,将数据类型设置为 text,它可以存储每个 postgresqltutorial 的无限长度的字符串。这对我有用。

TEXT 数据类型可以存储无限长度的字符串。

varchar() 也为我工作

如果您没有为 VARCHAR 数据类型指定 n 整数,它的行为类似于 TEXT 数据类型。 VARCHAR(没有大小n)和TEXT的性能是一样的。

【讨论】:

    【解决方案2】:

    我在我们的项目中遇到了类似的问题,来自数据库的数据被截断为 257 个字符,我无法真正解决这个问题。最终,我将 db 表上的列 def 从 varchar(max) 转换为 varchar(8000) 并取回了所有字符。我不介意更改表格定义。

    在你的情况下,如果可能的话,你也许可以将 proc 输出中的列类型转换为具有一些定义值的 varchar。

    M

    【讨论】:

      猜你喜欢
      • 2011-06-05
      • 2017-10-30
      • 2021-12-22
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多