Comment rejoindre écartés de la table dans KDB?
Question
J'ai 2 très grandes (des milliards de lignes) évasée sur les tables, Trades
et StockPrices
, sur un serveur distant.Je veux faire un asof rejoindre
h:hopen `:RemoteServer:Port
h"aj[`Stock`Date`Time,
select from Trades where Date within 2014.04.01 2014.04.13,
StockPrices
]"
Mais je reçois le message d'erreur (je suis Studio pour 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
Alors quelle serait la bonne façon de faire une telle jointure?
Aussi, les performances et l'efficacité est une question avec une telle grande table -- que dois-je faire pour s'assurer de la requête ne pas prendre des heures et ne pas consommer trop de du serveur de ressources système?
La solution
Vous devez mapper les évasée StockPrices
table en mémoire.Cela peut être fait en utilisant un select
requête:
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
Cette page peut être utile pour la recherche d'erreurs de Kdb+: http://code.kx.com/q/ref/error-list/
Concernant l'optimisation de la performance de aj
voir http://code.kx.com/q/ref/joins/#aj-aj0-asof-join
Aussi, si il n'y a pas de chevauchement de données entre les jours, il peut être plus rapide pour exécuter la requête sur une base de jour en jour, si possible en parallèle.
Si il y a un chevauchement de données à travers des jours, la combinaison de la date et de l'heure colonnes en une seule colonne de type timestamp permettrait d'accélérer la recherche.