2013-05-28 2 views
2

시계열, 파티션 된 kdb 데이터베이스의 모든 행을 반복하고 각 단계에서 계산을 수행하려고합니다. SQL에서는 커서로이 작업을 수행 할 수 있습니다. kdb에 비슷한 것이 있습니까?kdb에서 커서를 만드는 방법은 무엇입니까?

일부 배경 : 데이터베이스는 수백만 개의 시계열 레코드로 구성되며 행을 진행하면서 여러 객체에 대한 상태를 유지해야합니다. 각 단계에서 실행해야하는 'if'문이 몇 가지 있습니다. 나는 내 계산을 쿼리에 통합하려고 생각했지만 수행해야하는 테스트의 수가 많기 때문에 커서 나 행 콜백과 같은 것이 더 적절하다고 생각합니다. 데이터베이스를 "재생"하면서 사용자 지정 코드를 실행하는 가장 효율적인 솔루션은 무엇입니까?

답변

1

q의 표는 사전 목록과 매우 유사하게 동작합니다. 따라서 t가 테이블 인 경우 t [0]은 열 이름을 첫 번째 행 값에 매핑하는 사전이고 t [1]은 두 번째 행이되는 식입니다. 실제로 커서는 단지 색인 일 뿐이며 커서를 진행하면 색인이 증가합니다. 목록에 작업을 적용 할

한편
q)t:([]c1:1 2 3;c2:`a`b`c); 
q)show t[0]; 
c1| 1 
c2| `a 
q)show t[1]; 
c1| 2 
c2| `b 

, 아마 더 관용적 인 방법은 요소 많다는 연산자 : 파티션 테이블의 경우

q)f:{show x}; 
q)f each t; 
c1| 1 
c2| `a 
c1| 2 
c2| `b 
c1| 3 
c2| `c 
+0

, 나는 만들어야합니다 인덱싱 전의 핸들러 :'t : myPartTable에서 select data = 2013.05.23'. 나는 데이터가 t로 할당 될 때 메모리에로드되지 않는다고 생각한다. –

+1

예. 데이터를 메모리에로드하려면 where i 절 -1을 추가하십시오. http://code.kx.com에있는 문서에서 - 스플레이 된 테이블은 열을 따라 세로로 분할되고 이후에 메모리에 매핑됩니다. 매핑 된 테이블에 대해 쿼리가 실행되면 필요에 따라 열 데이터가로드되고 O/S에 의해 캐시됩니다. – skeevey

관련 문제