SQL DW - 使用拆分进行分区

时间:2016-12-16 22:44:34

标签: sql-server azure-sqldw

我有一个按月分区的SQL DW表。我们的DBA几个月前就开始了,所以我们的表格从那时起就没有分区了。我们注意到只是由于桌子上的速度减慢了。

当我们尝试使用split函数添加分区时,我们会得到以下错误

“ALTER PARTITION语句的SPLIT子句失败,因为分区不为空。”

我们尝试了以下

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分区似乎没问题,虽然我们必须通过分区号,直到我们在范围内找到相应的分区。

任何人都可以帮助我们解决为什么即使在我们切换之后分区在分割期间仍然不是空的?

1 个答案:

答案 0 :(得分:2)

没有必要猜测。 Azure SQL数据仓库支持以下DMV:

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

这将帮助您了解表格如何映射到值,以便您可以清空相关分区。

查看本文以获取有关Azure SQL数据仓库中分区的提示:

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

另请参阅最近的答案,该解决方案演示分区切换并显示目标表必须与源具有相同的分区布局才能使其正常工作:

Using Polybase to load data into an existing table in parallel

你的DBA真的没有留下任何计划或移交吗?