2017-06-30 6 views
5

मैंने readLines और read.csv फ़ंक्शंस का प्रयास किया है लेकिन फिर काम नहीं करते हैं।कोई क्वेरी चलाने के लिए किसी .sql फ़ाइल की सामग्री को आर स्क्रिप्ट में कैसे पढ़ा जाए?

यहाँ my_script.sql फ़ाइल की सामग्री है:

SELECT EmployeeID, FirstName, LastName, HireDate, City FROM Employees 
WHERE HireDate >= '1-july-1993' 

और यह मेरे डेस्कटॉप पर सहेजा गया है।

अब मैं इस क्वेरी को मेरी आर स्क्रिप्ट से चलाने के लिए चाहता हूं। यहां मेरे पास है:

conn = connectDb() 

fileName <- "C:\\Users\\me\\Desktop\\my_script.sql" 
query <- readChar(fileName, file.info(fileName)$size) 

query <- gsub("\r", " ", query) 
query <- gsub("\n", " ", query) 
query <- gsub("", " ", query) 

recordSet <- dbSendQuery(conn, query) 
rate <- fetch(recordSet, n = -1) 

print(rate) 
disconnectDb(conn) 

और मुझे इस मामले में कुछ भी वापस नहीं मिल रहा है। मैं क्या कोशिश कर सकता हूँ?

+0

साथ एक डेटा फ्रेम में परिणाम स्टोर कर सकते हैं तो आप मैन्युअल 'dbSendQuery (Conn करते हैं, तो" का चयन करें Emp ... ") ', क्या कोई पंक्तियां वहां लौट आई हैं? क्या आपको विश्वास है कि यह पढ़ने-से-फ़ाइल भाग में एक समस्या है, न कि डेटा-वर्तमान-वर्तमान समस्या नहीं है? – r2evans

+0

हां, अगर मैं ऐसा करता हूं तो डेटा वापस कर दिया जाता है। मुझे पूरा भरोसा है कि मुझे नहीं पता कि इसे '.sql' फ़ाइल से कैसे पढ़ा जाए। – user1367204

+0

मैंने इस प्रक्रिया का परीक्षण SQL सर्वर और पोस्टग्रेस दोनों पर बिना किसी समस्या के किया है (मेरे पास MySQL उपलब्ध नहीं है)। मैंने उसी सफलता के साथ 'पेस्ट (रीडलाइन (...), पतन = "") का भी उपयोग किया है। चूंकि '.sql' फ़ाइल एक अलग फ़ाइल एक्सटेंशन के साथ केवल एक टेक्स्ट फ़ाइल है, इसलिए ब्रह्मांड कुछ भी नहीं है। क्या 'क्वेरी 2' बनाम 'क्वेरी 2' के उपयोग के साथ कुछ करना है? आप यह नहीं दिखाते कि आप उस दूसरे चर के लिए कैसे पहुंचे। – r2evans

उत्तर

4

मुझे एसक्यूएल फाइलें पढ़ने में परेशानी हुई है, और पाया है कि एसक्यूएल में कोई भी लाइन टिप्पणियां होने पर अक्सर सिंटैक्स टूट जाता है। चूंकि आर में आप एसक्यूएल कथन को एकल लाइन स्ट्रिंग के रूप में संग्रहीत करते हैं, यदि एसक्यूएल में कोई डबल डैश होता है तो यह डबल डैश के बाद अनिवार्य रूप से किसी भी कोड पर टिप्पणी करेगा।

यह एक समारोह है कि मैं आम तौर पर जब भी मैं एक sql फ़ाइल में पढ़ रहा हूँ आर में इस्तेमाल किया जा करने के लिए उपयोग है

getSQL <- function(filepath) 
{ 
    con = file(filepath, "r") 
    sql.string <- "" 

    while (TRUE) 
    { 
    line <- readLines(con, n = 1) 
    if (length(line) == 0) { break } 

    line <- gsub("\\t", " ", line) 

    if(grepl("--",line) == TRUE) 
    { 
     line <- paste(sub("--","/*",line),"*/") 
    } 

    sql.string <- paste(sql.string, line) 
    } 

    close(con) 
    return(sql.string) 
} 
1

मैं कई लाइनों के साथ प्रश्नों के लिए मिल गया है, readr से read_file() समारोह पैकेज अच्छी तरह से काम करता है। एकल उद्धरण से बचने के लिए आपको केवल एक चीज ध्यान रखना है (डबल कोट्स ठीक हैं)। आप इस तरह से टिप्पणियां भी जोड़ सकते हैं।

उदाहरण क्वेरी, के रूप में query.sql

SELECT 
COUNT(1) as "my_count" 
-- comment goes here 
FROM -- tabs work too 
    my_table 

बचाया मैं तो

df <- dbGetQuery(con, statement = read_file('query.sql')) 
संबंधित मुद्दे