2017-02-15 9 views
0

У меня есть таблица «T» в kdb, у которой есть строки более 6 миллиардов. Когда я попытался выполнить запрос, как этотВыполнение запроса, имеющего более миллиарда строк

select from T where i < 10 

оно проливает wsfull expection. Есть ли способ, которым я могу выполнять такие запросы в таблице, имеющей большой объем данных.

ответ

3
10#T 

Выражение, как Вы написали, что первый делает растровое изображение, содержащее все элементы, где я (RowNumber) < 10, который является таким же высоким, как один из ваших колонок. Затем он делает то, что (которое только содержит til 10), а затем получает их из каждой строки. Вы можете сохранить последний шаг с:

T[til 10] 

но 10#T короче.

1

Предполагая, что у вас есть секционированная таблица, обычно полезно иметь столбец разделения (дата, int и т. Д.) В качестве первого элемента в предложении where вашего запроса - иначе, как упоминалось ранее, вы читаете шесть миллиардов список элементов в память, что приведет к «wsfull сигналу для любой машины с меньшим, чем требуемый объем оперативной памяти.

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

Для того, чтобы сделать это, не достигнув своего предела памяти, вы можете попробовать запустить следующее (если база данных дата-распределяли):

raze{10#select from T where date=x}each date

+0

или, если вы просто хотите, первые 10 строк первый раздел, выполните следующие действия: - 10 # выберите из T, где date = первая дата – Akash

+0

Да, однако, поскольку я прочитал этот вопрос, речь идет скорее о структурировании запросов, чтобы избежать «wsfull error», чем о том, чтобы запустить этот конкретный запрос –

 Смежные вопросы

  • Нет связанных вопросов^_^