LoginSignup
1
1

More than 5 years have passed since last update.

Oracle R Enterprise経由で主キーになる列がないcsvファイルをデータベースにロードする方法

Last updated at Posted at 2016-07-04

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というテーブルを作成します。

OracleREnterprise1.5
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に登録しても大丈夫です。

OracleREnterprise1.5
ore.sync()
ore.attach()
row.names(AIR2008) <- AIR2008$ID
head(AIR2008)

以上がID列がないCSVファイルをORE経由でデータベースにロードする方法です。
ただし、あくまでのOREオブジェクトとして、row.namesが保存されているため、ore.saveで保存しないとセッションが切れるたびにrow.namesはnullになってしまうことに注意が必要です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1