2017-04-27 3 views
2

J'essaie d'ajouter une colonne de date à une table, donc je veux faire une mise à jour, en ajoutant la date du jour à chaque ligne.KDB comment créer un vecteur de longueur n

http://www.timestored.com/b/forums/topic/add-a-column-to-a-table-kdb/ 

Après ce lien, je voudrais juste mettre à jour, mais je ne peux pas savoir comment créer un vecteur de table de comptage de longueur remplie avec la date d'aujourd'hui. Sons si simple, je ne peux pas trouver le moyen de le faire, alors appréciez toute aide.

Répondre

4

Vous pouvez utiliser la fonction 'take' #. Par exemple.

q)length:10 
q)length#.z.d 
2017.04.27 2017.04.27 2017.04.27 2017.04.27 2017.04.27 2017.04.27 2017.04.27 2017.04.27 2017.04.27 2017.04.27 

Bien que vous puissiez probablement effectuer une mise à jour régulière, par ex.

q)t 
s p 
----- 
IBM 1 
IBM 1 
IBM 1 
q)update dt:.z.d from t 
s p dt 
---------------- 
IBM 1 2017.04.27 
IBM 1 2017.04.27 
IBM 1 2017.04.27 
+0

oh, oui, ne même pas besoin de ce vecteur ... agréable. merci – chrise

+0

Je suis d'accord avec @ james-little, il suffit d'utiliser la méthode 'update dt: .z.d from t'; pas besoin de couper les vecteurs et ajouter. – davidcrossey

4

Comme mentionné James, si vous mettez à jour/generate une colonne dans une table à l'aide d'un atome alors KDB se tourneront automatiquement l'atome dans un vecteur de la longueur requise.

q)tab:([] col1:`a`b`c;col2:1 2 3) 
q)update date:.z.d from tab 
col1 col2 date 
-------------------- 
a 1 2017.04.27 
b 2 2017.04.27 
c 3 2017.04.27 

Cela se produit également avec un flip

q)flip (1 2 3;`a) 
1 `a 
2 `a 
3 `a 

Cependant pour les chaînes ou d'autres structures imbriquées cela ne se produira pas. Dans ce cas, vous devez générer manuellement le vecteur

q)update str:count[i]#enlist "hello" from tab 
col1 col2 str 
----------------- 
a 1 "hello" 
b 2 "hello" 
c 3 "hello"