需要解释保存分区表的kdb/q脚本



我正试图理解以下代码片段:

https://code.kx.com/q/kb/loading-from-large-files/

我自己自定义它(e.x分区按小时、分钟、刻度数…(:

$ cat fs.q
d .Q
/ extension of .Q.dpft to separate table name & data
/  and allow append or overwrite
/  pass table data in t, table name in n, : or , in g
k)dpfgnt:{[d;p;f;g;n;t]if[~&/qm'r:+en[d]t;'`unmappable];
{[d;g;t;i;x]@[d;x;g;t[x]i]}[d:par[d;p;n];g;r;<r f]'!r;
@[;f;`p#]@[d;`.d;:;f,r@&~f=r:!r];n}
/ generalization of .Q.dpfnt to auto-partition and save a multi-partition table
/  pass table data in t, table name in n, name of column to partition on in c
k)dcfgnt:{[d;c;f;g;n;t]*p dpfgnt[d;;f;g;n]'?[t;;0b;()]',:'(=;c;)'p:?[;();();c]?[t;();1b;(,c)!,c]}
d .
r:flip`date`open`high`low`close`volume`sym!("DFFFFIS";",")0:
w:.Q.dcfgnt[`:db;`date;`sym;,;`stats]
.Q.fs[w r@]`:file.csv

但我找不到任何资源给我详细解释。例如:

if[~&/qm'r:+en[d]t;'`unmappable];

它对参数d有什么作用?

(将其提升为一个答案,因为我认为它有助于回答问题(。

下面是评论链:为了将k代码翻译成q代码(或者简单地理解k代码(,你有几个选择,没有一个是特别好的记录,因为它违背了q语言的目的——成为模糊k语言的包装器。

选项1是检查.q命名空间中的内置函数

q).q
| ::
neg       | -:
not       | ~:
null      | ^:
string    | $:
reciprocal| %:
floor     | _:
...

选项2是检查创建上述命名空间的q.k脚本(注意不要编辑/更改此脚本(:

vi $QHOME/q.k

例如,选项3是在code.kx网站上查找一些文档精华https://code.kx.com/q/wp/parse-trees/#k4-q和-qk以及https://code.kx.com/q/basics/exposed-infrastructure/#unary-形成

选项4是在谷歌上搜索其他/类似版本k的参考资料,例如k2/k3。他们往往很相似。

最后要注意的一点是,在大多数示例中,您将在基元后面看到冒号(:(。。。。这个冒号在q/kdb中需要使用基元的一元形式(大多数重载(,而在k中则不需要显式强制使用一元形式。这就是为什么where在q引用中显示为&:,但在实际的k代码中通常仅为&

最新更新