Сравнение подсписка и оператора take (#) в q kdb - PullRequest
4 голосов
/ 27 мая 2019

При извлечении подмножества данных из таблицы, когда я использую оператор подсписка или принятия (#), оператор take в большинстве случаев работает медленнее, чем функция подсписка.

5 замечаний, отправленных в комментарии после запроса таблицыt в hdb, который состоит из 231131 строки и 71 столбца.

\t 10000 10 sublist select from t where date=.z.d-5 /Time taken - 62j 92j 68j  63j 65j 
\t 10000 10#select from t where date=.z.d-5 / Time taken - 544j 546j 567j 569j 585j

В этом небольшом примере кажется, что подсписок быстрее по сравнению с оператором take.
Но когда я вижу код подсписка,он внутренне использует оператор взятия, интересно, как подсписок может быть более эффективным?

1 Ответ

7 голосов
/ 28 мая 2019

Синтаксис, который вы использовали для синхронизации операций, означает, что вы синхронизируете две разные операции.

\t 10000 10 sublist select from t where date=.z.d-5 /Time taken - 62j 92j 68j  63j 65j

Эта операция подсписка показывает фрагмент длины 10, начиная с 10000-й записи.

\t 10000 10#select from t where date=.z.d-5 / Time taken - 544j 546j 567j 569j 585j

Эта операция # вернет 10000 строк, каждая из которых состоит из 10 строк из результата функции выбора.

Что вы, вероятно, хотели сделать, это:

\t:10000 10 sublist select from t where date=.z.d-5 /Time taken - 62j 92j 68j  63j 65j 
\t:10000 10#select from t where date=.z.d-5 / Time taken - 544j 546j 567j 569j 585j

ЧтоВремя каждой из функций 10000 раз.Исходя из моего собственного тестирования, подсписок и # дают аналогичные значения времени.

...