Wie verbinde ich einen gespreizten Tisch in KDB?
Frage
Ich habe 2 sehr große (Milliarden von Zeilen) gespreizte Tabellen, Trades
und StockPrices
, auf einem Remote-Server.Ich möchte einen Asof-Beitritt machen
h:hopen `:RemoteServer:Port
h"aj[`Stock`Date`Time,
select from Trades where Date within 2014.04.01 2014.04.13,
StockPrices
]"
Aber ich bekomme nur den Fehler (ich bin Studio für KDB+)
An error occurred during execution of the query.
The server sent the response:
splay
Studio Hint: Possibly this error refers to nyi op on splayed table
Was wäre also der richtige Weg, um einen solchen Join durchzuführen?
Auch, leistung und Effizienz sind ein Thema was soll ich bei einer so großen Tabelle tun, um sicherzustellen, dass die Abfrage nicht Stunden dauert und nicht zu viele Systemressourcen des Servers verbraucht?
Lösung
Sie müssen das gespreizte abbilden StockPrices
tabelle in den Speicher.Dies kann durch Verwendung eines select
Abfrage:
q)(`::6060)"aj[`sym`time;select from trade;quote]" / bad
'splay
q)(`::6060)"aj[`sym`time;select from trade;select from quote]" / good
sym time prx bid ask
-------------------------------------------
aea 01:01:16.347 637.7554 866.0131 328.1476
aea 01:59:14.108 819.5301 115.053 208.1114
aea 02:42:44.724 69.38325 641.8554 333.3092
Diese Seite kann nützlich sein, um Fehler von Kdb + nachzuschlagen: http://code.kx.com/q/ref/error-list/
In Bezug auf die Optimierung der Leistung von aj
sehen http://code.kx.com/q/ref/joins/#aj-aj0-asof-join
Wenn sich die Daten zwischen den Tagen nicht überschneiden, ist es möglicherweise schneller, die Abfrage Tag für Tag auszuführen, möglicherweise parallel.
Wenn sich Daten über Tage hinweg überschneiden, würde die Kombination der Datums- und Uhrzeitspalten zu einer einzigen Zeitstempelspalte die Suche beschleunigen.