R 스크립트에 형식화 된 SQL 문자열을 우아하게 포함시킬 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1630724

  •  06-07-2019
  •  | 
  •  

문제

긴 SQL 문자열을 사용하는 R 스크립트에서 작업하고 있으며 편집자와 응용 프로그램 간의 복사 및 붙여 넣기를 위해 쿼리에 다른 마크 업이 비교적 자유롭게 유지하고 싶습니다. 또한 더 나은 가독성을 위해 쿼리를 라인에 분할 할 수있는 기능을 원합니다.

RODBC 문서에서 paste 함수는 별도의 청크로 쿼리를 빌드하는 데 사용되지만 덜 Kludgy와 더 적은 인용문과 쉼표를 선호합니다. 당신의 도움을 주셔서 감사합니다.

도움이 되었습니까?

해결책

%+ % 연산자를 재정의하여 더 나은 문자열 컨덕턴스 구문을 가질 수 있습니다.

'%+%' <- 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")

수확량 :

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

다른 팁

당신이 나와 같이 오래된 C 프로그래머라면, 당신은 sprintf ()를 사용하는 것을 즐길 수 있습니다.

Ian의 예를 빌린다 :

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

수확량 :

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

우아한 방법 "포함" 긴 SQL 쿼리는 별도의 .sql 파일. 바람직하게는 어딘가에 구문을 강조 할 수있는 곳에서 Rstudio의 텍스트 파일이 작업을 수행합니다. 그런 다음 메인 R 스크립트에서 파일을 문자열로 읽고 많은 "명명 된"중 하나를 사용하여 변수로 채울 수 있습니다. sprintf-유형의 솔루션 Infuser.

.SQL

select *
from mytable
where id = {{a}} 
and somevar = {{b}}

.아르 자형

library(readr)
library(infuser)

query <- read_file("query.sql") %>%
         infuse(a = 1, b = 2) 

평범한 문자열을 사용하는 것이고 변수 값을 포함하지 않는 것이 좋습니다. 대신 자리 소유자를 사용하십시오.

sql <- "SELECT foo FROM bar
    WHERE col1 = ?
    AND col2 = ?
    ORDER BY yomama"

Double-Quote가 R 코드에 멀티 라인 문자열을 포함시키는 가장 좋은 방법인지 확실하지 않지만 (Here-Docs와 같은 것이 있습니까?) Java와 달리 작동합니다.

보내고 싶지 않은 이유가 있습니까? "\n" 또는 "\t" 데이터베이스에? SQL에서는 괜찮아 야합니다.

나는 단순히 SQL 문자열을 쳤다 sql <- gsub("\n","",sql) 그리고 sql <- gsub("\t","",sql) 실행하기 전에. 문자열 자체는 필요한만큼 길지만 연결 마크 업이 없어집니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top