2017-12-14 18 views
3

나는 AquaQ의 TorQ를 사용하여 가격과 따옴표 데이터베이스를 채우려고합니다. 이를 위해 .loader.loadallfiles function을 사용합니다. 차이점은 prices이 일일 데이터이고 quotes이 더 많은 일중입니다. 환율. 다음과 같이TorQ : 날짜 범위가 다른 별도의 테이블에서 데이터 로더 파티션을 사용하는 방법은 무엇입니까?

나는 로딩을 수행

/- check the location of database directory 
hdbdir:hsym `$getenv[`KDBHDB] 
/hdbdir:@[value;`hdbdir;`:hdb] 
rawdatadir:hsym `$getenv[`KDBRAWDATA] 

target:hdbdir; 

rawdatadir:hsym `$("" sv (getenv[`KDBRAWDATA]; "prices")); 
.loader.loadallfiles[`headers`types`separator`tablename`dbdir`partitioncol`partitiontype`dataprocessfunc!(`date`sym`open`close`low`high`volume;"DSFFFFF";enlist ",";`prices;target;`date;`year;{[p;t] `date`sym`open`close`low`high`volume xcols update volume:"i"$volume from t}); rawdatadir]; 

rawdatadir:hsym `$("" sv (getenv[`KDBRAWDATA]; "quotes")); 
.loader.loadallfiles[`headers`types`separator`tablename`dbdir`partitioncol`partitiontype`dataprocessfunc!(`date`sym`bid`ask;"ZSFF";enlist ",";`quotes;target;`date;`year;{[p;t] `date`sym`bid`ask`mid xcols update mid:(bid+ask)%2.0 from t}); rawdatadir]; 

를이 잘 작동합니다. 그러나 데이터베이스를로드 할 때 두 테이블 중 하나를 선택하려고 할 때 오류가 발생합니다. 이유는 일부 파티션의 경우 prices이 없거나 quotes 데이터가 없기 때문입니다. 예 : 시도 :

quotes::`date`sym xkey select from quotes; 

오류가 발생하여 일년 중 파티션 예를 들어 오류로 실패합니다. hdb/2000/이 2000 년에만 prices하고, 사실 어떤 존재하지 않는 어떤 quotes

내가 거기에 두 가지 솔루션을하지만 나도 구현하는 방법을 알고 없다시피 :

  1. 가 비어 만들 .loader.loadallfiles에게 데이터가없는 파티션의 따옴표 및 가격 스키마.
  2. 데이터베이스를로드하는 것은, 정상적으로 특정 파티션에 대한 데이터가없는 경우를 처리하는 동안 즉 select from ... where ignore empty partitions

답변

1

`:hdb이 HDB

이 채우기의 파일 경로입니다 .Q.chk[`:hdb]

를 사용해보십시오 누락 된 테이블에서 쿼리를 미리 작성할 수 있습니다.

또는 당신 .Q.bv를 사용할 수있는 위키 상태 :

테이블은 (스키마에 대한 프로토 타입 이 때문에), 다음 빈 테이블을 만들 .Q.bv[]를 사용할 수있는 최신 파티션에있는 경우 을 실행 중에 디스크에 저장하지 않아도됩니다.

+0

완벽하게 작동했습니다. 정말 고맙습니다!! 나는 "cleaner"'.Q.bv [];'대안을 사용했다. –

+1

.Q.chk에 대한 자세한 내용은 http://code.kx.com/q/ref/dotq/#qchk-fill-hdb 및 .Q.bv : http://code.kx.com/ q/ref/dotq/# qbv-build-vp 기꺼이 도와 드리겠습니다! – CiaranAquaq

+0

환상적! 정말 고맙습니다 :) –