Ich habe eine Datetime-Liste (die ich aus irgendeinem Grund Spalte date
nennen) mit über 1k Datetime.Wie optimiert man eine Batch-Pivotalisierung?
adates:2017.10.20T00:02:35.650 2017.10.20T01:57:13.454 ...
jeder dieser Tage, denn ich die Daten aus einer Tabelle auswählen muß, dann durch eine Säule t
dh Ablauf pivotize, die entsprechenden date
Datumzeit als Spalte in dem pivotized Tisch und zusammenheften die pivotization für alle hinzufügen Termine. Beachten Sie, dass ich sollte in der Lage zu erkennen, welche pivotization zu einem Datum entspricht, und das ist, warum ich es tun eins nach dem anderen:
fPivot:{[adate;accypair]
t1:select from volatilitysurface_smile where date=adate,ccypair=accypair;
mycols:`atm`s10c`s10p`s25c`s25p;
t2:`t xkey 0!exec mycols#(stype!mid) by t:t from t1;
t3:`t xkey select distinct t,tenor,xi,volofvol,delta_type,spread from t1;
result:ej[`t;t2;t3];
:result}
nenne ich dann diese Funktion für alle Datetime adates
wie folgt:
raze {[accypair;adate] `date xcols update date:adate from fPivot[adate;accypair] }[`EURCHF] @/: adates;
Das dauert ungefähr 90s. Ich frage mich, ob es einen besseren Weg gibt, z.B. Führen Sie eine große Pivotation durch, anstatt eine Pivotation pro Datum auszuführen und dann alles zusammenzufassen. Das große Problem, das ich sehe, ist, dass ich keine offensichtliche Möglichkeit habe, das date
Attribut als Teil der Pivotalisierung einzuschließen und die date
kann nicht verloren werden, sonst kann ich die Ergebnisse nicht abstimmen.
Die Daten, die Sie in 'adates' angegeben haben, sind vom Typ datetime nicht timestamp. Ein Zeitstempel in kdb sieht aus wie '2017.11.28D12: 55: 47.354335000'. Beachten Sie das Trennzeichen "D" zwischen Datum und Uhrzeit, verglichen mit dem Trennzeichen "T" in den Datetime-Typen. –
Richtig sorry meine schlechte, Aktualisierung .. –