我试图从以下位置理解这段代码:
https://code.kx.com/q/kb/loading-from-large-files/
自己定制它(例如按小时、分钟、滴答数等分区):
$ 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-and-qk https://code.kx.com/q/wp/parse-trees/#k4-q-and-qk and https://code.kx.com/q/basics/exposed-infrastruct/#unary-forms https://code.kx.com/q/basics/exposed-infrastructure/#unary-forms
选项 4 是通过 google 搜索 k 的其他/类似版本的参考资料,例如 k2/k3。它们往往是相似的。
最后要注意的一点是,在大多数示例中,您将在基元后面看到一个冒号 (:)...q/kdb 中需要此冒号才能使用基元的单子形式(大多数都严重过载),而在 k 中,不需要显式强制使用一元形式。这就是为什么where
将显示为&:
在 q 参考中,但通常只是&
在实际的k代码中
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)