2016-09-20 3 views
0

쿼리를 설정할 수있는 도구로 KDB를 사용합니다. 이 도구를 사용하면 쿼리의 구조가 아닌 사용자 상호 작용을 통해 매개 변수 (필터 값) 만 변경할 수 있습니다. 사용자 작업시 쿼리를 실행해야합니다. 기본적으로 모든 행을 선택하고 원하는 항목을 선택한 후에는 해당 항목을 기준으로 쿼리를 필터링해야합니다. 예를 들어와일드 카드로 선택 Q에서 KDB

: 기본적 : 심볼 = 'AAPL가

그러나 기본 예'케이 인용 선택 : 심볼 = 사용자 후 *

는 심볼을 선택 인용 선택 SQL과 달리 KDB에는 * 와일드 카드가 없기 때문에 작동하지 않습니다. 어떻게 기본적으로 모든 행을 가져올 수 있습니까?

답변

3

여기서 달성하고자하는 목표 또는 정확한 제약 조건을 정확히 알지 못합니다.

등호 (=)가 고정되었다고 말하면 하나의 기호 만 선택하도록 제한됩니다. 아직 모든 행을 반환하겠습니까? 기술적으로이 그렇게

select from table where symbol=symbol 

같은 SELECT 문에서 수행 할 수 있지만, 당신의 "도구"형식 기호의 입력을 기대하는 경우이 작동하지 않을 수 있습니다.

와일드 카드를 사용하려면 equals 대신 "like"가 필요하지만 제어 할 수없는 것처럼 들립니다.

이유로이 도구는 하나의 기호 필터 만 허용하도록 설계 되었습니까? 아마도 모든 행을 반환하는 것은 너무 많은 데이터 일 것이고 아마도 너무 느릴 것입니다. 아마도 너무 많은 메모리가 필요할 것입니다. 바로 가기를 해킹하려고하는 것처럼 느껴짐

+0

답장을 보내 주셔서 감사합니다. 나는 equals 대신에 "like"를 제어 할 수있다. 그러면 와일드 카드는 무엇입니까? – MarinD

+0

select from t 여기서 "? *"와 같은 기호 – terrylynch

+0

실제로는 null 기호가 반환되지 않습니다. select from t where enlist "*"와 같은 기호가 있습니다. – terrylynch

1

문제의 열을 문자열로 변환하여 다음과 같이 사용할 수 있습니다.

귀하의 요구 사항을 달성하는 방법은 모든 기호 (사용자가 필터를 지정하지 않거나 사용자가 정의한 하위 집합을 선택하지 않은 경우)를 선택하는 것입니다.

q)show myTable:update stamps:dates+'times from ([]syms:`AAPL`GOOG`PRDC`LALA`LOLO;times:5?.z.T;dates:5?.z.D) 
syms times  dates  stamps 
---------------------------------------------------------- 
AAPL 00:48:15.333 2003.04.10 2003.04.10D00:48:15.333000000 
GOOG 00:39:29.270 2015.06.14 2015.06.14D00:39:29.270000000 
PRDC 00:15:49.627 2016.05.21 2016.05.21D00:15:49.627000000 
LALA 01:30:32.099 2015.01.04 2015.01.04D01:30:32.099000000 
LOLO 00:31:19.910 2013.12.01 2013.12.01D00:31:19.910000000 
q)filter1:{[allSyms;usrSyms] symList:$[all null usrSyms;allSyms;usrSyms]; select from myTable where syms in symList}[exec distinct syms from myTable;] 
/filter1 is a projection so you don't have to query the table for all syms each time 
q)filter1`GOOG`APPL 
syms times  dates  stamps 
---------------------------------------------------------- 
GOOG 00:39:29.270 2015.06.14 2015.06.14D00:39:29.270000000 
q)filter1`GOOG`AAPL 
syms times  dates  stamps 
---------------------------------------------------------- 
AAPL 00:48:15.333 2003.04.10 2003.04.10D00:48:15.333000000 
GOOG 00:39:29.270 2015.06.14 2015.06.14D00:39:29.270000000 
q)filter1` 
syms times  dates  stamps 
---------------------------------------------------------- 
AAPL 00:48:15.333 2003.04.10 2003.04.10D00:48:15.333000000 
GOOG 00:39:29.270 2015.06.14 2015.06.14D00:39:29.270000000 
PRDC 00:15:49.627 2016.05.21 2016.05.21D00:15:49.627000000 
LALA 01:30:32.099 2015.01.04 2015.01.04D01:30:32.099000000 
LOLO 00:31:19.910 2013.12.01 2013.12.01D00:31:19.910000000 
q) 

다음과 같이 구현하는 것이 좋습니다.

q)filter2:{[usrSyms] ?[myTable;$[all null usrSyms;();enlist(in;`syms;enlist usrSyms)];0b;()]} 
q)filter2` 
syms times  dates  stamps 
---------------------------------------------------------- 
AAPL 00:48:15.333 2003.04.10 2003.04.10D00:48:15.333000000 
GOOG 00:39:29.270 2015.06.14 2015.06.14D00:39:29.270000000 
PRDC 00:15:49.627 2016.05.21 2016.05.21D00:15:49.627000000 
LALA 01:30:32.099 2015.01.04 2015.01.04D01:30:32.099000000 
LOLO 00:31:19.910 2013.12.01 2013.12.01D00:31:19.910000000 
q)filter2`GOOG 
syms times  dates  stamps 
---------------------------------------------------------- 
GOOG 00:39:29.270 2015.06.14 2015.06.14D00:39:29.270000000 
q)filter2`GOOG`AAPL 
syms times  dates  stamps 
---------------------------------------------------------- 
AAPL 00:48:15.333 2003.04.10 2003.04.10D00:48:15.333000000 
GOOG 00:39:29.270 2015.06.14 2015.06.14D00:39:29.270000000 
q)