从 R 运行 .sql 文件

Posted

技术标签:

【中文标题】从 R 运行 .sql 文件【英文标题】:Running a .sql file from R 【发布时间】:2018-12-05 17:31:33 【问题描述】:

我有几个 .sql 文件,它们在 SQL 数据库中聚合了许多表/视图。我希望能够将 R 定向到特定的 sql 文件并执行它并在数据框中返回结果。

谷歌搜索似乎只能获取数据库中的实际表/视图,或者我必须重写 sql 查询并通过包 RODBC 运行它。

在 python 中,这可以通过 pd.read_sql_query 完成

【问题讨论】:

您必须先通过RODBC 或其他包连接到您的数据库,然后才能对数据库执行 SQL 命令。如果数据存在于 R 中,您可以使用库 sqldf 对内存中的数据运行 SQL 查询。 没有什么能阻止您将 .sql 文件作为单个字符串读取到 R 中,然后通过您的 RODBC 连接将其发送到数据库,就像您自己键入的任何其他查询一样。有一个名为 squr 的包(可能只在 github 上)可以做这种事情(而且可能比你想要的要多得多)。 一点也不难。我有自己的自制系统(从 squr 派生),其中有包含数十个 sql 文件的整个软件包,其中许多都有 cmets。这真的没什么大不了的。 sql <- paste(readLines("myfile.sql"), collapse = "\n") 。现在sql 是一个保存 SQL 字符串的 R 变量。 How to read the contents of an .sql file into an R script to run a query?的可能重复 【参考方案1】:

您可以将 readr-package 与 DBI 和 odbc 结合使用

install.packages("readr")
library("DBI")
library("odbc") 
library("readr") 
df <- dbGetQuery(con, statement = read_file('Query.sql'))

【讨论】:

另外,请记住,在为 R 格式化 SQL 查询时,您可能希望使用 SET NOCOUNT ON 来防止发送 DONE_IN_PROC 消息。 我无法编辑上面的回复,所以我将在下面添加一些见解。我发现在 SQL 中完美运行的查询不适用于使用“SET NOCOUNT ON”的 R 可能会为你做到这一点。您可能还想尝试指定特定的数据库而不是。

以上是关于从 R 运行 .sql 文件的主要内容,如果未能解决你的问题,请参考以下文章

从 Python 运行 SQL 文件

使用 R 中定义的变量从 R 运行 SQL 脚本

从 R 连接到 SQL 数据库时截断数据库名称和列

Jmeter 从文件运行 SQL 脚本

如何从查询选项卡运行 .sql 文件?

从 DOS/Windows 批处理文件运行 Sybase SQL 命令