2017-09-21 2 views
0

Ich lerne KDB + und Q-Programmierung und lesen Sie über die folgende Anweisung - "wählen führt Vektoroperationen auf Spaltenlisten". Was bedeutet Vector Operation bedeuten hier? Könnte jemand bitte mit einem Beispiel erklären? Wie ist es schneller als Standard-SQL?KDB/Q: Was ist Vektorbetrieb?

Antwort

4

Eine Vektoroperation ist eine Operation, die einen oder mehrere Vektoren verwendet und einen anderen Vektor erzeugt. Zum Beispiel + in q ist eine Vektoroperation:

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

Wenn a und b Spalten in einer Tabelle sind, können Sie Vektor-Operationen auf sie in einer select Anweisung auszuführen. mit dem vorherigen Beispiel fortzufahren, lassen Sie uns a und b Vektoren in einer Tabelle als Spalten setzen:

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

Jetzt

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

Die select-Anweisung ausgeführt, um die gleiche a+b Vektoraddition, sondern nahm Eingang und kehrte Ausgang als Tabellenspalten.

Wie ist es schneller als Standard-SQL?

"Standard" SQL-Implementierungen speichern Daten normalerweise Zeile für Zeile. In einer Tabelle mit vielen Spalten kann das erste Element einer Spalte und das zweite Element im Speicher durch Daten aus anderen Spalten getrennt werden. Moderne Computer arbeiten am effizientesten, wenn die Daten zusammenhängend gespeichert werden. In kdb + wird dies erreicht, indem Tabellen spaltenweise gespeichert werden.

+0

Danke für die detaillierte Erklärung Alexander. – userknight

0

Eine vector ist eine Liste von Atomen des gleichen Typs. Einige Beispiele:

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

Kdb + speichert und behandelt Vektoren sehr effizient. Q operators - nicht nur +-*%, sondern z.B. mcount, ratios, prds - sind für Vektoren optimiert.

Diese Operatoren können noch effizienter sein, wenn Vektoren attributes haben, wie u (keine wiederholten Elemente) und s (Elemente sind in aufsteigender Reihenfolge).

Wenn Tabellenspalten Vektoren sind, sind dieselben Effizienzen verfügbar. Diese Effizienzen sind für Standard-SQL nicht verfügbar, bei dem Tabellen als ungeordnete Reihen von Zeilen angezeigt werden.

Als spaltenorientiert kann kdb + splay große Tabellen, jede Spalte als separate Datei speichern, die Datei-E/A bei der Auswahl aus großen Tabellen reduziert.

0

Der Satz bedeutet, wenn Sie auf eine bestimmte Spalte einer Tabelle mit einer Spaltenbeschriftung verweisen, wird sie in die gesamte Spaltenliste und nicht in jedes Element davon aufgelöst, und alle Operationen darauf sind als Listenoperationen zu verstehen.

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 a in dem obigen q-sql entspricht count t[`a] die count 0 1 2 = 3 ist.Das gleiche gilt für type b; der positive Rückgabewert 7 bedeutet b ist eine Liste und nicht ein Atom: http://code.kx.com/q/ref/datatypes/#primitive-datatypes