Поделиться через


sys.column_store_segments (Transact-SQL)

Применимо к:SQL ServerAzure SQL База данныхAzure SQL Управляемый экземплярSQL База данных в Microsoft Fabric

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

Имя столбца Тип данных Description
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, если в сегменте столбца есть NULLs.
base_id bigint Базовый идентификатор значения, если используется тип 1 кодирования. Если тип кодирования 1 не используется, base_id установите значение -1.
magnitude float Величина, если используется тип 1 кодировки. Если тип кодирования 1 не используется, magnitude установите значение -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) и более поздним версиям, Базе данных SQL Azure и Управляемому экземпляру SQL Azure
min_deep_data varbinary(18) Используется для устранения сегментов.1 Только для внутреннего использования.

применимо к: SQL Server 2022 (16.x) и более поздним версиям, Базе данных SQL Azure и Управляемому экземпляру SQL Azure
max_deep_data varbinary(18) Используется для устранения сегментов.1 Только для внутреннего использования.

применимо к: SQL Server 2022 (16.x) и более поздним версиям, Базе данных SQL Azure и Управляемому экземпляру SQL Azure

1 После обновления до версии ядра СУБД, поддерживающей исключение сегмента min/max для расширенного набора типов данных (представленных в SQL Server 2022 (16.x)), min_deep_data и max_deep_data до NULL тех пор, пока индекс columnstore не будет перестроен с помощью ALTER INDEX ... REBUILD инструкции или CREATE INDEX ... WITH (DROP_EXISTING = ON) инструкции.

Замечания

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

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

Разрешения

Требуется VIEW DEFINITION разрешение на представление. Следующие столбцы возвращаютсяNULL, если пользователь также не имеет SELECT разрешения: has_nulls, base_id, , magnitude, max_data_idmin_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;