kdb:使用 \l 加载数据文件(table vs 列表)

kdb: Use \l to load a data file (table vs list)

https://code.kx.com/q4m3/11_IO/#1113-serializing-and-deserializing-q-entities

提供的示例中

我发现我可以用\l加载回一个table,但是不能加载一个列表。我是不是遗漏了什么,或者 \l 只支持加载某些类型的数据?

table

`:/tmp/data/t set ([] c1:`a`b`c; c2:10 20 30)
get `:/tmp/data/t
\l /tmp/data/t  / OK

列表

`:/tmp/data/L set 10 20 30
get `:/tmp/data/L
\l /tmp/data/L  / 'type

您可以通过加载列表所在的目录来将列表加载到内存中

q)`:/tmp/data/L set 10 20 30
`:/tmp/data/L
q)\l /tmp/data/
q)L
10 20 30

我相信这可能是一个真正的错误,从 documentation \l 应该加载任何 q 序列化文件。但是我建议不要使用 \l 加载文件,原因如下

  • 加载枚举分区table时,很容易没有加载关联的sym文件,然后没有符号(见下例)
  • 文件以文件名加载,可以覆盖对象,使用get
  • 会好很多
q)t:.Q.en[`:tmp;([] c1:`a`b`c; c2:10 20 30)]
q)`:/tmp/data3/t/ set t
`:/tmp/data3/t/
q)\

C:\Users\cbiggs\Documents>q
KDB+ 4.0 2020.05.04 Copyright (C) 1993-2020 Kx Systems
w64/ 8(16)core 16227MB cbiggs lptp633 192.168.56.1 EXPIRE 2021.05.18 cbiggs@kx.com KOD #4170988

q)\l /tmp/data3/t
`t
q)t
c1 c2
-----
0  10
1  20
2  30