我可以在R脚本中优雅地包含格式化的SQL字符串吗?

MW *_*ost 8 sql r rodbc

我正在使用一个使用长SQL字符串的R脚本,我希望保持查询相对没有其他标记,以便允许在编辑器和应用程序之间进行复制和粘贴.我还希望能够跨行分割查询以提高可读性.

在RODBC文档中,该paste函数用于从单独的块中构建查询,但我更喜欢不那么笨拙且引号和逗号较少的东西.谢谢你的帮助.

Har*_*lan 13

如果你是一个老C程序员,就像我一样,你可能只喜欢使用sprintf().

借用伊恩的例子:

y<-"y1"
x<-"somethingorother"
query <- sprintf(
'SELECT DISTINCT x AS %s,
                 y AS %s,
 FROM tbl
 WHERE id=%%s
 AND num=%%d', x, y)
Run Code Online (Sandbox Code Playgroud)

收益率:

> cat(query,"\n")
SELECT DISTINCT x AS somethingorother,
                 y AS y1,
 FROM tbl
 WHERE id=%s
 AND num=%d 
Run Code Online (Sandbox Code Playgroud)


Ian*_*ows 8

您可以覆盖%+%运算符以获得更好的字符串连接语法:

'%+%' <- function(x,y) paste(x,y,sep="")

y<-"y1"
x<-"somethingorother"
query<-
'SELECT DISTINCT x AS ' %+% x %+%',\n'    %+%
'                y AS ' %+% y %+% '\n'    %+%
' FROM tbl
 WHERE id=%s
 AND num=%d'

cat(query,"\n")
Run Code Online (Sandbox Code Playgroud)

收益率:

> cat(query,"\n")
SELECT DISTINCT x AS somethingorother,
                y AS y1
 FROM tbl
 WHERE id=%s
 AND num=%d 
Run Code Online (Sandbox Code Playgroud)


jen*_*irf 7

"包括"长SQL查询的优雅方式是将其保存在单独的.sql文件中.最好在某处它可以突出显示语法,RStudio中的文本文件将完成这项工作.然后,您可以在主R脚本中将文件读入字符串,并使用众多"命名" sprintf类型解决方案之一(如infuser)使用变量填充变量.

.SQL

select *
from mytable
where id = {{a}} 
and somevar = {{b}}
Run Code Online (Sandbox Code Playgroud)

.R

library(readr)
library(infuser)

query <- read_file("query.sql") %>%
         infuse(a = 1, b = 2) 
Run Code Online (Sandbox Code Playgroud)