Подсчитать все таблицы в одном экземпляре в kdb - PullRequest
0 голосов
/ 23 октября 2018

Я бы хотел посчитать все таблицы в одном экземпляре.Я некоторое время не использовал kdb, и я забыл, как заставить это работать.Вот что я получил:

tablelist:tables[]
{select count i from x} each tablelist

но я получил ошибку типа

Ответы [ 5 ]

0 голосов
/ 17 июня 2019

Код ниже помогает нам получить счетчик каждой таблицы вместе с именем таблицы.

q)flip (`table;`msgcount)! flip {x, count value x}@'tables[]

Чтобы получить только счетчик, а не имя таблицы вместе с ним.

q){count value x}@'tables[]
0 голосов
/ 24 октября 2018

Ваше утверждение не содержит завершающей точки с запятой ; в конце первой строки, что приведет к ошибке в IDE, такой как qpad (при условии, что вы выполняете его как написано).

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

Один из способов добиться того, что вы пытаетесь, - это (использование фиктивных данных):

q){flip select counts:count i,tab:1#x from x}each tablelist:tables[]

 counts tab
 -------------
 5469   depth
 3150   quotes
 3005   trades

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

0 голосов
/ 24 октября 2018

Я использую 3.6 2018.05.17, и ваше выражение сработало для меня.Затем я изменяю select на exec, чтобы он возвращал только список отсчетов.

q) {exec count i from x} каждой таблицы []

0 голосов
/ 24 октября 2018

Каждый выполняемый вами запрос на выборку возвращает таблицу в форме:

x
-
3

Было бы лучше использовать exec, а не select, чтобы просто вернуть значение счетчика, например:

q){exec count i from x} each tables[]
3 2

Ваш текущий метод будет пытаться вернуть список таблиц: например:

q){select count i from x} each tables[]
+(,`x)!,,3
+(,`x)!,,2

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

0 голосов
/ 23 октября 2018

Вот один из способов

count each `. tables[]
...