📅  最后修改于: 2020-11-03 06:56:35             🧑  作者: Mango
硬盘上的数据(也称为历史数据库)可以三种不同的格式保存-平面文件,扩展表和分区表。在这里,我们将学习如何使用这三种格式来保存数据。
平面文件已完全加载到内存中,这就是为什么它们的大小(内存占用空间)应该较小的原因。表完全以一个文件保存在磁盘上(因此大小很重要)。
用于操作这些表的功能被设置/获取–
`:path_to_file/filename set tablename
让我们以一个例子来演示它是如何工作的-
q)tables `.
`s#`t`tab`tab1
q)`:c:/q/w32/tab1_test set tab1
`:c:/q/w32/tab1_test
在Windows环境中,平面文件保存在以下位置: C:\ q \ w32
从磁盘(历史数据库)获取平面文件,并使用get命令,如下所示:
q)tab2: get `:c:/q/w32/tab1_test
q)tab2
sym | time price size
--------- | -------------------------------
APPLE | 11:16:39.779 8.388858 12
MSFT | 11:16:39.779 19.59907 10
IBM | 11:16:39.779 37.5638 1
SAMSUNG | 11:16:39.779 61.37452 90
APPLE | 11:16:39.779 52.94808 73
创建一个新表tab2 ,其内容存储在tab1_test文件中。
如果表中的列过多,则我们将这些表以展开格式存储,即,将它们保存在目录中的磁盘上。在目录内部,每列均以与列名相同的名称保存在单独的文件中。每列都保存为kdb +二进制文件中相应类型的列表。
当我们仅需要频繁地访问其许多列中的少数列时,以展开格式保存表非常有用。展开的表目录包含.d二进制文件,该文件包含列的顺序。
与平面文件非常相似,可以使用set命令将表保存为展开状态。要将表保存为展开状态,文件路径应以反斜杠结尾-
`:path_to_filename/filename/ set tablename
为了读取张开的表,我们可以使用get函数-
tablename: get `:path_to_file/filename
注–对于要保存为展开状态的表,应将其取消键控并枚举。
在Windows环境中,您的文件结构将如下所示-
分区表提供了一种有效的方法来管理包含大量数据的巨大表。分区表是分布在更多分区(目录)中的扩展表。
在每个分区内,一个表将具有自己的目录,该目录具有展开表的结构。可以按日/月/年的方式对表格进行拆分,以提供对其内容的优化访问。
要获取分区表的内容,请使用以下代码块-
q)get `:c:/q/data/2000.01.13 // “get” command used, sample folder
quote| +`sym`time`bid`ask`bsize`asize`ex!(`p#`sym!0 0 0 0 0 0 0 0 0 0 0
0 0 0….
trade| +`sym`time`price`size`ex!(`p#`sym!0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 ….
让我们尝试获取交易表的内容-
q)get `:c:/q/data/2000.01.13/trade
sym time price size ex
--------------------------------------------------
0 09:30:00.496 0.4092016 7 T
0 09:30:00.501 1.428629 4 N
0 09:30:00.707 0.5647834 6 T
0 09:30:00.781 1.590509 5 T
0 09:30:00.848 2.242627 3 A
0 09:30:00.860 2.277041 8 T
0 09:30:00.931 0.8044885 8 A
0 09:30:01.197 1.344031 2 A
0 09:30:01.337 1.875 3 A
0 09:30:01.399 2.187723 7 A
注–分区模式适用于每天有数百万条记录(即时间序列数据)的表
sym文件是一个kdb +二进制文件,其中包含来自所有展开表和分区表的符号列表。可以阅读,
get `:sym
这是一个配置文件,当分区分布在多个目录/磁盘驱动器上时使用,并包含磁盘分区的路径。