英文:
How to append data to splayed table
问题
我有一个展开的表格,有一个文件夹结构
我的根目录/
2023年01月01日
我的表格
列1
列2
...
.d
2023年01月02日
...
...
符号
查看upsert的文档
x upsert y
覆盖或追加记录到一个表格
x是一个表格,或者是一个表格的名称作为符号原子,或者作为目录句柄的展开表格的名称
然而它似乎期望sym
和.d
在文件句柄指向的文件夹中,但它们在不同的文件夹中。
如何追加数据?
英文:
I have a splayed table with a folder structure
myroot/
2023.01.01
mytable
col1
col2
...
.d
2023.01.02
...
...
sym
looking at the documentation of upsert
x upsert y
Overwrite or append records to a table
where x is a table, or the name of a table as a symbol atom, or the name of a splayed table as a directory handle
However it appears to expect sym
and .d
to be on the folder the file handle points to, but they are in different folders.
How can I append the data?
答案1
得分: 2
sym文件sym
(用于枚举)和列顺序文件.d
不应该放在同一个文件夹中,kdb+不会预期这样做。
您可以使用.Q.en
枚举数据来追加到数据库中的表格,假设数据库已经被加载,并且您要追加的数据是一个表格。
/ 加载数据库
\l myroot
/ 枚举数据并更新
`:2023.01.01/mytable/ upsert .Q.en[`sym]data
如果要追加的数据是要插入的记录列表格式,则应该可以运行以下命令(假设使用了正确的模式):
`:2023.01.01/mytable/ upsert (`sym?`XYZ;.z.p;0.1;0.1;1;1)
或者,如果您不能或不想加载整个数据库,只需在枚举和追加之前将sym
文件加载到内存中。
sym:get[`:myroot/sym]
英文:
The sym file sym
(for enumeration) and column order file .d
should never be in the same folder, kdb+ won't expect this.
You should be able append to a table in your database by using .Q.en
to enumerate the data, assuming the database has been loaded first and the data you are trying to append is a table.
/ load database
\l myroot
/ enumerate data and upsert
`:2023.01.01/mytable/ upsert .Q.en[`sym]data
If the data to append is in the format of list of records to insert then the following should work (provided the correct schema is used):
`:2023.01.01/mytable/ upsert (`sym?`XYZ;.z.p;0.1;0.1;1;1)
Alternatively if you can't or don't wish to load the entire database you just need to bring the sym
file in to memory before enumerating and appending.
sym:get[`:myroot/sym]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论