Python 如何高效地将数据从R上传到SQL数据库(雪花)?

Python 如何高效地将数据从R上传到SQL数据库(雪花)?,python,sql,r,database,snowflake-cloud-data-platform,Python,Sql,R,Database,Snowflake Cloud Data Platform,我想创建一个函数,尽可能高效地将可能大的数据帧(1M+行)从R上传到Snowflake。下面的代码是我目前的方法,我将数据帧分成100条记录的块,并通过dbSendUpdate循环通过100行的迭代,再加上剩余的行。对于一个大数据帧,这通常需要很长时间,有没有更有效的方法可以替代 upload_func <- function (dataframe) { for (i in 0:(nrow(dataframe)/100 - (nrow(dataframe)/100)%%1)) { if

我想创建一个函数,尽可能高效地将可能大的数据帧(1M+行)从R上传到Snowflake。下面的代码是我目前的方法,我将数据帧分成100条记录的块,并通过dbSendUpdate循环通过100行的迭代,再加上剩余的行。对于一个大数据帧,这通常需要很长时间,有没有更有效的方法可以替代

upload_func <- function (dataframe) {
for (i in 0:(nrow(dataframe)/100 - (nrow(dataframe)/100)%%1)) {
  if (100*(i + 1) <= nrow(dataframe)) {

    b <- 100*i + 1
    e <- 100*(i + 1)

    values <- paste0(apply(dataframe[b:e,], 1, function(x) paste0("('", paste0(x, collapse = "', '"), "')")), collapse = ", ")

    dbSendUpdate(connection, paste0("INSERT INTO database_table
                                  VALUES ", values, ";"))
  }

  else {
    values <- paste0(apply(dataframe[(i*100 + 1):(i*100 + nrow(dataframe)%%100), ], 1, function(x) paste0("('", paste0(x, collapse = "', '"), "')")), collapse = ", ")

    dbSendUpdate(connection, paste0("INSERT INTO database_table 
                                  VALUES ", values, ";"))
  }
}

upload\u func不确定R,但插入时不应该使用循环。使用Snowflake提供的本机函数,如
复制到…
等,这将更有效,如果不起作用,则另一种方法是使用单个
插入
语句进行大容量插入。我注意到dbSendUpdate能够发送的记录数有限制,因此循环会更频繁。你知道大容量插入是否会受到同样的影响吗?@mad_uu推荐的
COPY-INTO
是最快将数据导入Snowflake的正确方法。让R将数据放到blob存储器上的一个文件中,然后使用
复制到
将其放入雪花中。任何类型的
INSERT
语句都不会那么有效,尤其是对于较大的数据集。不确定R,但您不应该在INSERT中使用循环。使用Snowflake提供的本机函数,如
复制到…
等,这将更有效,如果不起作用,则另一种方法是使用单个
插入
语句进行大容量插入。我注意到dbSendUpdate能够发送的记录数有限制,因此循环会更频繁。你知道大容量插入是否会受到同样的影响吗?@mad_uu推荐的
COPY-INTO
是最快将数据导入Snowflake的正确方法。让R将数据放到blob存储器上的一个文件中,然后使用
复制到
将其放入雪花中。任何类型的
INSERT
语句都不会那么有效,尤其是对于较大的数据集。