Rを使っていると、DBに接続してSQLを投げる作業がよく発生します。
すると、大抵は、RPostgreSQL
などのDBを扱うライブラリを用いてDBに接続し、
SQLの文字列を用意し、ライブラリの関数の引数に指定するというコードを書くことになります。
ただ、SQLの文字列を
sql <- """ SELECT user_id, SUM(pv) FROM access_log """
みたいにRのコード内に置くと、どうしても不格好になっていまいます。
そこで、SQLを別のテキストファイルとして用意し、そのファイルから読み込む関数を書きました。
# パイプ演算子%>%を使えるライブラリをインポート library(magrittr) scan_query <- function(query_path) { return ( scan(query_path, what='', quote='', sep='\n', comment.char = '', encoding='UTF-8') %>% gsub(pattern='--.*$', replacement='') %>% # 正規表現でコメントアウトを消す paste0(collapse=' ') ) } # ファイルパスからSQLを読み込めるようになる sql <- scan_query('./example.sql')
Rのテキストファイルの読み込みはちょっと特殊で、scan関数で読み込みます。
改行文字に\n
を指定することで、テキストの文字列のベクトルに変換されます。
その後にSQLのコメントアウトを消して結合する、というコードです。
もしかすると、既に文字列をいい感じに読み込む関数(かライブラリ)も用意されているのかもしれません。