Database 这两个kdb函数的用途是什么?

Database 这两个kdb函数的用途是什么?,database,kdb,Database,Kdb,我已经有一段时间没有使用kdb了。我试图理解这两个功能: trade:([]sym:n?`sym;time:10:30:00.0+til n;price:n?3.3e;size:n?9;ex:n?ex); quote:([]sym:n?`sym;time:10:30:00.0+til n;bid:n?3.3e;ask:n?3.3e;bsize:n?9;asize:n?9;ex:n?ex); {@[;`sym;`p#]`sym xasc x}each`trade`quote; d:2014.08.

我已经有一段时间没有使用kdb了。我试图理解这两个功能:

trade:([]sym:n?`sym;time:10:30:00.0+til
n;price:n?3.3e;size:n?9;ex:n?ex);
quote:([]sym:n?`sym;time:10:30:00.0+til
n;bid:n?3.3e;ask:n?3.3e;bsize:n?9;asize:n?9;ex:n?ex);
{@[;`sym;`p#]`sym xasc x}each`trade`quote;
d:2014.08.07 2014.08.08 2014.08.09 2014.08.10 2014.08.11; /Date vector can also be changed by the user
dt:{[d;t].[dst;(`$string d;t;`);:;value t]};
我正在努力理解这一点
@[;`sym;`p#]`sym xasc x}每个'trade'报价

这里是什么?那么从交易表和报价表中,它们将sym传递给函数?这个函数就是order sym?这里的一切都做什么

还有这个
dt:{[d;t].[dst;(`$string d;t;`);:;value t]}
,这是一个保存功能吗?

`p#
是parted属性,应用于所有不同值相邻的列表,并创建列表中所有不同值到它们出现的第一个索引的映射。这允许更快的查找和查询。parted属性通常用于存储在磁盘上的表,而grouped属性(
`g#
)用于内存中的表

函数
@[`trade;`sym;`p#]
将parted属性应用于交易表的sym列,但仅当不同值相邻时才能应用
`sym xasc`trade
按sym列的升序对交易表进行排序。对于交易和报价数据,通常在应用parted属性之前,时间将在sym内排序

把这两个表达式放在一起 我们得到了@[;sym`p#]`sym xasc`trade,这与
@[`sym xasc`trade;sym;`p#]
。这将parted属性应用于交易表上的sym列,该列已按sym排序

如果
dst
是指向目录的路径,那么
dt:{[d;t].[dst;(`string d;t;`);:;value t]}
对于日期列表中的每个日期
d
,对于表
t
,它正在保存该表
dt[d;`quote]
将按以下方式保存报价表

dst
├── 2014.08.07
│   ├── quote
│   │   ├── asize
│   │   ├── ask
│   │   ├── bid
│   │   ├── bsize
│   │   ├── ex
│   │   ├── sym
│   │   └── time
├── 2014.08.07
│   ├── quote
│   │   ├── asize
.
.
.

谢谢只有一个问题。为什么它不用x?像这样{@[x;
sym;
p#]
sym-xasc x}每个
trade`quote;为什么表参数为空?x是未排序的,因此尝试直接将parted属性应用于它并不一定成功
@[;`sym;`p#]
是一个投影,排序表是第一个参数。您可以在此处阅读有关投影的更多信息: