以前、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