복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    3.당신은 readr 패키지에서 read_file () 함수를 사용할 수 있습니다.

    당신은 readr 패키지에서 read_file () 함수를 사용할 수 있습니다.

    fileName = read_file("C:/Users/me/Desktop/my_script.sql")
    

    당신은 원하는 텍스트 문자열 변수 파일 이름을 얻을 것이다.

    참고 : 사용 / 대신 \\\

  4. ==============================

    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 내 파일을 제거합니다 변경 그럼에도 불구하고 제대로 참조 대답을 사용하여 읽을 수있는 쿼리를 발생 .

  5. 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