从 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 文件的主要内容,如果未能解决你的问题,请参考以下文章