Q (kdb+): Создайте таблицу с вектором символов

Я могу создать таблицу kdb+ с типами атомов, например.

trade:([]time:`time$();sym:`symbol$();price:`float$();size:`int$())

Можно ли вместо этого создать пустую таблицу с вектором символов? Ценю любую помощь/примеры, которые я могу получить. Мои знания Q довольно плохие


kdb
person qwerty    schedule 21.03.2012    source источник


Ответы (2)


t: ([] time: `time$(); chr: `char$())

t, ([] time: enlist 09:30:00.001; chr: enlist"abcd")

Вложенные типы на самом деле хорошо поддерживаются, у меня были таблицы, в которых записи столбцов сами были таблицами.

person Yike Lu    schedule 22.05.2012
comment
Спасибо, но ни time$, ни char$ не работают на моей установке (kdb 2.8). С каким релизом вы работаете? - person qwerty; 23.05.2012
comment
О, я знаю, что случилось, уценка все исказила, это должно быть время обратной кавычки. Позвольте мне посмотреть, смогу ли я понять правильное редактирование. - person Yike Lu; 25.05.2012
comment
Кроме того, я понял, что вышеизложенное может относиться к возможности делать это в расширенных/разделенных/сегментированных таблицах, что в некоторой степени верно. Никаких ограничений не применяется к вложению в память или просто к сохраненным таблицам. См. code.kx.com/wiki/JB:KdbplusForMortals/ - person Yike Lu; 25.05.2012
comment
@yike-lu: это разные типы - chr в пустой таблице - это вектор символов, то есть столбец, в котором каждая точка данных является одним символом. chr в результате оператора запятой представляет собой список символов (также известный как список строк), т. е. столбец, в котором каждая точка данных является строкой. рассмотрим разницу между meta t и meta t, ([] time: enlist 09:30:00.001; chr: enlist"abcd") -- chr имеет тип c в первом случае и тип C во втором. - person Aaron Davies; 30.07.2012
comment
@AaronDavies: я понимаю, что ты говоришь. Это правда, но мой код показывает, что можно создать такой столбец, а затем вставить в него тип C позже. - person Yike Lu; 31.07.2012
comment
это что-то вроде причуды системы типов. попробуйте один из следующих способов, чтобы увидеть разницу: `t upsert (09:30:00.001;"abcd") (выдает 'type); t,: ([] time: enlist 09:30:00.001; chr: enlist"abcd") (выбрасывает 'type); t: ([] time: enlist .z.T; chr: enlist" "); meta t, ([] time: enlist 09:30:00.001; chr: enlist"abcd") (показывает, что chr теперь потерял информацию о типе и стал общим списком). - person Aaron Davies; 01.08.2012
comment
Этот домен кажется полным причуд... meta ([] time: enlist 09:30:00.001; chr: enlist"abcd"), ([] time: enlist .z.T; chr: enlist"aoeu") дает тип C, но в тот момент, когда вы вставляете один символ, он дает общий тип. Но моя точка зрения заключалась в том, что вопрос о том, имеет ли это значение, зависит от решаемой проблемы. Редактировать: я понимаю, что вы говорите со строгой типизацией - можно было бы сделать вывод, что это было то, чего хотел ОП. Первоначально я думал, что вы имеете в виду, что вложенные типы внутри таблиц вообще не поддерживаются. - person Yike Lu; 03.08.2012

нет, не совсем

поддержка «вложенных» типов (одним из которых является «строковый столбец», т. е. список из списка символов) довольно ограничена в q; в частности, нет способа строго ввести пустой вложенный список

person Aaron Davies    schedule 23.03.2012