是否可以在'CREATE Partition function'中使用通配符作为日期时间列?



我想对每月的前五天进行分区。 以下是我实现它的方式。

CREATE PARTITION FUNCTION [pf_sampleTable](datetime) AS RANGE LEFT FOR VALUES ( 
N'2019-12-01T00:00:00.000'
, N'2019-12-02T00:00:00.000'
, N'2019-12-03T00:00:00.000'
, N'2019-12-04T00:00:00.000'
, N'2019-12-05T00:00:00.000'
)
GO

在这种技术中,应该有一个更新操作来定义每个月的新时间范围。

我想知道我们是否可以在日期时间字段中使用通配符之类的东西。

CREATE PARTITION FUNCTION [pf_sampleTable](datetime) AS RANGE LEFT FOR VALUES (  
N'%-01T00:00:00.000'
, N'%-02T00:00:00.000'
, N'%-03T00:00:00.000'
, N'%-04T00:00:00.000'
, N'%-05T00:00:00.000'
)
GO

CREATE PARTITION FUNCTIONDDL 创建静态分区。尽管可以为运行语句时计算的分区边界指定表达式,但之后不会计算这些表达式。创建后需要ALTER创建或删除分区的功能。

考虑根据需要安排每日作业以执行所需的脚本(并可能删除旧分区(。

我建议在对具有时间分量的时态类型进行分区时使用RANGE RIGHT函数,以便正好是午夜的值不会在错误的分区中结束。下面的示例将提前 2 天创建未来的日期分区,以避免在拆分分区时移动昂贵的数据。

--initial 5 boundaries
CREATE PARTITION FUNCTION PF_DateTime(datetime) AS
RANGE RIGHT FOR VALUES(
NULL -- (dates outside expected range)
, N'2019-12-01T00:00:00.000'
, N'2019-12-02T00:00:00.000'
, N'2019-12-03T00:00:00.000'
, N'2019-12-04T00:00:00.000'
, N'2019-12-05T00:00:00.000'
);
CREATE PARTITION SCHEME PS_DateTime AS
PARTITION PF_DateTime ALL TO ([PRIMARY]);
--run this after midnight on 2019-12-04 to create the 2019-12-06 boundary
ALTER PARTITION SCHEME PS_DateTime
NEXT USED [PRIMARY];
ALTER PARTITION FUNCTION PF_DateTime()
SPLIT RANGE(CAST(DATEADD(day, 2, GETDATE()) AS date));

有关详细信息,请参阅表分区最佳实践。

最新更新