sys.column_store_segments (Transact-SQL)
Область применения: SQL Server 2012 (11.x) и более поздних версий Управляемый экземпляр SQL Azure
Возвращает одну строку для каждого сегмента столбца в индексе 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, если сегмент столбца содержит значения 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_id
max_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
Следующие шаги
- Представления каталога объектов (Transact-SQL)
- Представления каталога (Transact-SQL)
- Часто задаваемые вопросы о запросах к системному каталогу SQL Server
- sys.columns (Transact-SQL)
- sys.all_columns (Transact-SQL)
- sys.computed_columns (Transact-SQL)
- Руководство по индексам columnstore
- sys.column_store_dictionaries (Transact-SQL)