2010-11-22 7 views
9

RODBCを使用してOracleデータマートからRにデータをプルしようとしています。私はいくつかの問題を解決することができましたが、基本的な質問が1つあります。RODBCクエリのチューニング

どのように書式設定をデータベースに格納しても保持できますか?予想通り

次のコマンドを使用して

uapp <- sqlQuery(ch, SQL, stringsAsFactors=F) 

私のデータが取得され、それらは文字である必要があるときに一部のフィールドは、Rに一度数値および論理的に変換されます。

uapp <- sqlQuery(ch, SQL, stringsAsFactors=F, as.is=T) 

をしかし、私は彼らがなりたいときの日付としてフォーマットされている列を「失う」:私が使用している場合、私はこの問題を回避することができます。

+0

正確にあなたが「失う」とはどういう意味ですか?日付の列を整数またはOracleのデフォルトの日付(つまり「22-NOV-10」)に変換しますか? –

+0

最初のクエリを使用すると、日付フィールドはデータフレームのPOSIXctとして返されます。 2番目のクエリは文字です。明らかに世界の終わりではありませんが、私は一度Rの内部でデータ型の修正を最小限に抑えようとしています。 – Btibert3

+0

関連:http://stackoverflow.com/questions/38443157/rodbc-chars-and-numerics-converted-aggressively-with-そのままで – Scarabee

答えて

6

あなたは私が苦労しているギャップに巻き込まれています。私は、「正しい」または「最良の」ものだけではなく、過去に何をしたのかだけを考え出すことはできません。

私は通常、最初の例で行ったことを行い、Rに入ると型の変更を処理します。後者の方法を実行する場合は、Rになった時点で日付を変換できます。常に22-NOV-10形式の日付を返すように設定されています。この形式は解析するのに厄介です。だから、私はRを簡単に認識できるように私の日付をフォーマットするために私のクエリでOracleのto_char()関数を使用します。

ので、例えば、私は私のSELECT文でこれを持っているかもしれません:

to_char(myDate, 'yyyy-mm-dd') as myDate 

を、私は、データフレームにMYDATAと呼ばれることを引き、次の操作を行います。

myData$properDate <- strptime(myData$myDate, "%Y-%m-%d") 

に対処するかどうか固定日付または他のフィールドの修正との取引は、あなたが持っている日付フィールドの数と、最初のメソッドがいくつかの非日付フィールドを混乱させるかによって大きく異なります。しかし、私の経験ではどちらか一方を修正することになります。

方法1を使用するときに考慮すべき点:フィールドを特定の種類に強制するには、SQLでcast()を使用してみてください。 RODBCが私のデータ型を虐待するのに苦労したのは、型がサーバー側であいまいなときだけです。これは通常、CASE文またはSQL終了時の結果です。

+0

ありがとうJD。私はショットをキャストしますが、少なくとも何があっても何らかのデータ準備をする必要があることを確認します。 – Btibert3

1

as.is引数はブール値ベクトルにすることができます。

は、だからあなたの結果セットが一つの文字列に続いて2つの日付の列、たとえば、で構成されている場合は、あなたが行うことができます:

uapp <- sqlQuery(ch, SQL, stringsAsFactors = F, as.is = c(F, F, T)) 
+1

FYI、あなたはまた、 "そのまま"(残りの部分はデフォルトのままにしておく)列の番号を入れてもよいと思います。たとえば、 '... as.is = c(2,4)'は列2と列4を "そのまま"解釈します。 – Kalin

関連する問題