KDB选择查询和vs功能

时间:2014-08-12 07:12:35

标签: kdb

好奇这个KX代码做了什么:

" " {`$first x vs y}/: column

它是更新语句之后使用的大型KX查询的一部分。

什么是x vs y以及它们来自哪里以及/:与左侧的" "一起做什么?

整个查询如下所示:

select count i by date, somecolumn from update somecolumn:(" " {`$first x vs y}/: othercolumn) from select from some_table

什么是x vs y以及它们来自哪里以及/:与左侧的" "一起做什么?

2 个答案:

答案 0 :(得分:2)

/:adverb,表示“each right”。

一个简单的示例是使用,/:将左项加入每个正确的项目:

q)1 2 3,/:4 5 6
1 2 3 4    / 1 2 3 join with 4
1 2 3 5    / 1 2 3 join with 5
1 2 3 6    / 1 2 3 join with 6

vs是“vector scalar”,在您的情况下,将字符串与分隔符“”分开。

q)" " vs "1 2 3"
,"1"
,"2"
,"3"

{`$first x vs y}是一个用y剪切x的函数,取第一个结果并将其转换为符号:

q){`$first x vs y}[" ";"1 2 3"]
`1

将它们组合在一起," " {`$first x vs y}/: column表示用'“切割'column'中的每个字符串,取每个结果中的第一个并将它们转换为符号:

q)update res:" "{`$first x vs y}/:test from ([]test:("1 2 3";"4 5 6"))
test    res
-----------
"1 2 3" 1
"4 5 6" 4

答案 1 :(得分:1)

简单来说:它从字符串中取出空格之前的第一个值并将其转换为符号。

Ex:输入“Hello World”将输出“Hello

 q> {`$first  x vs y}  [" ";"Hello World"]

输出:`Hello

您可以使用简单列表对其进行测试(查询中的列将替换为与该列对应的表中的实际列表)

  q>  " "{`$first  x vs y}/: ("hello world" ; "test program")

输出:hello测试

将此与ex1相比,“”被移动到开始,这是由于“每个权利(/ :)”的语法

另一个更简单的版本是:

   q){`$first   " "  vs x } each ("hello world" ; "test program")

WooiKent已经解释了这些功能。但这里有一些参考文献:

Every-Right(/ :):这是一个迭代右列表值的循环

http://code.kx.com/q/ref/adverbs/#each-right

vs(来自标量的向量):在某些分隔符上断开字符串

http://code.kx.com/q/ref/casting/#vs

在您的查询中,它采用类型为字符串作为输入的列。对于该列的每个元素(行),在空格之前取第一个值。最后将该值转换为符号。