AS400からRにデータを取り込む方法。さらにユーザー関数化 GetAS400()
AS400からRにデータを取り込む
RはRODBCというパッケージを使うことによりODBC経由でAS400からデータを取り込むことが出来ます。
library(RODBC) # dsn,uid,pwは適宜書き換えること con1 <- odbcConnect(dsn="AS400",uid="WATASHI") .D <- sqlQuery(con1,"Select * from REPORT.MYTASK limit 2,5") # NUM DATE1 ID OFFICE MOUNT CHECK #1 81 2016/01/15 281 富岡 -2 要 #2 82 2016/01/29 31 北京 -368 要 #3 83 2016/02/12 2154 那須高原 -3 要 #4 84 2016/02/05 2711 研究学園 NA <NA> #5 85 2016/02/06 256 山下 NA <NA> odbcCloseAll() return(.D)
このように手順を踏みます。
AS400からRへのデータ読み込みは関数化しましょう
Excelからの読み込みと同様、AS400からRにデータを読み込むことは頻繁にあります。その都度 library(RODBC)、odbcConnect()、sqlQuery()…とお決まりの手順を繰り返すのは馬鹿らしいので関数化してしまいます。
実質1行で表現できますから、自分としては、この関数によってソースコードの可読性アップは多大なものでした。
ユーザー関数 GetAS400()
[R]ユーザー関数 GetAS400()
GetAS400 <- function(oSQL) # oSQL : SQL文 # 常套句となっているものを省略してAS400から読み込めるようにした { # library(RODBC) # dsn,uid,pwは適宜書き換えること con1 <- odbcConnect(dsn="AS400",uid="WATASHI") .D <- sqlQuery(con1,oSQL) odbcCloseAll() return(.D) }
ライブラリRODBCがインスールしてあることが前提です。
また、本関数はAS400にアクセスできなかった人にアクセスできる環境を提供するものではありません。そもそもAS400へのアクセス権限(もちろんIDやパスワード)がなければ本記事は適用できません。ODBCのドライバが設定されていなければなりません。
ライブラリRODBCはR起動後一度メモリに読み込めば良いので関数の中で毎回library(RODBC)とする必要はありません。また、dsn,uidは適宜書き換えてください。uidやpwを省略しても、iSeriesエミュレーターなどでAS400にログオンが継続していれば接続できます。そのあたりは設定次第です。
ユーザー関数 GetAS400()の実行例
[R]ユーザー関数 GetAS400() 実行イメージ
GetAS400("Select * from Report.Mytask limit 2,5") # NUM DATE1 ID OFFICE MOUNT CHECK #1 81 2016/01/15 281 富岡 -2 要 #2 82 2016/01/29 31 北京 -368 要 #3 83 2016/02/12 2154 那須高原 -3 要 #4 84 2016/02/05 2711 研究学園 NA <NA> #5 85 2016/02/06 256 山下 NA <NA>
驚いたのは
My SQL 式に limit 2,5 としても
PostgreSQL 式に limit 5 offset 2 としても対応できるということです。
RODBC なかなかやるじゃないか