Нужно объяснить скрипт kdb / q для сохранения секционированной таблицы - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь понять этот фрагмент кода из:

https://code.kx.com/q/kb/loading-from-large-files/

, чтобы настроить его самостоятельно (без разделения по часам, минутам, количеству тиков, ...):

$ cat fs.q
\d .Q

/ extension of .Q.dpft to separate table name & data
/  and allow append or overwrite
/  pass table data in t, table name in n, : or , in g
k)dpfgnt:{[d;p;f;g;n;t]if[~&/qm'r:+en[d]t;'`unmappable];
 {[d;g;t;i;x]@[d;x;g;t[x]i]}[d:par[d;p;n];g;r;<r f]'!r;
 @[;f;`p#]@[d;`.d;:;f,r@&~f=r:!r];n}

/ generalization of .Q.dpfnt to auto-partition and save a multi-partition table
/  pass table data in t, table name in n, name of column to partition on in c
k)dcfgnt:{[d;c;f;g;n;t]*p dpfgnt[d;;f;g;n]'?[t;;0b;()]',:'(=;c;)'p:?[;();();c]?[t;();1b;(,c)!,c]}

\d .

r:flip`date`open`high`low`close`volume`sym!("DFFFFIS";",")0:
w:.Q.dcfgnt[`:db;`date;`sym;,;`stats]
.Q.fs[w r@]`:file.csv

Но я не смог найти никаких ресурсов, чтобы дать мне подробное объяснение. Например:

if[~&/qm'r:+en[d]t;'`unmappable];

что это делает с параметром d?

1 Ответ

0 голосов
/ 18 марта 2020

(Повышение этого до ответа, так как я полагаю, что это помогает ответить на вопрос).

Исходя из цепочки комментариев: для того, чтобы перевести код k в код q (или просто понять код k) ) у вас есть несколько вариантов, ни один из которых не особенно хорошо документирован, так как это отрицает цель языка q - быть оболочкой, скрывающей язык k.

Вариант 1 - проверка встроенных функций в пространстве имен .q

q).q
          | ::
neg       | -:
not       | ~:
null      | ^:
string    | $:
reciprocal| %:
floor     | _:
...

Вариант 2 - проверка скрипта qk, создающего указанное пространство имен (будьте осторожны, чтобы не редактировать / измените это):

vi $QHOME/q.k

Вариант 3 - поиск некоторых фрагментов документации на веб-сайте code.kx, например https://code.kx.com/q/wp/parse-trees/#k4 -q-and-qk и https://code.kx.com/q/basics/exposed-infrastructure/#unary -forms

Варианты 4 - поиск в Google справочных материалов для других / похожих версий k, например, k2 / k3. Они имеют тенденцию быть похожими - я sh.

Последнее замечание: в большинстве этих примеров вы увидите двоеточие (:) после примитивов .... это двоеточие требуется в q / kdb для использования формы monadi c примитив (большинство сильно перегружено), тогда как в k не требуется явно форсировать форму monadi c. Вот почему where будет отображаться как &: в ссылке q, но обычно будет & в реальном коде k

...