readLines
およびread.csv
関数を試しましたが、動作しません。
my_script.sql
ファイルの内容は次のとおりです。
SELECT EmployeeID, FirstName, LastName, HireDate, City FROM Employees
WHERE HireDate >= '1-july-1993'
そして、それは私のデスクトップに保存されます。
次に、Rスクリプトからこのクエリを実行します。ここに私が持っているものがあります:
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)
そして、この場合、何も返ってこません。何を試せますか?
私は自分でsqlファイルの読み取りに問題があり、SQLに1行のコメントがあると、構文が壊れることが多いことがわかりました。 Rではsqlステートメントを1行の文字列として保存するため、sqlに二重ダッシュがある場合、本質的に二重ダッシュの後のコードはコメントアウトされます。
これは、Rで使用される.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)
}
複数行のクエリの場合、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'))
readr
パッケージのread_file()
関数を使用できます。
fileName = read_file("C:/Users/me/Desktop/my_script.sql")
目的のテキストを含む文字列変数fileName
を取得します。
注:/
の代わりに\\\
を使用します
Matt Jewettによる回答 は非常に便利ですが、その回答を使用してsqlサーバーによって生成された.sqlファイルを読み取ろうとすると、次の警告が表示されることがあります。
警告メッセージ:readLines(con、n = 1):行1には埋め込みNULが含まれているようです
readLines
によって返される最初の行は、多くの場合、「ÿþ」(つまり、UTF-16バイト順マーク)および後続の行です。正しく読まれません。 Microsoft SQL Server Management Studioでsqlファイルを開いて選択することでこれを解決しました
ファイル->名前を付けて保存...
次に、保存ボタンを選択する横にある小さな下矢印で
エンコーディングで保存...
そして選択
Unicode(UTF-8署名なし)-コードページ65001
[エンコード]ドロップダウンメニューから。
Microsoft SQL Server Management Studioがなく、Windowsマシンを使用している場合は、デフォルトのテキストエディタでファイルを開いてから選択してください
ファイル->名前を付けて保存...
エンコーディング:UTF-8
.txtファイル拡張子で保存します。
Microsoft SQL Server Management Studio内でファイルを変更すると、BOM(バイトオーダーマーク)が完全に削除され、一方、テキストエディタ内でファイルを変更すると、BOMはUTF-8 BOMに変換されますが、それにもかかわらず、参照された回答を使用してクエリが適切に読み取られます。