我通过RODBC
包从ODBC写入SQL Server表,特别是函数sqlSave
。对于此函数,似乎默认的var类型为charvar(255)
。我试图使用文档中列出的varTypes参数,但它失败了。
这是一个名为spikes20
的表,具有类结构,这反过来又是我想通过sqlSave保存的
sapply(spikes20, class)
Date Day EWW PBR BAC CHTP FB SPY
"Date" "factor" "numeric" "numeric" "numeric" "numeric" "numeric" "numeric"
以下是尝试写入SQL Server的代码
require(RODBC)
varTypes = c(as.Date="Date")
channel <-odbcConnect("OptionsAnalytics", uid="me", pwd="you")
sqlSave (channel, spikes20, tablename = NULL, append=TRUE, rownames = FALSE, colnames = TRUE, safer = FALSE, addPK = FALSE, varTypes=varTypes )
我得到的错误消息是:
警告讯息:
在sqlSave中(channel,spikes20,tablename = NULL,append = TRUE,rownames = FALSE,: column(s)as.Date'dat'不在'varTypes'
的名称中我尝试将varType更改为:
varTypes=c(Date="Date")
然后错误消息变为:
Error in sqlSave(channel, spikes20, tablename = NULL, append = TRUE, rownames = FALSE, :
[RODBC] Failed exec in Update
22007 241 [Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed when converting date and/or time from character string.
任何帮助将不胜感激。我似乎无法破译正确使用varTypes ......
答案 0 :(得分:7)
首先,您是否真的尝试附加到名为NULL的表?
就varTypes的问题而言,根据我的经验,我必须为数据框中的所有变量提供映射,即使varTypes argurment的文档说:
“可选的命名字符向量,用于提供DBMS数据类型 某些(或所有)列,如果要创建表“
您需要确保varTypes向量的名称是列名称,值是推荐的here的数据类型。所以按照他们的例子你会有:
tmp <- sqlColumns(channel, correctTableName)
varTypes = as.character(tmp$TYPE_NAME)
names(varTypes) = as.character(tmp$COLUMN_NAME)
答案 1 :(得分:3)
varTypes = c(spark-submit --jars /usr/share/java/postgresql-jdbc.jar --class com.examples.WordCount .. .. ..
=“datetime”)适合我。