【问题标题】:How to apply attributes to KDB table using column name string and table variable?如何使用列名字符串和表变量将属性应用于 KDB 表?
【发布时间】:2016-11-09 20:25:47
【问题描述】:

是否可以使用列名字符串应用表的属性?

例如(不起作用):

t: flip `ti`p!(10:00:01 19:00:02; 77.7 88.8)
update `p#"ti" from `t

另外,我可以更新表列表的属性吗?

例如:

t1: flip `ti`p!(10:00:01 19:00:02; 77.7 88.8)
t2: flip `ti`p!(10:00:01 19:00:02; 77.7 88.8)
lst: (t1; t2)
/ How can I apply `p#ti on all the elements of "lst" 
/ (i.e. acting on lst[0] and lst[1])?

/ does not always work:
i:0; while[i<=1; t: lst[i]; update `p#ti from `t; lst[i]: t; i:i+1];

非常感谢您的帮助!

【问题讨论】:

  • 问题 #1:我正在寻找一种适用于本地表的解决方案。问题#2:解决方案只能使用“lst”(不能使用t1,t2)。想象一下,您有 2000 个表 - 手动将它们一一列出似乎是一个不错的解决方案?
  • 关于#1 - 如果您传递表格而不是符号表示,则解决方案适用于当地人。您还可以将符号传递给您的函数,然后使用 value 来获取表表示形式。关于#2 - 我已经更新了下面的答案以添加一些关于变量的信息。

标签: attributes kdb


【解决方案1】:

一种方法是使用functional amend

q)@[`t;`ti;`p#]
`t

q)show meta t
c | t f a
--| -----
ti| v   p
p | f

您可以创建一个投影并对每个表进行操作:

q)@[;`ti;`p#] each `t1`t2
`t1`t2

表列表可以包含在一个变量中,您可以通过编程方式填充该变量(在这种情况下,我只是通过调用 tables[] 创建变量):

tabs:tables[]
q)@[;`ti;`p#] each tabs
`t1`t2

【讨论】:

    【解决方案2】:

    功能更新是另一种选择: http://code.kx.com/q4m3/9_Queries_q-sql/#9123-functional-update

    我认为您正在动态接收字符串,因此类似于以下的函数允许您提供字符串作为输入:

    q)f:{[tablename;column]![tablename;();0b;(enlist `$column)!enlist (#;enlist `p;`$column)]}
    q)f[`t1;"ti"]
    `t1
    

    与 user2242865 的回答类似,可以形成一个投影来对两个表进行操作:

    q)f[;"ti"]each`t1`t2
    

    【讨论】:

    • 不知何故,应用parted属性的方法只适用于全局变量。例如:t1:翻转tip!(10:00:01 19:00:02; 77.7 88.8); ApplyPartedAttribute: { [tableSym;columnName] ![tableSym; (); 0b; (登记$columnName)!enlist (#;enlist p;$columnName)] }; ApplyPartedAttribute[t1;“ti”];meta t1 按预期工作。但不是测试:{ t1:翻转tip!(10:00:01 19:00:02;77.7 88.8 ); ApplyPartedAttribute: { [tableSym;columnName] ![tableSym; (); 0b; (enlist $columnName)!enlist (#;enlist p;$columnName)] }; ApplyPartedAttribute[t1;"ti"]; 显示元 t1; }
    • @user2242865 和您都使用元素名称在表列表上应用属性,而问题的本质是“如果这些不可用怎么办?即只有 'lst' 是可用”
    • 如何构造变量内容取决于您自己。我的解决方案向您展示了如何使用变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多