например у меня есть таблица
CREATE TABLE example
(
IntArray Array(Int8),
StrArray Array(String)
) ENGINE = Memory
мне приходит пакет вида:
column name - string (uvariant (strlen) + []byte (str))
column type - string (uvariant (strlen) + []byte (str))
{ // data
{
array len (uvariant)
}
values
}
мне интересны первые 8 байт, сначала в них идет длина, но она переменной длины,
после 8 байт идут данные массива которыя я вычитываю в зависимости от типа
интересует как получить данный офсет и зачем он нужен?
Для массива будут идти подряд два куска с данными. Сначала - смещения массивов - это числа UInt64 и их столько, сколько строк в блоке. Смещение в позиции i - это суммарное количество элементов во всех массивах до i-го, включительно. Другими словами, это - смещение (в количестве элементов) до начала i+1-го массива. Последнее смещение - это суммарное количество элементов всех массивов. Следующий кусок данных - это все элементы массивов, уложенные подряд. Пример: массивы [1], [10, 11] смещения будут записаны так: 1, 3 элементы будут записаны так: 1, 10, 11
Обсуждают сегодня