一所懸命に手抜きする

デスクワークばかりのスポーツ嫌いで50歳も過ぎ、いよいよ足腰に衰えを感じつつある昨今。

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 なかなかやるじゃないか