Почему первый столбец в kdb + tick не может быть типа String - PullRequest
2 голосов
/ 25 июня 2019

Я попытался установить первый столбец в схеме как тип String, но данные не обновлялись в tickerplant.

Затем я изменил первый столбец в схеме, который имел тип Symbol, и он работал отлично.

При попытке отладки я наткнулся на статью, в которой говорится, что всегда хорошо помещать в таблицу первый столбец типа timespan или символ.

  1. Почему столбец типа String нельзя поместить в начало таблицы (поскольку String является списком символов (сложный тип) или по какой-либо другой причине)?
  2. Почему хорошо / необходимо размещать столбец символа / временного интервала в начале каждой таблицы?

Ответы [ 2 ]

2 голосов
/ 25 июня 2019

Типы, используемые в ваших схемах, должны хорошо сочетаться с функцией, вызываемой обработчиком каналов в TP.Я сломал по умолчанию .u.upd для TP, когда указан таймер.

// All the following is defined in the .u context
upd:{[t;x]
    // t - symbol
    // x - list of lists
    // Check if the first type is a timespan. First list should be a list of timespan
        // Vanilla TP will add timespans to the data
    if[not -16=type first first x;
        // If the current time is greater than the gloabl .u.d then run the timer, causing an EOD
        if[d<"d"$a:.z.P;
            .z.ts[]];
        // Get the timespan
        a:"n"$a;
        // Append the timespan on, handling differently if only a list of atoms
        x:$[0>type first x;
            a,x;
            (enlist(count first x)#a),x]
        ];
    // Insert the data
    t insert x;
    // if the handle .u.l is defined, add to the logfile and increment the total count .u.j
    if[l;
        l enlist (`upd;t;x);j+:1];
    }

Из этого вы можете видеть, что по умолчанию TP будет считать, что первый столбец является временным, а если нет, то добавляется временной интервал.Это полезно, если вы уже отправляете временную метку, так как вы можете извлечь время, которое потребовалось из канала, который обрабатывается TP.

Отправив сначала строку, TP добавит дополнительный столбец в ваши данные.Это может привести либо к несоответствию (если вы уже указали временной интервал), либо к ошибке типа (путем вставки временных интервалов в столбец строки и наоборот).

Изменение всего этого было бы тривиальным.Например, чтобы проверить второй столбец на промежуток времени вместо первого, это будет просто первый первый 1_ x.Возможно, вы всегда захотите проверить EOD (т. Е. Если вы действительно отправляете данные с временным интервалом в качестве первого столбца, и в этом случае вы должны поместить вызов .z.ts [] вне первого оператора if.

Подводя итог

  1. Порядок столбцов зависит от используемой вами функции обновления. Добавление временного интервала позволяет улучшить синхронизацию пропускной способности ваших данных от подачи до приема. В зависимости отто, что вы пытаетесь сделать, вы можете вместо этого добавить временную метку или просто использовать временные значения, которые вы добавляете в свой обработчик каналов.
  2. Использование строк и символов подробно здесь .Я хотел бы сказать, что Ferenc частично неверен, настоятельно рекомендуется использовать столбец с именем sym, чтобы соответствовать стандартам, но вы можете обновить свой код, чтобы относительно легко использовать другое имя столбца (вам нужно настроить tick.q, чтобы непроверьте время столбцов и sym.) Это может усложнить, в том числе, работу других.
1 голос
/ 25 июня 2019

Все таблицы, обрабатываемые заводом по обработке тикеров, должны иметь символ sym . Подписчики должны предоставить таблицу и могут предоставить необязательный набор значений sym, на которые они подписываются.

Теоретически, столбец sym также может быть строкой, но по соображениям производительности лучше использовать символ. Поиск символа быстрее, чем поиск строки, поскольку сравнение символов - это просто целочисленное сравнение за сценой.

...