有人知道如何将R数据帧写入新的Snowflake数据库表吗?我在R中创建了一个成功的Snowflake ODBC连接,可以成功地从Snowflake查询。连接命令为:conn<;-dbi::dbConnect(odbc::odbc(),"Snowflake")。
现在,我想将在R中创建的一个数据帧作为表写回Snowflake。我使用了以下命令:dbWriteTable(conn,"database ase.schema.tablename",R data frame name)。使用此命令成功连接到Snowflake,但收到以下错误消息:"ERROR in NEW_RESULT(Connection@ptr,Statement):nanodbc/nanodbc.cpp:1344:22000:无法执行CREATE TABLE。此会话没有当前数据库。请调用‘USE DATABASE’,或使用限定名称。"我在dbWriteTable函数的"database ase.schema.tablename"参数中使用了限定的数据库名称。我不明白如何在我的R函数中使用"use database"。有什么想法吗??谢谢!!
推荐答案DBI::dbWriteTable(…)的接口要求将文字表名作为字符串传递,或者作为正确引用的标识符传递:
dbWriteTable(conn, name, value, ...)
conn:DBIConnection对象,dbConnect()返回。
name:指定未加引号的DBMS表名的字符串,或dbQuoteIdentifier()调用的结果。
value:data.frame(或强制data.frame)。
dbWriteTable(conn, "database.schema.tablename", R data frame name)上面的代码将尝试使用与Connection对象关联的数据库和架构上下文创建一个名为的表"database.schema.tablename"。
例如,如果您的连接设置了数据库DB和架构SCH,则将成功创建名为DB.SCH."database.schema.tablename"的表。
若要正确定义数据库、架构和表名,请使用具有正确层次结构顺序的DBI::Id类对象:
table_id <- Id(database="database", schema="schema", table="tablename") dbWriteTable(conn, table_id, R data frame name)在后台,DBI::dbWriteTable(…)函数通过DBI::dbQuoteIdentifier(…)识别name和converts it into a quoted identifier格式的DBI::Id类参数类型(为方便起见)。
更多推荐
如何将R数据帧写入Snowflake数据库表
发布评论