以前、SQL Database V12 Preview のパーティショニングを使ってみる という投稿を書いた際には気付かなかったのですが、v12 を勉強しなおしていて、SQL データベース V12 の新機能 を見ていて気づきました。
特定のパーティションの切り捨てできます。詳細については、「TRUNCATE TABLE (Transact-SQL)」をご覧ください。
TRUNCATE TABLE がパーティション単位の切り捨てを許可するようになっていたんですね。
日本語版の TRUNCATE TABLE のヘルプには記載されていなかったのですが、英語版には記載されています。
TRUNCATE TABLE (Transact-SQL)
ということで早速試してみたいと思います。
まずは、パーティションテーブルを作成します。
CREATE PARTITION FUNCTION PF_PTTEST(datetime2(0))
AS RANGE RIGHT FOR
VALUES ('2011-01-01', '2012-01-01', '2013-01-01', '2014-01-01', '2015-01-01', '2016-01-01')
GO
CREATE PARTITION SCHEME PS_PTTEST
AS PARTITION PF_PTTEST ALL TO([PRIMARY])
GO
CREATE TABLE PTTEST
(Col1 uniqueidentifier,
Col2 datetime2(0))
ON PS_PTTEST(Col2)
SET NOCOUNT ON
GO
DECLARE @cnt int = 0, @datetime datetime2(0) = '2010-01-01'
BEGIN TRAN
WHILE (@cnt <= 100000)
BEGIN
INSERT INTO PTTEST VALUES(NEWID(), @datetime)
SET @cnt += 1
SET @datetime = DATEADD(d, 1, @datetime)
IF @datetime >= '2017-01-01' SET @datetime = '2010-01-01'
END
COMMIT TRAN
作成が終わったらデータを確認します。
SELECT
$PARTITION.PF_PTTEST(Col2) AS PartitionNo,
COUNT(*), MIN(Col2), MAX(Col2)
FROM
PTTEST
GROUP BY
$PARTITION.PF_PTTEST(Col2)
現在は 1 ~ 7 までのパーティションが存在していることが確認できますね。
従来までのパーティションではパーティション単位の Truncate が実行できなかったため、削除したいパーティションをスイッチしてからスイッチ先のテーブルで Truncate を実行する必要があったのですが、SQL Database v12 では、以下のように特定のパーティションを Truncate することができるようになっています。
Truncate Table PTTEST WITH(PARTITIONS(3, 5 to 6))
大量のデータを扱う際には、覚えておくとよい機能ですね。
最近の SQL Database は SQL Server より機能追加の間隔がかなり短いので、両方の情報を追わないとダメですね。
fantastic post! This is so chock full of users information and the resources you provided was helpful to me. You may have a look on this blog which I found very interesting and unique:
http://www.sqlmvp.org/new-t-sql-features-in-sql-server-2016/
Johnson
3 1月 17 at 15:26