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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top