如何将.sql文件的内容读入R脚本以运行查询?

use*_*204 16 sql postgresql r

我已经尝试了readLinesread.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)

  • @kRazzyR 答案是“readr”包中的“read_file()”函数。您需要安装该软件包并使用“library(readr)”加载它才能使用它。 (4认同)

Roo*_*atu 6

Matt Jewett 的答案非常有用,但我想补充一点,在尝试使用该答案读取 sql server 生成的 .sql 文件时,有时会遇到以下警告:

\n\n
\n

警告消息:在 readLines(con, n = 1) 中:第 1 行似乎包含\n 嵌入的 nul

\n
\n\n

在这些情况下,返回的第一行readLines通常是“ \xc3\xbf\xc3\xbe ”(即 UTF-16 字节顺序标记),并且后续行无法正确读取。我通过在Microsoft SQL Server Management Studio中打开 sql 文件并选择来解决这个问题

\n\n

文件 -> 另存为...

\n\n

然后在保存按钮旁边的小向下箭头上选择

\n\n

使用编码保存...

\n\n

并选择

\n\n

Unicode(无签名的 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带有所需文本的字符串变量。

注意:使用/代替\\\