Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取大型tplog文件的子集,而无需在kdb的内存中加载完整的tplog文件_Kdb - Fatal编程技术网

获取大型tplog文件的子集,而无需在kdb的内存中加载完整的tplog文件

获取大型tplog文件的子集,而无需在kdb的内存中加载完整的tplog文件,kdb,Kdb,我有一个几百GB的tplog文件,它由许多表的日志组成——“交易”、“报价”等。 我想将包含交易表记录的tplog文件创建到磁盘上的新tplog文件(tradeTpLog)中。 由于我的tplog文件很大,因此不可能一次加载完整的tplog文件,因此我考虑从内存中的tplog文件中读取一条记录/chunck记录,然后检查表是否为“trade”,如果是,则将该记录附加到磁盘上的tradeTpLog文件中 测试日志文件记录: 2#get `:./sym2020.05.13 ((`upd;`trade

我有一个几百GB的tplog文件,它由许多表的日志组成——“交易”、“报价”等。
我想将包含交易表记录的tplog文件创建到磁盘上的新tplog文件(tradeTpLog)中。
由于我的tplog文件很大,因此不可能一次加载完整的tplog文件,因此我考虑从内存中的tplog文件中读取一条记录/chunck记录,然后检查表是否为“trade”,如果是,则将该记录附加到磁盘上的tradeTpLog文件中

测试日志文件记录:

2#get `:./sym2020.05.13
((`upd;`trade;(20:46:39.781823000 20:46:39.781823000;`GS.N`BA.N;178.5163025 128.0462196;798 627j));(`upd;`quote;(20:46:39.782805000 20:46:39.782805000;`IBM.N`VOD.L;191.0897744 341.2843914;191.1130483 341.3052296;564 807j;886 262j)))
我知道-11!我们可以为其提供n个元素,但不确定是否/如何在这种情况下使用

不成功的尝试:

{if[`trade~x@1;`:./tradeFile upsert x]}@'25#get `:./sym2020.05.13

您不能有选择地从日志中提取行,但可以只更新upd的定义。如果您想创建一个新的日志文件,但不能使用
upsert
,则需要创建一个新的日志文件

// Preserve the original upd functionality
upd_old::upd;
// Create a new log file and a handle to use
`:tradeLog set ();
h::hopen `:tradeLog;
// Define a new upd 
upd:{[t;x] if[t=`trade;h enlist (`upd;t;x)]};
// Replay the log file
-11!`:./sym2020.05.13;
// Revert the upd functionality
upd::upd_old
使用-11!将比
get
快得多


如果愿意,您可以选择通过
-11重播
n
元素!(n;x)

您不能有选择地从日志中提取行,但只需更新upd的定义即可。如果您想创建一个新的日志文件,但不能使用
upsert
,则需要创建一个新的日志文件

// Preserve the original upd functionality
upd_old::upd;
// Create a new log file and a handle to use
`:tradeLog set ();
h::hopen `:tradeLog;
// Define a new upd 
upd:{[t;x] if[t=`trade;h enlist (`upd;t;x)]};
// Replay the log file
-11!`:./sym2020.05.13;
// Revert the upd functionality
upd::upd_old
使用-11!将比
get
快得多

如果愿意,您可以选择通过
-11重播
n
元素!(n;x)