sys.column_store_segments (Transact-SQL)

Область применения: SQL Server 2012 (11.x) и более поздних версий Управляемого экземпляра SQL Azure

Возвращает одну строку для каждого сегмента столбца в индексе columnstore. Существует один сегмент столбца для каждого столбца для каждой группы строк. Например, таблица с 10 группами строк и 34 столбцами возвращает 340 строк.

Имя столбца Тип данных Описание:
partition_id bigint Указывает идентификатор секции. Уникален в базе данных.
Hobt_id bigint Идентификатор кучи или индекса дерева B (HoBT) для таблицы с этим индексом columnstore.
column_id int Идентификатор столбца columnstore.
segment_id int Идентификатор группы строк. Для обратной совместимости имя столбца продолжает вызываться segment_id даже если это идентификатор группы строк. Вы можете однозначно определить сегмент с помощью <hobt_id, partition_id, column_id, <segment_id>>.
version int Версия формата сегмента столбца.
encoding_type int Тип кодировки, используемой для этого сегмента:

1 = VALUE_BASED - нестрочная или двоичная без словаря (аналогично 4 с некоторыми внутренними вариациями)

2 = VALUE_HASH_BASED — нестрочного или двоичного столбца с общими значениями в словаре

3 = STRING_HASH_BASED — строковый или двоичный столбец с общими значениями в словаре

4 = STORE_BY_VALUE_BASED — нестрочная или двоичная без словаря

5 = STRING_STORE_BY_VALUE_BASED — строка или двоичный файл без словаря

Дополнительные сведения см. в разделе с примечаниями.
row_count int Число строк в группе строк.
has_nulls int Значение 1, если сегмент столбца содержит значения NULL.
base_id bigint Базовый идентификатор значения, если используется тип 1 кодирования. Если тип кодирования 1 не используется, base_id имеет значение -1.
Величины float Величина, если используется тип 1 кодировки. Если тип кодирования 1 не используется, величина имеет значение -1.
primary_dictionary_id int Значение 0 представляет глобальный словарь. Значение -1 указывает, что для этого столбца нет глобального словаря.
secondary_dictionary_id int Значение, отличное от нуля, указывает на локальный словарь для этого столбца в текущем сегменте (например, группу строк). Значение -1 указывает, что для этого сегмента отсутствует локальный словарь.
min_data_id bigint Минимальный идентификатор данных в сегменте столбца.
max_data_id bigint Максимальный идентификатор данных в сегменте столбца.
null_value bigint Значение, используемое для представления значений NULL.
on_disk_size bigint Размер сегмента в байтах.
collation_id int Применяется к SQL Server 2022 (16.x) и более поздним версиям.
Текущая сортировка при создании сегмента. Сопоставляется с внутренним идентификатором. В настоящее время только внутренние и не для разработки.
min_deep_data varbinary(18) Применяется к SQL Server 2022 (16.x) и более поздним версиям.
Используется для устранения сегментов.1 Только для внутреннего использования.
max_deep_data varbinary(18) Применяется к SQL Server 2022 (16.x) и более поздним версиям.
Используется для устранения сегментов.1 Только для внутреннего использования.

1 После обновления до версии SQL Server, поддерживающей исключение сегмента строки min/max (SQL Server 2022 (16.x) и более поздних версий), min_deep_data и max_deep_data будет выполняться NULL до тех пор, пока индекс columnstore не будет перестроен с помощью перестроения или drop/CREATE. После перестроения сегменты, содержащие типы данных, которые могут воспользоваться устранением сегмента строки min/max, будет содержать данные.

Замечания

Тип кодирования сегментов columnstore выбирается ядром СУБД с целью достижения наименьшей стоимости хранилища, анализируя данные сегмента. Если данные в основном отличаются, ядро СУБД использует кодировку на основе значений. Если данные в основном не отличаются, ядро СУБД использует хэш-кодировку. Выбор между кодировкой на основе строк и кодировкой на основе значений связан с типом хранимых данных, будь то строковые данные или двоичные данные. Все кодировки по возможности используют кодировку битовой упаковки и длины выполнения.

Исключение сегмента Columnstore применяется к числовым, датовым и временным типам данных, а также к типу данных datetimeoffset с масштабом меньше или равно двум. Начиная с SQL Server 2022 (16.x) возможности исключения сегментов распространяются на строковые, двоичные типы данных, типы данных GUID и тип данных datetimeoffset для масштаба больше двух. Устранение сегментов не применяется к типам данных бизнес-аналитики, таким как длина типа данных (max).

Разрешения

Для всех столбцов требуется по крайней мере VIEW DEFINITION разрешение на таблицу. Следующие столбцы возвращаютсяNULL, если пользователь также не имеет SELECT разрешения: has_nulls, base_id, , magnitude, min_data_idmax_data_idи null_value.

Видимость метаданных в представлениях каталогов ограничивается защищаемыми объектами, которыми пользователь владеет или на которые ему были предоставлены разрешения. Дополнительные сведения см. в разделе Metadata Visibility Configuration.

Примеры

Следующий запрос возвращает сведения о сегментах индекса columnstore.

SELECT i.name, p.object_id, p.index_id, i.type_desc,
    COUNT(*) AS number_of_segments
FROM sys.column_store_segments AS s
INNER JOIN sys.partitions AS p
    ON s.hobt_id = p.hobt_id
INNER JOIN sys.indexes AS i
    ON p.object_id = i.object_id
WHERE i.type = 5 OR i.type = 6
GROUP BY i.name, p.object_id, p.index_id, i.type_desc ;
GO

Далее