2011-12-15 13 views
13

मैं sqlSave() का उपयोग कर SQL सर्वर में किसी तालिका में डेटा फ्रेम अपलोड करने का प्रयास कर रहा हूं। इस डेटाफ्रेम में इसमें टाइमस्टैम्प है और मैं टाइमस्टैम्प कॉल को SQL टाइमर में डेटाटाइम कॉल पर मैप करना चाहता हूं।sqlSave: SQL सर्वर टाइमस्टैम्प पर डेटाफ्रेम टाइमस्टैम्प मैपिंग

मुझे दो समस्याएं मिल रही हैं।

1. यह डेटा फ्रेम के टाइमस्टैम्प को एक फ्लोट पर मैप करता है। 2. यह एक टेबल बनाता है, लेकिन कोई डेटा अपलोड नहीं किया गया है और मुझे कोई त्रुटि मिलती है। , इसके अलावा

mdf <- structure(list(run = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("run_00", 
"run_01", "run_02", "run_03", "run_04"), class = "factor"), slot = structure(c(1L, 
1L, 1L, 1L, 1L, 1L), .Label = c("slot 3", "slot 4", "slot 5", 
"slot 6"), class = "factor"), timestamp = structure(c(1320774563, 
1320774624, 1320774686, 1320774747, 1320774809, 1320774871), class = c("POSIXct", 
"POSIXt"), tzone = ""), channel = structure(c(1L, 1L, 1L, 1L, 
1L, 1L), .Label = c("och01", "och02", "och09", "och10"), class = "factor"), 
    variable = structure(c(2L, 2L, 2L, 2L, 2L, 2L), .Label = c("num_blocks", 
    "num_collection", "num_corr_0", "num_corr_1", "num_uncorr_srow", 
    "post_fec_err_rate", "pre_fec_err_rate"), class = "factor"), 
    value = c(1, 62, 124, 185, 247, 309)), .Names = c("run", 
"slot", "timestamp", "channel", "variable", "value"), row.names = c(NA, 
6L), class = "data.frame") 

> mdf 
    run slot   timestamp channel  variable value 
1 run_00 slot 3 2011-11-08 12:49:23 och01 num_collection  1 
2 run_00 slot 3 2011-11-08 12:50:24 och01 num_collection 62 
3 run_00 slot 3 2011-11-08 12:51:26 och01 num_collection 124 
4 run_00 slot 3 2011-11-08 12:52:27 och01 num_collection 185 
5 run_00 slot 3 2011-11-08 12:53:29 och01 num_collection 247 
6 run_00 slot 3 2011-11-08 12:54:31 och01 num_collection 309 

यहाँ जब मैं एक एसक्यूएल सर्वर डेटाबेस के लिए sqlSave कोशिश क्या होता है ...

> sqlSave(dbandle,mdf,tablename="mdf") 
Error in sqlSave(dbandle, mdf, tablename = "mdf") : 
    [RODBC] Failed exec in Update 
22018 0 [Microsoft][ODBC SQL Server Driver]Invalid character value for cast specification 

जब मैं डेटा प्रकार को देखो:

यहाँ एक उदाहरण डेटा फ्रेम, mdf है तालिका के, मुझे टाइमस्टैम्प के लिए "डेटाटाइम" नहीं मिलता है। यह मुझे समझ में नहीं आता है कि क्यों RODBC डेटाटाइम के अलावा किसी अन्य चीज़ पर पॉज़िक्सक्ट टाइमेटैम्प को मैप करेगा।

[rownames] [varchar](255) NULL, 
[run] [varchar](255) NULL, 
[slot] [varchar](255) NULL, 
[timestamp] [float] NULL, 
[channel] [varchar](255) NULL, 
[variable] [varchar](255) NULL, 
[value] [float] NULL 

मैं इसके आसपास कैसे हो सकता हूं?

उत्तर

16

दो विकल्प:

1) लेज़ी एक: त्रुटि उत्पन्न करते हैं, टेबल बनाया जाएगा, और स्तंभ (रों) बदलने के अपने डेटाबेस में मैन्युअल datetime करने के लिए। यह अगली बार काम करेगा।

2) सही: varTypes

ध्यान दें कि आपकी समस्या को अनावश्यक सामान निकाल कर नीचे छीन लिया जा सकता है का उपयोग करें। एक तरफ के रूप में, मैं शायद एसक्यूएल सर्वर में कॉलम नाम टाइमस्टैम्प का उपयोग नहीं करता, क्योंकि आंतरिक टाइमस्टैम्प डेटा प्रकार की वजह से मैंने भ्रम देखा है।

library(RODBC) 
mdf = data.frame(timestamp=as.POSIXct(Sys.time())) 

varTypes = c(timestamp="datetime") 
channel = odbcConnect("test") 
sqlSave(channel,mdf,rownames=FALSE,append=TRUE,varTypes=varTypes) 
close(channel) 
संबंधित मुद्दे