[SQL] 어떻게 쿼리를 실행하기 위해 R 스크립트 내로 .SQL 파일의 내용을 읽어?
SQL어떻게 쿼리를 실행하기 위해 R 스크립트 내로 .SQL 파일의 내용을 읽어?
나는 readlines 메쏘드와 read.csv 기능을 시도하지만 일을하지 않는했다.
여기에 my_script.sql 파일의 내용입니다 :
SELECT EmployeeID, FirstName, LastName, HireDate, City FROM Employees
WHERE HireDate >= '1-july-1993'
그것은 내 바탕 화면에 저장됩니다.
지금은 내 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)
그리고이 경우에 아무것도 등을 받고 있지 않다. 나는 무엇을 시도 할 수 있습니다?
해결법
-
==============================
1.나는 SQL 파일을 자신을 읽기에 문제가 했어 및 SQL에있는 한 줄의 코멘트가있는 경우 종종 구문이 상처 입는 것을 발견했다. R에 당신이 한 줄의 문자열로 SQL 문을 저장하기 때문에, SQL에있는 더블 대시가있는 경우는 기본적으로 이중 대시 후 코드를 주석 처리합니다.
나는 SQL 파일을 자신을 읽기에 문제가 했어 및 SQL에있는 한 줄의 코멘트가있는 경우 종종 구문이 상처 입는 것을 발견했다. R에 당신이 한 줄의 문자열로 SQL 문을 저장하기 때문에, SQL에있는 더블 대시가있는 경우는 기본적으로 이중 대시 후 코드를 주석 처리합니다.
이것은 내가 일반적으로 내가 R.에서 사용하는 .SQL 파일에 읽고 있습니다 때마다 사용하는 기능입니다
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) }
-
==============================
2.나는 readr 패키지에서 read_file () 함수는 잘 작동 여러 라인 쿼리를 발견했습니다. 당신이 염두해야 할 유일한 것은 (큰 따옴표는 괜찮) 작은 따옴표를 방지하는 것입니다. 당신은 이런 식으로 주석을 추가 할 수 있습니다.
나는 readr 패키지에서 read_file () 함수는 잘 작동 여러 라인 쿼리를 발견했습니다. 당신이 염두해야 할 유일한 것은 (큰 따옴표는 괜찮) 작은 따옴표를 방지하는 것입니다. 당신은 이런 식으로 주석을 추가 할 수 있습니다.
예 쿼리, query.sql로 저장
SELECT COUNT(1) as "my_count" -- comment goes here FROM -- tabs work too my_table
나는 다음 데이터 프레임에 결과를 저장할 수 있습니다
df <- dbGetQuery(con, statement = read_file('query.sql'))
-
==============================
3.당신은 readr 패키지에서 read_file () 함수를 사용할 수 있습니다.
당신은 readr 패키지에서 read_file () 함수를 사용할 수 있습니다.
fileName = read_file("C:/Users/me/Desktop/my_script.sql")
당신은 원하는 텍스트 문자열 변수 파일 이름을 얻을 것이다.
참고 : 사용 / 대신 \\\
-
==============================
4.매트 Jewett에 의한 대답은 매우 유용하지만, 나는 그 대답을 사용하여 SQL 서버에 의해 생성 된 .SQL 파일을 읽으려고 할 때 가끔 다음과 같은 경고가 발생하는 것을 추가하고 싶었 :
매트 Jewett에 의한 대답은 매우 유용하지만, 나는 그 대답을 사용하여 SQL 서버에 의해 생성 된 .SQL 파일을 읽으려고 할 때 가끔 다음과 같은 경고가 발생하는 것을 추가하고 싶었 :
readlines 메쏘드에 의해 반환되는 첫 번째 라인은 종종 올바르게 판독되지 않은이 경우 (즉, UTF-16 바이트 순서 마크) 및 후속 라인 "YTH"이다. 나는 Microsoft SQL Server 관리 Studio 및 선택에서 SQL 파일을 열어이 문제를 해결
파일 -> 다른 이름으로 저장 ...
다음 작은 아래 버튼 선택 저장 옆에있는 화살표
인코딩으로 저장 ...
및 선택
유니 코드 (UTF-8 서명 없음) - 코드 페이지 65001
인코딩 드롭 다운 메뉴에서.
당신은 마이크로 소프트 SQL Server Management Studio가없는 및 Windows 시스템을 사용하는 경우에는 기본 텍스트 편집기로 파일을 열고 다음 선택을 시도 할 수
파일 -> 다른 이름으로 저장 ...
인코딩 : UTF-8
.txt 파일 확장자로 저장합니다.
흥미롭게도 BOM (바이트 순서 표시)은 UTF-8 BOM에 텍스트 편집기 변환 내에서 BOM을 파일을 변경하는 반면, 모두 Microsoft SQL Server 관리 Studio 내 파일을 제거합니다 변경 그럼에도 불구하고 제대로 참조 대답을 사용하여 읽을 수있는 쿼리를 발생 .
from https://stackoverflow.com/questions/44853322/how-to-read-the-contents-of-an-sql-file-into-an-r-script-to-run-a-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 SQL Server에서 문자열을 자릅니다? (0) | 2020.07.23 |
---|---|
[SQL] 나는 정렬을 이해하지? (MySQL은, RDBMS 문자 세트) (0) | 2020.07.23 |
[SQL] 단지 SQL과 파일에 MySQL 데이터베이스에서 물방울 내보내기 (0) | 2020.07.23 |
[SQL] 오라클 : 어떻게 이상의 범위 "에 의해 그룹"에? (0) | 2020.07.23 |
[SQL] 다른 테이블에 외래 키를 포함하는 테이블에서 행을 삭제하는 방법 (0) | 2020.07.23 |