2017-11-28 14 views
2

나는 1k 이상 datetime을 포함하는 datetime리스트를 가지고있다. (어떤 이유에서 그것을 date 컬럼으로 부른다). 그때, 어떤 테이블에서 데이터를 선택 열을 기준으로 t 즉 만료 pivotize의 pivotized 테이블에 컬럼으로 해당 date 날짜를 추가하고 모든 위해 함께 pivotization 스티치 할 필요가이 날짜의 각각에 대해 배치 피벗을 최적화하는 방법은 무엇입니까?

adates:2017.10.20T00:02:35.650 2017.10.20T01:57:13.454 ... 

날짜. 나는 날짜에 해당하는 pivotization 식별 할 수 있어야합니다 그리고 내가 하나 하나 그것을 할 이유 다음과 같이

fPivot:{[adate;accypair] 
    t1:select from volatilitysurface_smile where date=adate,ccypair=accypair; 
    mycols:`atm`s10c`s10p`s25c`s25p; 
    t2:`t xkey 0!exec mycols#(stype!mid) by t:t from t1; 
    t3:`t xkey select distinct t,tenor,xi,volofvol,delta_type,spread from t1; 
    result:ej[`t;t2;t3]; 
    :result} 

그때마다 날짜 adates이 함수를 호출 :

raze {[accypair;adate] `date xcols update date:adate from fPivot[adate;accypair] }[`EURCHF] @/: adates; 

이것은 대략 90s를 가지고 간다. 예를 들어 더 좋은 방법이 있는지 궁금합니다. 날짜별로 하나의 피벗 팅을 실행 한 다음 모두 함께 스티칭하는 것보다 큰 피벗 팅을 수행하십시오. 내가보기에 큰 문제는 피벗의 일부로 date 속성을 포함 할 명백한 방법이없고 date을 잃을 수 없다는 것입니다. 그렇지 않으면 결과를 조정할 수 없습니다.

+0

'adates'에서 제공 한 데이터는 datetime이 아닌 timestamp 유형입니다. kdb의 타임 스탬프는'2017.11.28D12 : 55 : 47.354335000'와 같습니다. datetime 유형의'T' 분리 기호와 비교하여 날짜와 시간 사이의'D' 분리 기호에 주목하십시오. –

+0

죄송합니다. 내 잘못을 업데이트하는 중입니다. –

답변

2

OK는 I 즉 by t:t from ...by date:date,t:t from ...에 피봇 필요한 비트에 의하여 그룹을 수행 할 때 최신 (날짜) 테이블의 필드를 유지하는 pivotization 일괄 버전을 생성하여이 문제를 해결했다. 90 초에서 150 밀리 초로 내려갔습니다.

fBatchPivot:{[adates;accypair] 
    t1:select from volatilitysurface_smile where date in adates,ccypair=accypair; 
    mycols:`atm`s10c`s10p`s25c`s25p; 
    t2:`date`t xkey 0!exec mycols#(stype!mid) by date:date,t:t from t1; 
    t3:`date`t xkey select distinct date,t,tenor,xi,volofvol,delta_type,spread from t1; 
    result:0!(`date`t xasc t2 ij t3); 
    :result} 
+0

좋은데,이 질문을 마무리 짓는 답으로 받아 들일 수 있습니다. –

1

pivoting 위키 페이지에 간 적이 없다면 좋은 시작일 수 있습니다.

어떤 사용자 :

이 약을 통해, 약 25 만 시세를 실시간 시세 데이터의 전체 일을 선회 할 수있는 다소 효율이되는 몇 가지 주장을 만드는 general pivoting function에 대한 섹션이 있습니다 4000 syms 및 sym35 당 평균 5 레벨, 4 분이 넘지 않음.

은 일반적인 의견에 관해서는, 나는 당신이 키 열을 지정할 수 ij의보다 일반적인 버전으로 ej이 불필요하다고 말할 것입니다. t2t3 모두 동일한 키 입력을 가지고 내가 대신 사용하는 것입니다 : 당신에게 아주 약간의 성능 향상을 제공 할 수 있습니다

t2 ij t3 

합니다.

+0

안녕하세요. Thomas, 답변 해 주셔서 감사합니다. 예. 저는 위키를 사용하여 피벗을 구축했습니다. 나는 그 함수를 사용하여 한 번 시도했지만 f와 g가 무엇인지 알아내는 것은 매우 복잡합니다. 실제로 실제로 보이는 것처럼 보입니다. OP를위한 범용 피벗을 호출하는 방법을 보여줄 수 있다면 당신의 대답은 완전 할 것입니다. –

+0

예제'volatilitysurface_smile' 테이블이나 테이블의 스키마 만 제공하면 시도해 볼 수 있습니다. 질문을 편집하면 누구나 함께 답을 얻을 수 있습니다. –