kdb - 将大型 CSV 从本地发送到服务器

kdb - sending large CSV from local to server

全部, 我在向我的服务器发送基于 csv 的大型 tables(6 列 x 1mm+ 行)table 时遇到了一些问题。我可以毫无问题地将 tables 从我的服务器取回。我尝试了几种方法,但目前我正在尝试读取 csv 并将其作为字符串发送以在服务器上构建 table。也许我在服务器字符串中分配变量时忽略了一些非常简单的事情?

为了寻找解决方案,我一直在测试 .Q.fs,因为它读取行并插入到 table 中,我认为我可以发送一个字符串并重建 table 在服务器上。 https://code.kx.com/q/kb/loading-from-large-files/#using-qfs

tbl: ("SIISSS";enlist",") 0:`:/data/local.csv; //how I normally load tables locally

由于我无法理清如何将一个tbl直接发送到服务器,我正在考虑以字符串形式读取和发送

//build table locally and insert records
 tbl:([]AAA:`first_row;BBB:1?10;CCC:2;DDD:`first_row;EEE:`first_row;FFF:`first_row); //create table tbl;
.Q.fs[{`tbl insert flip (cols tbl)!("SIISSS";",")0:x}]`:./Data/local.csv;   //load locally saved data;
tbl: delete from tbl where AAA =`first_row; //clean up by removing dummy data;

但是,我无法将此数据传输到我的服务器。我假设它是我的语法分配变量。我想我只是读取一个文件作为文本发送过来,然后在服务器上保存为本地 csv,尽管我不想将文件保存在那里。

//try to send csv data from local to server
\p 5042;
h:hopen `:xxx.xxx.xx.xx:5042;
h "tbl:([]AAA:`first_row;BBB:1?10;CCC:2;DDD:`first_row;EEE:`first_row;FFF:`first_row)";  //create table on server

//TRYING TO READ TABLE AND SEND DATA TO SERVER 
csv_string: raze read0[./Data/local.csv];  //<--- read the file in as a razed string
h "data:" , csv_string ;  //                 <-----no luck assigning variable
h "save `/data/csv_string.csv";//            <-----save file to server directory to reference later

如果我能在服务器上将文件保存为 csv,那么我至少可以引用它。

h ".Q.fs[{`tbl insert flip (cols tbl)!("SIISSS";",")0:x}]`:/data/csv_string.csv";  //
h "tbl: delete from tbl where AAA =`first_row"; //clean up by removing dummy data;
hclose h

如果您可以在客户端内存中保存整个 csv/table。您可以对 ipc 使用 h(func;args) 表示法。编辑 - 更正 link:https://code.kx.com/q/learn/startingkdb/ipc/

在根命名空间中使用分配应用:

h({@[`.;`tbl;:;x]};([]a:1 2 3;b:`a`b`c))

或全局分配:

h({tbl::x};localTblVariable)

Matt 的建议是在服务器端分配变量时的最佳方法。

这样,您就可以在服务器进程中定义来自本地进程(在本例中为 table/csv)的变量。

// local process
q)h:hopen 23444
q)show local:("SIISSS";enlist",")0:`:local.csv
AAA       BBB CCC DDD       EEE       FFF
-----------------------------------------------
first_row 8   2   first_row first_row first_row
q)h({@[`.;`data;:;x]};local)
`.

// server process
q)\p
23444i
q)data
AAA       BBB CCC DDD       EEE       FFF
-----------------------------------------------
first_row 8   2   first_row first_row first_row
q)save`:data.csv
`:data.csv
q)("SIISSS";enlist",")0:`:data.csv
AAA       BBB CCC DDD       EEE       FFF
-----------------------------------------------
first_row 8   2   first_row first_row first_row