DBI dbWriteTable是否有行限制1457?

时间:2018-06-29 01:28:38

标签: r sql-server dataframe limit r-dbi

使用R并对错误进行故障排除,我发现了DBI :: dbWriteTable的一个有趣的限制(似乎有)。

我正在尝试将大型数据my.df帧写入sql服务器。

dim(my.df) => 19391 18

dbWriteTable(conn = connection, name = "name_of_table", value = my.df, row.names = FALSE, append=TRUE)

但这失败并显示错误(似乎被截断了):

Error in result_insert_dataframe(rs@ptr, values) : 
     nanodbc/nanodbc.cpp:1587: 42000: [Microsoft][ODBC Driver 17 for SQL Server][SQL Se 

现在有趣的是,将行限制为my.df[1:1456,]是可行的,没问题:

dbWriteTable(conn = connection, name = "name_of_table", value = my.df[1:1456,], row.names = FALSE, append=TRUE)

但是现在尝试my.df[1:1457,]并返回上一个错误:

dbWriteTable(conn = connection, name = "name_of_table", value = my.df[1:1457,], row.names = FALSE, append=TRUE)

检查1457不是有问题的行,以下通过:

dbWriteTable(conn = connection, name = "name_of_table", value = my.df[1457,], row.names = FALSE, append=TRUE)

我不确定这是R还是服务器的限制。是否有人对导致此错误的原因以及解决该错误的最佳方法有任何见识?

很抱歉,我无法提供服务器连接详细信息或数据框中的数据。

谢谢。

编辑>

此数据帧中一行的示例是: enter image description here

或检测结果:

dput(one_row.df)

structure(list(name = 2272L, name = 0.067, name = 1, name = 1, 
    name = 1, name = 0.067, name = FALSE, name = FALSE, name = TRUE, 
    name = TRUE, name = TRUE, name = TRUE, name = TRUE, name = TRUE, 
    name = TRUE, name = 0.402, name = structure(1530282001.49934, class = c("POSIXct", 
    "POSIXt")), name = "0"), .Names = c("name", "name", "name", 
"name", "name", "name", "name", "name", "name", "name", "name", 
"name", "name", "name", "name", "name", "name", "name"), row.names = 5L, class = "data.frame") 

半复制示例

在上面的示例行中,我仅复制了该行多次,并在writetable中使用了该行。这次通过了1024行,但是1025行失败,如以下输出所示。我还列出了它们的尺寸。

> dbWriteTable(connection, name = "name_of_table", value = mefa:::rep.data.frame(one_row.df, times = 1024), row.names = FALSE, append=TRUE)
> dbWriteTable(connection, name = "name_of_table", value = mefa:::rep.data.frame(one_row.df, times = 1025), row.names = FALSE, append=TRUE)
Error in result_insert_dataframe(rs@ptr, values) : 
  nanodbc/nanodbc.cpp:1587: 42000: [Microsoft][ODBC Driver 17 for SQL Server][SQL Se                                                    
> mefa:::rep.data.frame(one_row.df, times = 1024) %>% object.size()
105808 bytes
> mefa:::rep.data.frame(one_row.df, times = 1025) %>% object.size()
105952 bytes

原始df行的大小为:

  • object.size(my.df[1:1456,]) =已通过的154464字节
  • object.size(my.df[1:1457,]) = 154608字节失败

EDIT2>包括服务器连接详细信息

connnection <- DBI::dbConnect(odbc::odbc(),
                          Driver   = "ODBC Driver 17 for SQL Server",
                          Server   = "server-name",
                          Database = "db",
                          UID      = "db_user",
                          PWD      = "db_password",
                          Port     = 1433)

0 个答案:

没有答案