【发布时间】:2016-12-17 17:55:02
【问题描述】:
我有一个按月分区的 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 分区似乎没问题,尽管我们确实必须遍历分区号,直到在范围内找到相应的分区。
任何人都可以帮助我们解释为什么即使在我们切换之后分区仍然会在拆分期间说不为空?
【问题讨论】:
-
禁用列存储索引,执行 SPLIT,然后重建列存储索引。当表上存在列存储时,只能拆分空分区。对不起。
-
请参阅redphoenix.me/2014/08/18/…,了解有关如何处理此问题的一些有用信息。
-
那行不通。
-
Msg 7725,第 16 级,状态 1,第 31 行更改分区函数语句失败。无法通过更改分区函数“PFunc_ce19acb8949f4e248be4ce51ec680b3b”重新分区表“Table_1b651cb9dc3149d1ba96dfac0533b021_4”,因为其聚集索引“Idx_3b8705810d524f0797838b47ef870b4f”已禁用。操作被用户取消。
-
如果您尝试禁用和拆分,您会收到上述错误。此外,您发布的链接不适用于 SQL DW。