Привести столбец списка символов к символу - PullRequest
0 голосов
/ 26 марта 2020

У меня есть таблица с ~ 3 миллиардами строк в hdb. Один из столбцов - список символов, я хочу привести этот столбец к символу после загрузки hdb. Но память быстро пересекает 300 ГБ, что я не могу себе позволить. Можно ли это как-то оптимизировать?

1 Ответ

1 голос
/ 26 марта 2020

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

Если на диске вы должны использовать утилиту Kx dbmaint - у нее есть конкретный c пример приведения из списка символов (строки) к перечисляемому символу.

https://github.com/KxSystems/kdb/blob/master/utils/dbmaint.md#fncol

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

В конечном счете, наиболее эффективный подход - сделать постоянные изменения на диске, предполагая, что строки повторяются (например, короткие)

...