【问题标题】:KDB select query and vs functionKDB 选择查询和 vs 函数
【发布时间】:2014-08-12 07:12:34
【问题描述】:

只是好奇这个 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 是什么,它们来自哪里,/: 与左侧的" " 一起做什么?

【问题讨论】:

    标签: kdb


    【解决方案1】:

    /: 是一个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} 是一个将yx 相切的函数,取第一个结果并将其转换为符号:

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

    将它们组合在一起," " {`$first x vs y}/: 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
    

    【讨论】:

      【解决方案2】:

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

      例如:输入“Hello World”将给出输出 `Hello

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

      输出:`你好

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

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

      输出:hellotest

      与 ex1 相比," " 被移到开头,这是由于 "每个权利(/:)" 的语法

      另一个更简单的版本是:

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

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

      Each-Right(/:) :这是一个循环遍历右列表的值

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

      vs(Vector From Scalar):在某个分隔符处打破字符串

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-08
        相关资源
        最近更新 更多