从R将数据插入雪花表

时间:2018-10-23 16:40:31

标签: r dplyr snowflake

我的公司最近将一个表从Oracle切换到Snowflake,并且我试图制作一个R脚本,该脚本将数据插入到旧的Oracle数据库中,并将数据插入到Snowflake中。但是我无法获得dplyr.snowflakedb库来执行此操作。这是我的代码:

library(dplyr.snowflakedb)

db <- src_snowflakedb(user = credentials$login,
                      password = credentials$password,
                      account = "company",
                      opts = list(warehouse = "WH",
                                  db = "DB",
                                  schema = "STAGE"))

# calculate dataframe "rates"

db_snowflake_copy(con = db$con, from = rates, to = "FORECASTS")

导致以下错误:

Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ",  : 
  Unable to retrieve JDBC result set for COPY INTO FORECASTS FROM c(1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 
1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 1540312565.33151, 15403

使用来自db_snowflake_copy的示例,我决定尝试将数据写入csv文件,然后将其从csv提交到数据库:

tmp <- tempfile()
write_csv(rates, tmp, col_names = FALSE)

db_snowflake_copy(con = db$con, from = paste0("file://",tmp), to = "FORECASTS",
                  format_opts = list(format = 'csv', field_delimiter = ','))

unlink(tmp)

出现以下错误:

Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ",  : 
  Unable to retrieve JDBC result set for COPY INTO FORECASTS FROM file:///var/folders/y1/7zsj8_x973n4xjwg5gg6s53jr4zz65/T//RtmpZ9D3dD/file2ce511189e2 file_format = (format=csv, field_delimiter=,) (SQL compilation error:
syntax error line 1 at position 152 unexpected ','.
syntax error line 1 at position 153 unexpected ')'.)

关于接下来要尝试什么的任何想法?

1 个答案:

答案 0 :(得分:1)

不确定您使用的是哪个dplyr版本。如果您的帐户位于西部地区,则可以使用dplyr 0.4.3dplyr-snowflakedb 0.1.1组合使COPY正常工作。

最新版本组合dplyr 0.7.3 + dplyr-snowflakedb 0.3.0适用于区域parm(适用于西部地区或西部地区以外)。

在R控制台中使用东部区域测试新驱动程序的说明如下(在R中):

  1. install.packages(“ devtools”)

  2. devtools :: install_version(“ dplyr”,版本=“ 0.7.3”,存储库=“ http://cran.us.r-project.org”)

  3. devtools :: install_github(“ snowflakedb / dplyr-snowflakedb”,ref =“ v0.3.0-rc1.1”)

  4. 测试:

library(RJDBC) library(dplyr) library(dplyr.snowflakedb)

options(dplyr.jdbc.classpath = "/Users/myang/driver/snowflake-jdbc-3.0.9.jar")
my_db <- src_snowflakedb(user = "youruserid",
         password = "xxxxx",
         account = "lflk_merkle",
         region_id = "us-east-1",
         opts = list(warehouse = "lflk_merkle",
                   db = "LFLK",
                   schema = "DEV"))    
dplyr::copy_to works for COPY.