IDのないデータフレームをOREでロードする
Rで使うデータフレームもベクトルの組のため、順列を明確に持ったものです。ただデータベースの表は集合のため、順列に通常意味をなしません。
Oracle R Enterpriseでは、データベースのテーブルをdata.frameライクのore.frameとして扱います。その際に、ore.frameで出力される値が不確定の場合には、デフォルトではエラーが出ます。また、このエラーが出る状態では、predict関数などをore.frameの状態では使えないなど、インデータベースのよさが消えてしまいます。
エラーを出さないようにするには、ore.frameのデータが前列に対してソートされていること、主キーが定義されていること、一意のrow.namesを持つことの条件のいずれかを満たす必要性があります。
主キーがある場合には特に問題になりませんが、主キーとなるようなデータがロード元のCSVファイルなどにない場合に、その後主キーを決めずにore.frame順序問題を回避するtipsを下記に記します。
2008.csvというcsvファイルをRで読込みore.createを使用してAIR2008というテーブルを作成します。
df <- read.table("2008.csv",header=T,sep=",")
ore.create(cbind(ID = 1:nrow(df),df),table ="AIR2008")
ポイントとしては、ore.createする際に、cbind(ID=1:nrow(df),df)とすることによって、dfに1から順に始める連番を付けることができ、それをIDとしてAIR2008テーブル作成の段階で元のCSVファイルに対して追加しています。このままでは、まだエラーが出続けるので、OREと同期後、row.namesにID列を登録します。一意の列があるデータフレームのロードの場合には、その列名をrow.namesに登録しても大丈夫です。
ore.sync()
ore.attach()
row.names(AIR2008) <- AIR2008$ID
head(AIR2008)
以上がID列がないCSVファイルをORE経由でデータベースにロードする方法です。
ただし、あくまでのOREオブジェクトとして、row.namesが保存されているため、ore.saveで保存しないとセッションが切れるたびにrow.namesはnullになってしまうことに注意が必要です。