SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Database v12 ではパーティション単位の Truncate が実行可能です

leave a comment

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

 

image

現在は 1 ~ 7 までのパーティションが存在していることが確認できますね。

従来までのパーティションではパーティション単位の Truncate が実行できなかったため、削除したいパーティションをスイッチしてからスイッチ先のテーブルで Truncate を実行する必要があったのですが、SQL Database v12 では、以下のように特定のパーティションを Truncate することができるようになっています。

Truncate Table PTTEST WITH(PARTITIONS(3, 5 to 6))

 

image

大量のデータを扱う際には、覚えておくとよい機能ですね。

最近の SQL Database は SQL Server より機能追加の間隔がかなり短いので、両方の情報を追わないとダメですね。

Written by masayuki.ozawa

4月 6th, 2015 at 10:43 am

Posted in 未分類

Leave a Reply

*