2010-11-22 4 views
9

RODBC를 사용하여 오라클 데이터 마트에서 R으로 데이터를 가져 오려고합니다. 나는 몇몇 문제를 해결할 수 있었지만 기본적인 질문이 하나있다.RODBC 쿼리 튜닝

형식 지정을 데이터베이스에 보관할 때 어떻게 유지할 수 있습니까?

다음 명령

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

내 데이터가 예상대로 검색되지만, 문자해야 할 때 일부 필드는 R에 한 번 숫자와 논리로 변환됩니다 사용. 내가 이것을 사용하면이 문제를 극복 할 수 있습니다.

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

그러나 나는 그들이 원할 때 날짜 형식으로 열을 "잃습니다".

+0

정확하게 당신이 "잃을"무엇을 의미합니까? 날짜 열을 정수 또는 Oracle 기본 날짜 (예 : "22-NOV-10")로 변환합니까? –

+0

첫 번째 쿼리를 사용하면 데이터 필드에 날짜 필드가 POSIXct로 반환됩니다. 두 번째 쿼리는 문자입니다. 분명히 세계의 종말은 아니지만 R. – Btibert3

+0

데이터 유형을 수정하는 것을 최소화하려고합니다. 관련 항목 : http://stackoverflow.com/questions/38443157/rodbc-chars-and-numerics-converted-aggressively-with- 그대로 - – Scarabee

답변

6

당신은 내가 겪었던 틈을 발견했습니다. "옳은"또는 "가장 좋은"것이 아니라 과거에 해 온 것만을 생각할 수는 없습니다.

일반적으로 첫 번째 예제에서 수행 한 작업을 수행하고 R에 들어가면 유형 변경 만 처리합니다. 후자의 방법을 사용하려면 R에 있던 날짜를 변환 할 수 있습니다. 항상 "22-NOV-10"형식으로 날짜를 반환하도록 설정해야합니다.이 형식은 구문 분석 용으로 귀찮습니다. 그래서 내 쿼리에서 오라클의 to_char() 함수를 사용하여 내 날짜를 R이 쉽게 인식 할 수있는 형식으로 포맷합니다.

따라서, 예를 들어, 내 SELECT 문이있을 수 있습니다 : 처리할지 여부

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

:

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

는 내가 MYDATA라는 데이터 프레임에와 것은이 작업을 수행 할 것을 당겨 고정 날짜 또는 다른 필드를 수정 다루는 정말 얼마나 많은 날짜 필드 및 첫 번째 방법이 엉망이 아닌 많은 날짜 필드에 따라 달라집니다. 그러나 제 경험상 어느 쪽이든 하나를 고치려고합니다.

방법 1을 사용할 때 고려해야 할 사항 : SQL에서 cast()를 사용하여 필드를 특정 유형으로 강제 설정하십시오. RODBC에서 내 데이터 유형을 성가 시게하는 데 어려움을 겪은 유일한 경우는 유형이 서버 측에서 모호한 경우입니다. 이것은 대개 CASE 문 또는 SQL 끝 부분의 결과입니다.

+0

감사합니다 JD. 나는 던지기를 시도 할 것이다. 그러나 적어도 그것은 무엇이든지간에 나는 약간의 데이터 준비를 할 필요가 있음을 확인한다. – Btibert3

1

as.is 인수는 부울 벡터 일 수 있습니다.

그래서 당신의 결과 집합은 하나의 문자 열 다음에 두 개의 날짜 열, 말, 구성, 당신은 할 수 있습니다 :

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

참고로, "있는 그대로"있어야하는 열의 수를 입력 할 수도 있습니다 (나머지는 기본값으로 두는 것이 좋습니다). 예를 들어'... as.is = c (2, 4)'는 열 2와 4를 "있는 그대로"해석합니다. – Kalin