我们有一个使用以下分区模式和函数分区的表
CREATE PARTITION FUNCTION [pf_monthly_dateid](int) AS RANGE LEFT FOR VALUES (20140100, 20140200, 20140300, 20140400, 20140500, 20140600, 20140700, 20140800, 20140900, 20141000, 20141100, 20141200, 20150100, 20150200, 20150300, 20150400, 20150500, 20150600, 20150700, 20150800, 20150900, 20151000, 20151100, 20151200, 20160100, 20160200, 20160300, 20160400, 20160500, 20160600, 20160700, 20160800, 20160900, 20161000, 20161100, 20161200, 20170100, 20170200, 20170300, 20170400, 20170500, 20170600, 20170700, 20170800, 20170900, 20171000, 20171100, 20171200, 20180100, 20180200, 20180300, 20180400, 20180500, 20180600, 20180700, 20180800, 20180900, 20181000, 20181100, 20181200)
GO
CREATE PARTITION SCHEME [ps_monthly_dateid] AS PARTITION [pf_monthly_dateid] TO ([PRIMARY], [201401], [201402], [201403], [201404], [201405], [201406], [201407], [201408], [201409], [201410], [201411], [201412], [201501], [201502], [201503], [201504], [201505], [201506], [201507], [201508], [201509], [201510], [201511], [201512], [201601], [201602], [201603], [201604], [201605], [201606], [201607], [201608], [201609], [201610], [201611], [201612], [201701], [201702], [201703], [201704], [201705], [201706], [201707], [201708], [201709], [201710], [201711], [201712], [201801], [201802], [201803], [201804], [201805], [201806], [201807], [201808], [201809], [201810], [201811], [201812])
GO
我们现在需要将一些历史数据加载到 2013 年的表中,因此我想更改函数和架构以为此添加每月分区。但我不知道如何使用 SPLIT 做到这一点?我看过的每个示例和教程都展示了如何将新分区添加到范围的末尾,而不是在中间拆分一个。
请问有什么建议吗?
您在中间提到拆分,但您的要求是在开头添加一个边界(在第一个现有边界之前)。因此,只要没有现有值小于或等于 20140100,就不需要进行昂贵的数据移动。我假设这里就是这种情况。
由于第一个分区位于错误的文件组 (PRIMARY) 上,首先将其移动到正确的每月文件组:
然后,在加载数据之前创建所需的历史分区:
一般的最佳实践是计划这样,而不是只拆分空分区。在更改边界期间执行的数据移动需要大约 4 倍于正常 DML 的
SPLIT
记录。MERGE
因此,还可以考虑在正确的文件组(即使没有文件)上创建一个空分区,以预期加载先前的数据。