好奇这个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
以及它们来自哪里以及/:
与左侧的" "
一起做什么?
答案 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
在您的查询中,它采用类型为字符串作为输入的列。对于该列的每个元素(行),在空格之前取第一个值。最后将该值转换为符号。