मैं वेब डेटा स्क्रैप कर रहा हूं और कुछ परिणाम 8K से अधिक टेक्स्ट हैं। मेरे पास एमएस एसक्यूएल सर्वर 2008 आर 2 में एक क्षेत्र है जो वर्चर (अधिकतम) है लेकिन आरओडीबीसी केवल 8 के बचाता है और शेष को छोटा करता है। मेरे पास एसएस आर 2 और ओडीबीसी 11 से एसक्यूएल मूल क्लाइंट 10 दोनों का उपयोग करके डीएसएन कनेक्शन स्थापित किए गए हैं।आरओडीबीसी डेटा फ्रेम से 8k वर्कर/टेक्स्ट से अधिक नहीं बचाता
वर्ग शीर्षक के लिए sqlType रिटर्न -1, वर्चर (अधिकतम)/टेक्स्ट इंगित करता है।
दोनों कनेक्शन 8K पर टेक्स्ट को छोटा कर देते हैं। क्या इसके लिए कोई फिक्स/वर्कअराउंड है या क्या मैं SQL सर्वर में 8K तक सीमित हूं? मैं MySQL पर स्विच कर सकता हूं यदि आर mySQL ड्राइवर बड़ी मात्रा में टेक्स्ट पास करेगा। मैं विन 7 x64 पर आर 3.0.1 और आरओडीबीसी 1.3-6 का उपयोग कर रहा हूं।
समस्या को दोहराने के लिए यहां कुछ नमूना कोड दिया गया है।
CREATE TABLE
[test](
[title] [varchar](max) NULL
) ON [PRIMARY]
library(RODBC)
ch <- odbcConnect("text", uid = "X", pwd = "X")
sqlTypeInfo(ch,"test")
testtext = data.frame("salasjflsjsf")
colnames(testtext) = "title"
## This works
sqlSave(ch,testtext,"test",append=TRUE, rownames=FALSE, colnames = FALSE, safer=FALSE, verbose = TRUE)
## text > 8K
testtext = data.frame(paste(rep("salasjflsjsf",5000),collapse=""))
colnames(testtext) = "title"
## use ODBC default type for title
sqlSave(ch,testtext,"test",append=TRUE, rownames=FALSE, colnames = FALSE, safer=FALSE, verbose = TRUE)
## this message from ODBC
## Query: INSERT INTO "test" ("title") VALUES (?)
## Binding: 'title' DataType 12, ColSize 8000
## Parameters:
## no: 1: title salasjfl
## [*text removed*]
## lsjsfsalasjflsjsfsalasjflsjsfsalasjflsjsfsalasjflsjsfsalasjflsjsfsalasjflsjsf/***/
## Warning message:
## In odbcUpdate(channel, query, mydata, coldata[m, ], test = test, :
## character data 'salasjflsjsfsalasjflsjsfsalasjflsjsfsalasjfl
## try with varType set to text
sqlSave(ch,testtext,"test",append=TRUE, varType = "text",rownames=FALSE, colnames = FALSE, safer=FALSE, verbose = TRUE)
## try with varType set to varchar(MAX)
sqlSave(ch,testtext,"test",append=TRUE, varType = "varchar(max)",rownames=FALSE, colnames = FALSE, safer=FALSE, verbose = TRUE)
close(ch)
मैंने कॉलम प्रकार को टेक्स्ट में बदल दिया और डीएसएन कनेक्शन को रीफ्रेश किया। पाठ प्रकार उठाया जा रहा है, लेकिन अब वहाँ एक त्रुटि संदेश है:
chtest <-odbcConnect("test2", uid = "X", pwd = "X")
> sqlColumns(chtest,"test")
TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME DATA_TYPE TYPE_NAME COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS NUM_PREC_RADIX NULLABLE REMARKS
1 RSS dbo test title -1 text 2147483647 2147483647 NA NA 1 <NA>
COLUMN_DEF SQL_DATA_TYPE SQL_DATETIME_SUB CHAR_OCTET_LENGTH ORDINAL_POSITION IS_NULLABLE SS_IS_SPARSE SS_IS_COLUMN_SET SS_IS_COMPUTED
1 <NA> -1 NA 2147483647 1 YES 0 0 0
SS_IS_IDENTITY SS_UDT_CATALOG_NAME SS_UDT_SCHEMA_NAME SS_UDT_ASSEMBLY_TYPE_NAME SS_XML_SCHEMACOLLECTION_CATALOG_NAME
1 0 <NA> <NA> <NA> <NA>
SS_XML_SCHEMACOLLECTION_SCHEMA_NAME SS_XML_SCHEMACOLLECTION_NAME SS_DATA_TYPE
1 <NA> <NA> 35
> sqlSave(chtest,testtext,"test",append=TRUE, varType = "text",rownames=FALSE, colnames = FALSE, safer=FALSE, verbose = TRUE)
Query: INSERT INTO "test" ("title") VALUES (?)
Binding: 'title' DataType -1, ColSize 2147483647
Error in odbcUpdate(channel, query, mydata, coldata[m, ], test = test, :
'Calloc' could not allocate memory (18446744071562067968 of 1 bytes)
In addition: Warning messages:
1: In odbcUpdate(channel, query, mydata, coldata[m, ], test = test, :
Reached total allocation of 6013Mb: see help(memory.size)
2: In odbcUpdate(channel, query, mydata, coldata[m, ], test = test, :
Reached total allocation of 6013Mb: see help(memory.size)
एर्ट, मैंने आपके सुझाव का परीक्षण किया लेकिन डेटा को सहेजने में त्रुटि हुई। नीचे दिए गए परिणाम देखें। – user2720047