Статические таблицы
В данном разделе содержится вводная информация о статических таблицах, их типах и схеме.
Кроме статических таблиц, система YTsaurus поддерживает динамические таблицы. Подробнее о видах и возможностях динамических таблиц можно прочитать в разделе Динамические таблицы.
Общее описание
Статические таблицы — это классический тип таблиц в системе YTsaurus.
Физически такие таблицы разбиты на части (чанки), каждая часть содержит фрагмент записей таблицы.
Название «статические» подразумевает, что данные, которые уже записаны в таблицу, невозможно обновить без перезаписи. Однако можно добавлять записи в конец таблицы.
Также данные в таблице можно менять с помощью следующих операций, но следует понимать, что в типичном случае потребуется чтение и перезапись целых чанков таблицы:
Статические таблицы бывают сортированные и несортированные.
Сортированные таблицы
Для сортированной таблицы известен набор неизменяемых ключевых колонок.
Записи таблицы оказываются физически или логически упорядочены по ключу. Поэтому сортированные таблицы дают возможность эффективного поиска данных по ключу.
Таблица сортированная — если в таблице есть хотя бы одна ключевая колонка, атрибут таблицы sorted
равен true
. Атрибут доступен только для чтения.
В схеме сортированных таблиц есть ключевые (сортированные) колонки. В схеме они помечены полем sort_order
.
Список всех ключевых колонок доступен в атрибутах таблицы key_columns
и sorted_by
. Последовательность колонок определяется в схеме таблицы. Атрибуты доступны только для чтения.
Примечание
Записи, добавляемые в конец сортированной таблицы, не должны нарушать порядок сортировки.
Несортированные таблицы
Для несортированных таблиц понятие ключа не определено, поэтому поиск данных по ключу возможен только с помощью чтения всего содержимого таблицы. Но возможно обращение по номерам строк.
Примечание
Добавление записей в конец несортированной таблицы лежит в основе многих способов загрузки данных в кластеры системы YTsaurus.
Чтобы эта операция была эффективна, учитывайте следующие особенности:
- Любой запрос на изменение обрабатывается мастер-сервером. Такая схема плохо масштабируется, поэтому не стоит делать более 100 записей в секунду.
- Запись небольшого числа строк в одном запросе приводит к появлению мелких чанков, которые нагружают мастер-сервер большим объемом метаданных и делают чтение менее эффективным.
Атрибуты
Любая статическая таблица имеет атрибуты, представленные в таблице:
Имя | Тип | Описание | Обязательный |
---|---|---|---|
sorted |
bool |
Является ли таблица сортированной. | Нет |
key_columns |
array<string> |
Имена ключевых колонок. | Да |
dynamic |
bool |
Является ли таблица динамической. | Нет |
schema |
TableSchema |
Схема таблицы. | Нет |
row_count |
integer |
Количество строк в таблице. | Да |
data_weight |
integer |
"Логический" объем несжатых данных, записанных в таблицу. Зависит только от значений в ячейках таблицы и количества строк. Вычисляется как row_count + sum(data_weight(value)) по всем значениям в ячейках таблицы. data_weight для значения зависит от физического типа значения: для int64 , uint64 , double — 8 байт; для bool , null — 1 байт; для string — длина строки; для any — длина значения, сериализованного в binary YSON. |
Да |
Кроме того, таблица является объектом, который владеет чанками, то есть имеет соответствующие атрибуты, представленные в таблице.
Схема статических таблиц
Схема статической таблицы представляет из себя список описаний колонок. Подробное описание формата схемы приведено в разделе Схема данных.
Ограничения
На строки и схему таблицы наложен ряд ограничений по размеру и типу содержимого:
-
Количество колонок в статической таблице не может быть больше 32768. Не рекомендуется использовать более тысячи колонок.
-
Имя колонки представляется произвольной последовательностью байтов и может содержать от 1 до 256 символов. Также оно не может начинаться с зарезервированного системного префикса
@
. -
Максимальная длина значений типа
string
в статической таблице ограничивается через максимальный вес строки. -
Максимальный вес строки — 128 мегабайт. Вес строки — сумма длин всех значений в данной строке в байтах. При этом длины значений считаются в зависимости от типа:
int64
,uint64
,double
— 8 байт;boolean
— 1 байт;string
— длина строки;any
— длина структуры сериализованной в binary yson, в байтах;null
— 0 байт.
-
Максимальный вес ключа в сортированной таблице — 256 килобайт. Ограничение по умолчанию — 16 килобайт. Вес ключа считается аналогично весу строки.
Внимание
Повышать лимит на вес ключа крайне не рекомендуется, так как есть риск переполнения памяти мастер-сервера. Изменение настройки
max_key_weight
допустимо только в качестве экстренной меры.