SQL DW — разбиение с помощью разделения

У меня есть таблица SQL DW, разделенная по месяцам. Наш администратор баз данных переехал несколько месяцев назад, и с тех пор наши таблицы не были разделены. Заметили только из-за подтормаживаний на столах.

Когда мы пытаемся добавить раздел с помощью функции разделения, мы получаем ошибку ниже

«Сбой предложения SPLIT инструкции ALTER PARTITION, поскольку раздел не пуст».

Мы пробовали следующее

CREATE TABLE [data].[sessions_range]
WITH
(
    CLUSTERED COLUMNSTORE INDEX,
     DISTRIBUTION = HASH([sesh_id]),
    PARTITION 
    (
        -- SAMPLE RANGE
        [session_start_dt] RANGE RIGHT FOR VALUES
        (
            '2016-12-01'
        )
    )
)
AS
SELECT *
FROM    [data].[sessions]
WHERE   1=2
;

ALTER TABLE [data].[sessions] SWITCH PARTITION <guessed at a partition number> 
TO [data].[sessions_range] PARTITION 2;

ALTER TABLE [data].[sessions] SPLIT RANGE ('2016-12-01');

После последней строки это не удается. Раздел Switch, похоже, работает нормально, хотя нам пришлось просмотреть номера разделов, пока мы не нашли соответствующий раздел в пределах диапазона.

Может ли кто-нибудь помочь нам понять, почему раздел по-прежнему будет говорить, что он не пуст во время разделения, даже после того, как мы переключились?


person Thomas    schedule 16.12.2016    source источник
comment
Отключите индекс Columnstore, выполните SPLIT, затем перестройте индекс Columnstore. Только пустые разделы могут быть разделены, если в таблице существует Columnstore. Извиняюсь.   -  person Laughing Vergil    schedule 17.12.2016
comment
См. redphoenix.me/2014/08/18/, чтобы получить полезную информацию о том, как с этим бороться.   -  person Laughing Vergil    schedule 17.12.2016
comment
Это не работает.   -  person Thomas    schedule 17.12.2016
comment
Сообщение 7725, уровень 16, состояние 1, строка 31 Ошибка оператора функции изменения раздела. Не удается перераспределить таблицу Table_1b651cb9dc3149d1ba96dfac0533b021_4, изменив функцию секционирования PFunc_ce19acb8949f4e248be4ce51ec680b3b, поскольку ее кластеризованный индекс Idx_3b8705810d524f0797838b47ef870b4f отключен. Операция отменена пользователем.   -  person Thomas    schedule 17.12.2016
comment
Если вы попытаетесь отключить и разделить, вы получите ошибку выше. Также ссылка, которую вы разместили, не предназначена для SQL DW.   -  person Thomas    schedule 17.12.2016


Ответы (1)


Нет нужды гадать. Хранилище данных SQL Azure поддерживает следующие DMV:

sys.partitions
sys.partition_functions
sys.partition_parameters
sys.partition_range_values
sys.partition_schemes

Это поможет вам узнать, как ваша таблица сопоставляется со значениями, чтобы вы могли очистить соответствующий раздел.

Ознакомьтесь с этой статьей, чтобы получить советы по секционированию в хранилище данных SQL Azure:

https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-tables-partition

Также просмотрите этот недавний ответ, который демонстрирует переключение разделов и показывает, как целевая таблица должна иметь ту же компоновку разделов, что и исходная, чтобы это работало:

Использование Polybase для загрузки данных в существующая таблица параллельно

Ваш администратор базы данных действительно не оставил никакого плана или передачи?

person wBob    schedule 17.12.2016