2016-12-16 69 views
1

我有一個按月分區的SQL DW表。我們的數據庫管理員在幾個月前就開始工作了,所以我們的表格從那時起一直沒有分區。我們注意到只是因爲桌子放慢了速度。SQL DW - 使用拆分分區

當我們試圖通過使用分割功能,我們得到以下

錯誤添加分區「因爲分區不爲空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

禁用Columnstore索引,執行SPLIT,然後重建Columnstore索引。當一個Columnstore存在於表上時,只有空的分區可以被分割。抱歉。 –

+0

有關一些很好的信息,請參閱https://redphoenix.me/2014/08/18/how-to-split-non-empty-partitions-when-a-clustered-columnstore-index-exists-on-the-table/關於如何處理這個問題。 –

+0

這不起作用。 – Thomas

回答

2

有沒有必要猜測。 SQL Azure的數據倉庫支持以下動態管理視圖:

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真的不留下任何計劃或移交?