2017-09-21 3 views
0

나는 KDB + 및 Q 프로그래밍을 배우고 다음 문장에 대해 읽었습니다. "select는 열 목록에 벡터 연산을 수행합니다". 벡터 작업의 의미는 무엇입니까? 누군가 예를 들어 설명해 주시겠습니까? 또한 표준 SQL보다 속도가 빠릅니다.KDB/Q : 벡터 연산이란 무엇입니까?

답변

4

벡터 연산은 하나 이상의 벡터를 사용하고 다른 벡터를 생성하는 연산입니다. 열이 테이블에

q)a:1 2 3 
q)b:10 20 30 
q)a + b 
11 22 33 

a 경우와 b, 당신이 select 성명에서 그들에 벡터 연산을 수행 할 수 있습니다 Q : 예를 +를 들어 벡터 작업입니다.

q)select c:a + b from ([]a;b) 
c 
-- 
11 
22 
33 

SELECT 문은 동일한 a+b 벡터 덧셈을 수행하지만, 입력했다 및 출력을 반환 지금

q)([]a;b) 
a b 
---- 
1 10 
2 20 
3 30 

: 이전 예제를 계속의 컬럼으로 테이블에 ab 벡터를 만들어 보자 테이블 열로.

표준 SQL보다 빠름?

"표준"SQL 구현은 일반적으로 행별로 데이터를 저장합니다. 많은 열이있는 테이블에서 열의 첫 번째 요소와 두 번째 요소는 다른 열의 데이터로 메모리에서 분리 할 수 ​​있습니다. 최신 컴퓨터는 데이터가 연속적으로 저장 될 때 가장 효율적으로 작동합니다. kdb +에서 테이블 단위로 열을 저장하면됩니다.

+0

Alexander. – userknight

0

vector은 같은 유형의 원자 목록입니다. 몇 가지 예 :

2 3 4 5     /int 
"A fine, clear day"  /char 
`ibm`goog`aapl`ibm`msft /symbol 
2017.01 2017.02 2017.03m/month 

Kdb +는 매우 효율적으로 벡터를 저장하고 처리합니다. Q operators - 단지 +-*%이 아니라. mcount, ratios, prds - 벡터에 최적화되어 있습니다.

u (반복되는 항목 없음) 및 s (항목은 오름차순)과 같은 벡터가 attributes 인 경우 이러한 연산자가 더욱 효율적일 수 있습니다.

테이블 열이 벡터 인 경우 동일한 효율성을 사용할 수 있습니다. 이러한 효율성은 테이블을 정렬되지 않은 행 집합으로 보는 표준 SQL에서는 사용할 수 없습니다.

kdb + can splay 대형 테이블에서 선택할 때 파일 I/O를 줄이는 별도의 파일로 각 열을 저장하는 kdb + can splay.

0

문장은 열 레이블이있는 테이블의 특정 열을 참조 할 때 해당 열의 각 요소가 아닌 전체 열 목록으로 해석되며이 열의 연산은 목록 연산으로 이해해야 함을 의미합니다. 상기 Q-SQL에서

q)show t: flip `a`b!(til 3;10*til 3) 
a b 
---- 
0 0 
1 10 
2 20 
q)select x: count a, y: type b from t 
x y 
--- 
3 7 
q)type t[`b] 
7h 
q)type first t[`b] 
-7h 

count acount 0 1 2 = 3 count t[`a] 동일하다.동일은 type b에 간다; 긍정적 인 반환 값 7은 b이 원자가 아닌 목록임을 의미합니다. http://code.kx.com/q/ref/datatypes/#primitive-datatypes