kdb: используйте l для загрузки файла данных (таблица или список)

#kdb

#kdb

Вопрос:

В примерах, предоставленных https://code.kx.com/q4m3/11_IO/#1113-serializing-and-deserializing-q-entities

Я обнаружил, что могу использовать l для обратной загрузки таблицы, но не могу загрузить список. Я что-то упускаю или l поддерживает только обратную загрузку данных определенных типов?

таблица

 `:/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
  

Ответ №1:

Вы можете загрузить список в память, загрузив каталог, в котором он находится

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

Ответ №2:

Я считаю, что это может быть подлинной ошибкой, из документации l следует загружать в любой q сериализованный файл. Однако я бы не советовал использовать l для загрузки в файлы по следующим причинам

  • При загрузке таблицы с перечислимыми разделами очень легко не загружать связанный файл symb и затем не иметь символов (см. Пример ниже)
  • Файлы загружаются с именем файла, который может перезаписывать объекты, гораздо лучше использовать 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:UserscbiggsDocuments>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