読者です 読者をやめる 読者になる 読者になる

一所懸命に手抜きする

監査の仕事をしています。ITを利用し、良い意味で「手抜き」することは効率化と精度アップに役立つと思うんです。部下への引き継ぎのためにまずは諸々頭から引っ張り出そうとブログを始めました。

[ Main ]  [ 別館 ]
当ブログで取り上げられている事案やデータベース、人物等はすべてフィクションです。

AS400からRにデータを取り込む方法。さらにユーザー関数化 GetAS400()

AS400 R SQL

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

広告を非表示にする