【问题标题】:SQL DW - Partitioning using splitSQL DW - 使用 split 进行分区
【发布时间】: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。

标签: sql-server azure-sqldw


【解决方案1】:

无需猜测。 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 真的没有留下任何计划或移交吗?

【讨论】:

    猜你喜欢
    • 2017-07-28
    • 2016-10-08
    • 2015-05-04
    • 2017-07-31
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多