如何用不同的文件名(KDB)保存大文件?

如何用不同的文件名(KDB)保存大文件?,kdb,Kdb,我在一个名为“data”的变量中有一个很大的表(保存时大约3GB) 我可以使用以下命令将其保存到文件: save `:data.csv 但是,如果我尝试使用其他文件名保存它,则会出现错误: sd: 2017.12.08; string[sd],".csv" set data ERROR: 'limit (tried to generate a list with more than 2,000,000,000 elements (keep in mind that any IPC res

我在一个名为“data”的变量中有一个很大的表(保存时大约3GB)

我可以使用以下命令将其保存到文件:

save `:data.csv
但是,如果我尝试使用其他文件名保存它,则会出现错误:

sd: 2017.12.08;

string[sd],".csv" set data

ERROR: 'limit 
(tried to generate a list with more than 2,000,000,000 elements (keep in mind that any IPC result is a byte list, hence can't be longer than 2 metric Gb))

我怎样才能克服这个错误?我尝试了多种方法,我相信这很简单,但没有找到解决办法。

您应该能够通过批量写入文件而不是批量写入来绕过限制。下面是一个允许您这样做的函数。该函数采用3个参数:批量大小
n
、文件名
f
数据
写入文件。它打开文件的句柄,用
hcount
检查文件是否为空,并在必要时写入列标题。然后批量保存数据,并在完成时关闭文件句柄

chunk:{[n;f;data]
  h:hopen f;                                   / open file handle
  if[0=hcount f;h","sv string cols data];      / write headers to empty file
  {x raze"\n",/:1_","0:y}[h]'[n cut data];     / write chunks to file
  :hclose h;                                   / close file handle
 };
此函数非常简单,因为它不检查模式,因此在向其传递混合模式时可能会导致问题。

将以二进制格式保存表,而不是csv格式。使用(由
save
内部使用)以csv格式用不同的文件名保存表格:

q)hsym[`$string[sd],".csv"] 0: csv 0: data
`:2017.12.08.csv

漂亮的解决方案。谢谢你,善良的陌生人!有什么方法可以将文件路径附加到该文件吗?尽管做了很多尝试,我还是不知道该怎么做。要回答我自己的评论,我可以这样做:
hsym[`sv`:/path,`$string[ed],“.csv”]0:csv 0:data其他方法:1)字符串连接:
hsym[`$“/path/”,字符串[sd],“.csv”]0:csv 0:data
2:
.Q.dd[`:/path;`$string[sd],“.csv”]0:csv 0:data