use*_*204 16 sql postgresql r
我已经尝试了readLines
和read.csv
功能,但后来没有工作.
这是my_script.sql
文件的内容:
SELECT EmployeeID, FirstName, LastName, HireDate, City FROM Employees
WHERE HireDate >= '1-july-1993'
Run Code Online (Sandbox Code Playgroud)
它保存在我的桌面上.
现在我想从我的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)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我没有得到任何回报.我该怎么办?
Mat*_*ett 23
我自己读取sql文件时遇到了麻烦,并且发现如果sql中有任何单行注释,语法常常会被破坏.因为在R中你将sql语句存储为单行字符串,如果sql中有任何双短划线,它将基本上在双短划线后注释掉任何代码.
这是我通常在读取.sql文件时使用的函数,以便在R中使用.
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)
}
Run Code Online (Sandbox Code Playgroud)
小智 23
我找到了多行查询,read_file()
readr包中的函数运行良好.你唯一需要注意的是避免单引号(双引号很好).您甚至可以通过这种方式添加评论.
示例查询,另存为 query.sql
SELECT
COUNT(1) as "my_count"
-- comment goes here
FROM -- tabs work too
my_table
Run Code Online (Sandbox Code Playgroud)
然后我可以将结果存储在数据框中
df <- dbGetQuery(con, statement = read_file('query.sql'))
Run Code Online (Sandbox Code Playgroud)
Matt Jewett 的答案非常有用,但我想补充一点,在尝试使用该答案读取 sql server 生成的 .sql 文件时,有时会遇到以下警告:
\n\n\n\n\n警告消息:在 readLines(con, n = 1) 中:第 1 行似乎包含\n 嵌入的 nul
\n
在这些情况下,返回的第一行readLines
通常是“ \xc3\xbf\xc3\xbe ”(即 UTF-16 字节顺序标记),并且后续行无法正确读取。我通过在Microsoft SQL Server Management Studio中打开 sql 文件并选择来解决这个问题
文件 -> 另存为...
\n\n然后在保存按钮旁边的小向下箭头上选择
\n\n使用编码保存...
\n\n并选择
\n\nUnicode(无签名的 UTF-8)- 代码页 65001
\n\n从编码下拉菜单。
\n\n如果您没有Microsoft SQL Server Management Studio并且使用的是 Windows 计算机,您还可以尝试使用默认文本编辑器打开该文件,然后选择
\n\n文件 -> 另存为...
\n\n编码:UTF-8
\n\n以 .txt 文件扩展名保存。
\n\n有趣的是,在Microsoft SQL Server Management Studio中更改文件会完全删除 BOM(字节顺序标记),而在文本编辑器中更改文件会将 BOM 转换为 UTF-8 BOM,但仍然会导致使用引用的答案正确读取查询。
\n小智 5
您可以使用软件包中的read_file()
功能readr
。
fileName = read_file("C:/Users/me/Desktop/my_script.sql")
Run Code Online (Sandbox Code Playgroud)
您将获得fileName
带有所需文本的字符串变量。
注意:使用/
代替\\\
归档时间: |
|
查看次数: |
18655 次 |
最近记录: |