मैं भी कई महीनों से इस समस्या से जूझ रहा हूं। हालांकि, मुझे एक समाधान मिला है जो आपकी भी मदद कर सकता है।
संक्षेप में, समस्या तब होती है जब पूर्णांक/संख्यात्मक स्तंभों के बाद कुछ पाठ स्तंभ प्रकट नहीं होते हैं। जब क्वेरी में कॉलम ठीक से संरेखित नहीं होते हैं, तो invalid index
. की त्रुटि होती है फेंक दिया गया है और आपका कनेक्शन फ्रीज हो सकता है। समस्या तो यह है कि, मुझे कैसे पता चलेगा कि मेरी क्वेरी के अंत में क्या रखा जाए?
इसे निर्धारित करने के लिए, आमतौर पर class()
. का उपयोग करके एक कॉलम की जांच की जा सकती है या typeof()
. डेटाबेस से ऐसी जानकारी की जांच करने के लिए, आप एक क्वेरी का उपयोग कर सकते हैं जैसे:
dbColumnInfo(dbSendQuery(con, "SELECT * from schema.table")) # You may not require the schema part...
यह ब्याज के डेटा-सेट में प्रत्येक कॉलम के लिए एक प्रकार फ़ील्ड के साथ एक तालिका लौटाएगा। फिर आप select()
. को सॉर्ट करने के लिए इस तालिका का उपयोग अनुक्रमणिका के रूप में कर सकते हैं बयान। मेरी विशेष कठिनाई यह है कि type
तालिका में फ़ील्ड सभी संख्याएँ थीं! हालांकि, मैंने देखा कि चयन कथन के अंत में रखे जाने पर ऋणात्मक संख्या वाले प्रत्येक कॉलम ने मेरी क्वेरी तय की और मैं पूरी तालिका को ठीक से खींच सकता था। उदाहरण के लिए, मेरा पूरा समाधान :
# Create my index of column types (ref to the current order)
index <- dbColumnInfo(dbSendQuery(con, "SELECT * from schema.table"))
index$type <- as.integer(index$type) # B/c they are + and - numbers!
# Create the ref to the table
mySQLTbl <- tbl(con, in_schema("schema", "tablename"))
# Use the select statement to put all the + numbered columns first!
mySQLTbl %>%
select(c(which(index$type>=0),
which(index$type<0)))
ऐसा क्यों होता है, इसके कारण के लिए, मुझे यकीन नहीं है और मेरे पास मेरे उपयोग-मामले में अधिक गहराई तक जाने के लिए डेटा एक्सेस विशेषाधिकार नहीं हैं