首页 > 解决方案 > R - dbWriteTable 在列名中使用大写字母

问题描述

我正在尝试创建一个表(在 Snowflake db 中),其列名与我在 R data.frame 对象中保留的列名完全相同:

    'data.frame':   1 obs. of  26 variables:
     $ Ship_To                 : chr "0002061948"
     $ Del_Coll_Indicator      : chr "D"
     $ Currency                : chr "GBP"
     $ Total_Volume            : num 0
     $ Total_Quantity          : num 0
    ...

建表没有问题:

dbWriteTable(con = my_db$con, name = "test5", value = df)

但数据库中的所有列名都转换为大写:

'data.frame':   1 obs. of  26 variables:
 $ SHIP_TO                 : chr "0002061948"
 $ DEL_COLL_INDICATOR      : chr "D"
 $ CURRENCY                : chr "GBP"
...

有什么方法可以将 R 数据框中的原始名称保留在表中?

标签: rdbisnowflake-cloud-data-platform

解决方案


正如 Snowflake 的SQL 参考文档所涵盖的那样,当标识符(例如列名)在创建时未加引号时,Snowflake会将它们大写,并将它们视为不区分大小写。任何带引号的标识符都将保持原样并被视为区分大小写的标识符。

通过DBI 函数更改数据框列名 ( colnames(df)) 以使用带引号的标识符格式。这应该有助于保护外壳。dbQuoteIdentifier(my_db$con, each_column_name)


推荐阅读